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.

Clientbound (Server → Client) · PLAY · net/minecraft/network/play/server/S38PacketPlayerListItem.java
playertablist

Fields

FieldTypeDescription
actionVarInt Enum0=ADD_PLAYER, 1=UPDATE_GAMEMODE, 2=UPDATE_LATENCY, 3=UPDATE_DISPLAY_NAME, 4=REMOVE_PLAYER
playersPlayerInfo[]List of AddPlayerData entries (UUID, name, profile properties, gamemode, ping, display name)

Wire Encoding

FieldTypeNotes
ActionVarInt Enum0=add, 1=updateGamemode, 2=updateLatency, 3=updateDisplayName, 4=remove
Number of PlayersVarInt
Per-Player DataUUID + String + Property[] + VarInt + VarInt + ChatComponentVaries by action type

MCP References

MCPNetHandlerPlayClient.handlePlayerListItem()

Handler Interface

HNDINetHandlerPlayClient

Notes

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.

Vanilla hook: EventReceivePacket
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.

Vanilla hook: EventReceivePacket
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.

Vanilla hook: EventReceivePacket
← Back to all packets