Skip to main content

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

_accountName
String
required
The account name associated with this character
_baseClass
int
The character’s base class ID (before subclass system)
_activeClass
int
Currently active class ID (changes with subclass switching)
_classIndex
int
default:"0"
Index of the current subclass (0 = main class)

Character Stats

_pvpKills
int
Number of PvP kills (player killed was PvP flagged)
_pkKills
int
PK counter (non-PvP flagged players killed)
_pvpFlag
byte
PvP flag state: 0 = White (normal), 1 = Purple (PvP mode)
_fame
int
Fame points accumulated by the character
_expBeforeDeath
long
Experience points before the last death penalty

Social Features

_contactList
ContactList
Manages contacts and social interactions
_friendList
Collection<Integer>
Set of friend character IDs (thread-safe)

Olympiad

_inOlympiadMode
boolean
default:"false"
Whether player is currently in Olympiad mode
_olympiadGameId
int
default:"-1"
Current Olympiad game ID
_olympiadSide
int
default:"-1"
Player’s side in Olympiad match

Core Methods

Character Information

getAccountName
String
Returns the account name for this character
String accountName = player.getAccountName();
getLevel
int
Returns the current character level
int level = player.getLevel();
if (level >= 76) {
    // High level content
}
getTemplate
PlayerTemplate
Returns the character template with base stats
PlayerTemplate template = player.getTemplate();
int baseCON = template.getBaseCON();

Stats and Appearance

getStat
PlayerStat
Returns the player’s stat manager
PlayerStat stat = player.getStat();
stat.addExp(100000);
getStatus
PlayerStatus
Returns the player’s status manager (HP/MP/CP)
PlayerStatus status = player.getStatus();
double currentHP = status.getCurrentHp();
status.setCurrentHp(currentHP + 500);
getAppearance
PlayerAppearance
Returns the player’s visual appearance settings
PlayerAppearance appearance = player.getAppearance();
int hairStyle = appearance.getHairStyle();

PvP and Combat

getPvpKills
int
Returns total PvP kills
int pvpKills = player.getPvpKills();
setPvpKills
void
Sets PvP kill count
player.setPvpKills(player.getPvpKills() + 1);
getPkKills
int
Returns total PK (player kill) count
int pkCount = player.getPkKills();
if (pkCount > 5) {
    // Player is a known PK
}
setPkKills
void
Sets PK count
player.setPkKills(player.getPkKills() + 1);
getPvpFlag
byte
Returns current PvP flag state (0=white, 1=purple)
byte pvpFlag = player.getPvpFlag();
boolean isPvPFlagged = pvpFlag > 0;
setPvpFlag
void
Sets PvP flag state
player.setPvpFlag(1); // Flag as PvP

Quest Management

getQuestState
QuestState
Retrieves quest state for a specific quest
QuestState qs = player.getQuestState("Q00255_Tutorial");
if (qs != null && qs.isCompleted()) {
    // Quest already completed
}
setQuestState
void
Sets or updates quest state
QuestState newState = new QuestState(quest, player, State.STARTED);
player.setQuestState(newState);
getAllActiveQuests
List<Quest>
Returns all currently active quests
List<Quest> activeQuests = player.getAllActiveQuests();
for (Quest quest : activeQuests) {
    player.sendMessage("Active: " + quest.getName());
}

Inventory and Items

getInventory
PlayerInventory
Returns the player’s inventory
PlayerInventory inv = player.getInventory();
Item item = inv.getItemByItemId(57); // Get adena
getWarehouse
PlayerWarehouse
Returns the player’s warehouse
PlayerWarehouse wh = player.getWarehouse();
int size = wh.getSize();

Subclass System

setBaseClass
void
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

getSiegeState
byte
Returns current siege state
byte siegeState = player.getSiegeState();
setSiegeState
void
Sets siege state
player.setSiegeState((byte) 1);
getSiegeSide
int
Returns the castle/fort ID the player is registered for
int siegeSide = player.getSiegeSide();
isSiegeFriend
boolean
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

ConstantValueDescription
ID_NONE-1Represents no ID/invalid ID
REQUEST_TIMEOUT15Request 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

Build docs developers (and LLMs) love