Overview
The Player class represents all player characters in the L2J Mobius Chronicle 4 game world. This class extends Playable and manages all aspects of player state, including inventory, skills, stats, and social interactions.
Package: org.l2jmobius.gameserver.model.actor
Hierarchy:
WorldObject
└── Creature
└── Playable
└── Player
Source: model/actor/Player.java:339
Class Hierarchy
WorldObject Base class for all world objects with position and ID
Creature Adds HP/MP, combat, movement, and AI systems
Playable Shared functionality for players and summons
Player Complete player character implementation
Key Properties
Character Identity
The account name associated with this character
The character’s base class ID (before subclass system)
Currently active class ID (changes with subclass switching)
Index of the current subclass (0 = main class)
Character Stats
Number of PvP kills (player killed was PvP flagged)
PK counter (non-PvP flagged players killed)
PvP flag state: 0 = White (normal), 1 = Purple (PvP mode)
Fame points accumulated by the character
Experience points before the last death penalty
Social Features
Manages contacts and social interactions
Set of friend character IDs (thread-safe)
Olympiad
Whether player is currently in Olympiad mode
Player’s side in Olympiad match
Core Methods
Returns the account name for this character String accountName = player . getAccountName ();
Returns the current character level int level = player . getLevel ();
if (level >= 76 ) {
// High level content
}
Returns the character template with base stats PlayerTemplate template = player . getTemplate ();
int baseCON = template . getBaseCON ();
Stats and Appearance
Returns the player’s stat manager PlayerStat stat = player . getStat ();
stat . addExp ( 100000 );
Returns the player’s status manager (HP/MP/CP) PlayerStatus status = player . getStatus ();
double currentHP = status . getCurrentHp ();
status . setCurrentHp (currentHP + 500 );
Returns the player’s visual appearance settings PlayerAppearance appearance = player . getAppearance ();
int hairStyle = appearance . getHairStyle ();
PvP and Combat
Returns total PvP kills int pvpKills = player . getPvpKills ();
Sets PvP kill count player . setPvpKills ( player . getPvpKills () + 1 );
Returns total PK (player kill) count int pkCount = player . getPkKills ();
if (pkCount > 5 ) {
// Player is a known PK
}
Sets PK count player . setPkKills ( player . getPkKills () + 1 );
Returns current PvP flag state (0=white, 1=purple) byte pvpFlag = player . getPvpFlag ();
boolean isPvPFlagged = pvpFlag > 0 ;
Sets PvP flag state player . setPvpFlag ( 1 ); // Flag as PvP
Quest Management
Retrieves quest state for a specific quest QuestState qs = player . getQuestState ( "Q00255_Tutorial" );
if (qs != null && qs . isCompleted ()) {
// Quest already completed
}
Sets or updates quest state QuestState newState = new QuestState (quest, player, State . STARTED );
player . setQuestState (newState);
Returns all currently active quests List < Quest > activeQuests = player . getAllActiveQuests ();
for ( Quest quest : activeQuests) {
player . sendMessage ( "Active: " + quest . getName ());
}
Inventory and Items
Returns the player’s inventory PlayerInventory inv = player . getInventory ();
Item item = inv . getItemByItemId ( 57 ); // Get adena
Returns the player’s warehouse PlayerWarehouse wh = player . getWarehouse ();
int size = wh . getSize ();
Subclass System
Sets the character’s base class player . setBaseClass ( PlayerClass . GLADIATOR );
getSubClasses
Map<Integer, SubClassHolder>
Returns all subclasses Map < Integer , SubClassHolder > subClasses = player . getSubClasses ();
for ( SubClassHolder subClass : subClasses . values ()) {
int classId = subClass . getClassId ();
}
Siege and Territory
Returns current siege state byte siegeState = player . getSiegeState ();
Sets siege state player . setSiegeState (( byte ) 1 );
Returns the castle/fort ID the player is registered for int siegeSide = player . getSiegeSide ();
Checks if target is on same siege side if ( player . isSiegeFriend (target)) {
// Don't attack allies
}
Usage Examples
Creating and Managing Players
// Access player instance (usually from client connection)
Player player = client . getPlayer ();
// Get basic information
String name = player . getName ();
int level = player . getLevel ();
int objectId = player . getObjectId ();
// Check player status
boolean isOnline = player . isOnline ();
boolean isDead = player . isDead ();
boolean isInCombat = player . isInCombat ();
Managing Experience and Levels
// Add experience
long expToAdd = 100000 ;
player . getStat (). addExp (expToAdd);
// Add skill points
int spToAdd = 1000 ;
player . getStat (). addSp (spToAdd);
// Check if can level up
long currentExp = player . getStat (). getExp ();
long expForNextLevel = player . getStat (). getExpForLevel ( player . getLevel () + 1 );
Quest Interaction
// Get or create quest state
QuestState qs = player . getQuestState ( "Q00255_Tutorial" );
if (qs == null ) {
qs = quest . newQuestState (player);
player . setQuestState (qs);
}
// Set quest variable
qs . set ( "cond" , "1" );
// Give quest reward
qs . giveItems ( 57 , 10000 ); // 10000 adena
qs . addExpAndSp ( 50000 , 5000 );
qs . exitQuest ( false ); // Complete quest
PvP Management
// Handle PvP kill
public void onPvPKill ( Player killer, Player victim) {
if ( victim . getPvpFlag () > 0 ) {
// Victim was flagged - legitimate PvP
killer . setPvpKills ( killer . getPvpKills () + 1 );
} else {
// Victim was not flagged - PK
killer . setPkKills ( killer . getPkKills () + 1 );
killer . setKarma ( killer . getKarma () + 500 );
}
}
// Flag player for PvP
player . setPvpFlag ( 1 );
player . updatePvPFlag ( 1 );
Inventory Operations
// Get inventory
PlayerInventory inv = player . getInventory ();
// Add items
Item item = inv . addItem ( "Quest" , 57 , 10000 , player, null );
// Remove items
boolean removed = inv . destroyItemByItemId ( "Consume" , 57 , 5000 , player, null );
// Check inventory space
int freeSlots = inv . getNonQuestSize ();
if (freeSlots < 5 ) {
player . sendMessage ( "Inventory almost full!" );
}
Social Features
// Add friend
player . getFriendList (). add (friendId);
// Check if in friend list
if ( player . getFriendList (). contains (targetId)) {
// Is friend
}
// Block player
BlockList . addToBlockList (player, targetName);
PlayerStat Manages experience, levels, and stat calculations
PlayerStatus Manages HP, MP, CP regeneration and status
PlayerInventory Item storage and equipment management
PlayerTemplate Base stats and class configuration
Constants
Constant Value Description ID_NONE-1 Represents no ID/invalid ID REQUEST_TIMEOUT15 Request timeout in seconds NEWBIE_KEY”NEWBIE” Key for newbie status variable
Notes
The Player class is the most complex class in L2J Mobius with over 350KB of source code
Always use thread-safe methods when modifying player state from async tasks
Player data is auto-saved periodically via PlayerAutoSaveTaskManager
Use player.sendPacket() to send network packets to the client
Quest states are class-indexed for subclass support