0x38 S38PacketPlayerListItem
Adds, updates, or removes entries from the tab player list. Used for player join/leave, gamemode changes, ping updates, and display name changes.
Fields
| Field | Type | Description |
|---|---|---|
| action | VarInt Enum | 0=ADD_PLAYER, 1=UPDATE_GAMEMODE, 2=UPDATE_LATENCY, 3=UPDATE_DISPLAY_NAME, 4=REMOVE_PLAYER |
| players | PlayerInfo[] | List of AddPlayerData entries (UUID, name, profile properties, gamemode, ping, display name) |
Wire Encoding
| Field | Type | Notes |
|---|---|---|
| Action | VarInt Enum | 0=add, 1=updateGamemode, 2=updateLatency, 3=updateDisplayName, 4=remove |
| Number of Players | VarInt | |
| Per-Player Data | UUID + String + Property[] + VarInt + VarInt + ChatComponent | Varies by action type |
MCP References
MCP
NetHandlerPlayClient.handlePlayerListItem()Handler Interface
HND
INetHandlerPlayClientNotes
Action 0 (ADD_PLAYER): UUID, name, skin properties, gamemode, ping, display name. Action 4 (REMOVE_PLAYER): just UUID. Action 2 (UPDATE_LATENCY): UUID + ping. This is how the client builds the tab list and gets player skins.
implementation Implementation Cases
NameProtect
(Sigma 3.9, Tenacity 6.0)
Track player list changes for name protect and tab GUI. AntiBot uses tab list to verify real players.
AntiBot
(Sigma 3.9, Tenacity 6.0)
Track player list changes for name protect and tab GUI. AntiBot uses tab list to verify real players.
TabGUI
(Sigma 3.9, Tenacity 6.0)
Track player list changes for name protect and tab GUI. AntiBot uses tab list to verify real players.