Network Protocol
Note: All packets are sent using TCP only.
Integer types
Integer types are represented with s8/s16/s32/s64 and u8/u16/u32/u64.
The s/u means signed/unsigned and the number is the size of the type in bits.
Login
Clientbound
ClientOk
Packet sent from a server to accept a connection.
| Field name |
Field type |
Notes |
| Client ID |
u16 |
ID assigned by the server for this client |
| Singleplayer? |
bool |
Whether or not the server runs a singleplayer game |
ClientRefused
Packet sent from a server to refuse a connection.
This packet has no field.
Serverbound
ClientConnect
Packet sent from a client attempting to connect.
| Field name |
Field type |
Notes |
| Username |
std::string |
Name of the player attempting to connect |
ClientDisconnect
Packet sent from a client attempting to disconnect.
This packet has no field.
Game
Clientbound
ServerTick
Packet sent at the beginning of every server tick.
| Field name |
Field type |
Notes |
| Current time |
u64 |
Current time in the server |
ServerClosed
| Field name |
Field type |
Notes |
| Message |
std::string |
Why the server has been closed |
ChunkData
| Field name |
Field type |
Notes |
| Chunk X |
s32 |
Chunk X coordinate |
| Chunk Y |
s32 |
Chunk Y coordinate |
| Chunk Z |
s32 |
Chunk Z coordinate |
| Array |
|
|
| - Block data |
u32 |
Block ID and data |
| - Light value |
u8 |
Sunlight and torchlight values |
ChunkUnload
| Field name |
Field type |
Notes |
| Chunk X |
s32 |
Chunk X coordinate |
| Chunk Y |
s32 |
Chunk Y coordinate |
| Chunk Z |
s32 |
Chunk Z coordinate |
PlayerInvUpdate (clientbound)
| Field name |
Field type |
Notes |
| ID |
u16 |
Player ID |
| Inventory |
Inventory |
Player inventory |
| Current slot |
s8 |
Player held item slot |
PlayerPosUpdate (clientbound)
| Field name |
Field type |
Notes |
| ID |
u16 |
Player ID |
| Player X |
double |
Player X coordinate |
| Player Y |
double |
Player Y coordinate |
| Player Z |
double |
Player Z coordinate |
| Teleportation? |
bool |
Whether or not this update is a teleportation |
PlayerSpawn
| Field name |
Field type |
Notes |
| ID |
u16 |
Player ID |
| Player X |
double |
Player X coordinate |
| Player Y |
double |
Player Y coordinate |
| Player Z |
double |
Player Z coordinate |
| Dimension |
u16 |
Dimension ID |
| Username |
std::string |
Name of the player |
| Camera Yaw |
float |
Horizontal camera view angle |
| Camera Pitch |
float |
Vertical camera view angle |
PlayerChangeDimension
| Field name |
Field type |
Notes |
| ID |
u16 |
Player ID |
| Spawn X |
s32 |
Spawn X coordinate in the new dimension |
| Spawn Y |
s32 |
Spawn Y coordinate in the new dimension |
| Spawn Z |
s32 |
Spawn Z coordinate in the new dimension |
| Dimension |
u16 |
New dimension ID |
BlockUpdate
| Field name |
Field type |
Notes |
| Block X |
s32 |
Block X coordinate |
| Block Y |
s32 |
Block Y coordinate |
| Block Z |
s32 |
Block Z coordinate |
| Block ID |
u32 |
Block ID and data |
BlockGUIData
| Field name |
Field type |
Notes |
| Width |
u16 |
Width of the GUI |
| Height |
u16 |
Height of the GUI |
| Centered? |
bool |
Whether or not the GUI is centered on the screen |
| Widget defs |
Array |
List of widget definitions (see LuaGUI::show) |
BlockInvUpdate (clientbound)
| Field name |
Field type |
Notes |
| Block X |
s32 |
Block X coordinate |
| Block Y |
s32 |
Block Y coordinate |
| Block Z |
s32 |
Block Z coordinate |
| Inventory |
Inventory |
Block inventory |
BlockDataUpdate
| Field name |
Field type |
Notes |
| Block X |
s32 |
Block X coordinate |
| Block Y |
s32 |
Block Y coordinate |
| Block Z |
s32 |
Block Z coordinate |
| Metadata |
BlockMetadata |
Block metadata |
| Use alt tiles? |
bool |
Whether or not the block should use alternative tiles |
RegistryData
| Field name |
Field type |
Notes |
| Registry |
Registry |
Registry |
ChatMessage (clientbound)
| Field name |
Field type |
Notes |
| ID |
u16 |
Player ID (0 means it's a server message) |
| Message |
std::string |
Message sent by the client |
EntitySpawn
| Field name |
Field type |
Notes |
| ID |
entt::entity |
Entity ID |
EntityDespawn
| Field name |
Field type |
Notes |
| ID |
entt::entity |
Entity ID |
EntityPosition
| Field name |
Field type |
Notes |
| ID |
entt::entity |
Entity ID |
| Entity X |
double |
Entity X coordinate |
| Entity Y |
double |
Entity Y coordinate |
| Entity Z |
double |
Entity Z coordinate |
EntityRotation
| Field name |
Field type |
Notes |
| ID |
entt::entity |
Entity ID |
| Rotation |
glm::quat4 |
Entity rotation quaternion |
EntityAnimation
| Field name |
Field type |
Notes |
| ID |
entt::entity |
Entity ID |
| Animation |
AnimationComponent |
Entity animation data |
EntityDrawableDef
| Field name |
Field type |
Notes |
| ID |
entt::entity |
Entity ID |
| Drawable def |
DrawableDef |
Entity drawable component definition |
Serverbound
ChunkRequest
| Field name |
Field type |
Notes |
| Chunk X |
s32 |
Chunk X coordinate |
| Chunk Y |
s32 |
Chunk Y coordinate |
| Chunk Z |
s32 |
Chunk Z coordinate |
PlayerPlaceBlock
| Field name |
Field type |
Notes |
| Block X |
s32 |
Block X coordinate |
| Block Y |
s32 |
Block Y coordinate |
| Block Z |
s32 |
Block Z coordinate |
| Block ID |
u32 |
Block ID and data |
PlayerDigBlock
| Field name |
Field type |
Notes |
| Block X |
s32 |
Block X coordinate |
| Block Y |
s32 |
Block Y coordinate |
| Block Z |
s32 |
Block Z coordinate |
PlayerInvUpdate (serverbound)
| Field name |
Field type |
Notes |
| Inventory |
Inventory |
Player inventory |
PlayerPosUpdate (serverbound)
| Field name |
Field type |
Notes |
| Player X |
double |
Player X coordinate |
| Player Y |
double |
Player Y coordinate |
| Player Z |
double |
Player Z coordinate |
PlayerRotUpdate
| Field name |
Field type |
Notes |
| Camera Yaw |
float |
Horizontal camera view angle |
| Camera Pitch |
float |
Vertical camera view angle |
PlayerHeldItemChanged
| Field name |
Field type |
Notes |
| Hotbar slot |
u8 |
ID of the current hotbar slot |
| Item ID |
u16 |
Current item ID (to check match with server) |
PlayerReady
Packet sent from a client when it is ready to receive chunks.
This packet has no field.
PlayerChunkPosUpdate
| Field name |
Field type |
Notes |
| Chunk X |
s32 |
Chunk X coordinate |
| Chunk Y |
s32 |
Chunk Y coordinate |
| Chunk Z |
s32 |
Chunk Z coordinate |
BlockActivated
| Field name |
Field type |
Notes |
| Block X |
s32 |
Block X coordinate |
| Block Y |
s32 |
Block Y coordinate |
| Block Z |
s32 |
Block Z coordinate |
| Screen width |
u16 |
Client screen width |
| Screen height |
u16 |
Client screen height |
| GUI scale |
u8 |
Client GUI scale |
BlockInvUpdate (serverbound)
| Field name |
Field type |
Notes |
| Block X |
s32 |
Block X coordinate |
| Block Y |
s32 |
Block Y coordinate |
| Block Z |
s32 |
Block Z coordinate |
| Inventory |
Inventory |
Block inventory |
ItemActivated
| Field name |
Field type |
Notes |
| Block X |
s32 |
Selected block X coordinate |
| Block Y |
s32 |
Selected block Y coordinate |
| Block Z |
s32 |
Selected block Z coordinate |
| Screen width |
u16 |
Client screen width |
| Screen height |
u16 |
Client screen height |
| GUI scale |
u8 |
Client GUI scale |
ChatMessage (serverbound)
| Field name |
Field type |
Notes |
| Message |
std::string |
Message sent by the client |
KeyPressed
| Field name |
Field type |
Notes |
| Key ID |
u16 |
Key ID in the registry |
| Screen width |
u16 |
Client screen width |
| Screen height |
u16 |
Client screen height |
| GUI scale |
u8 |
Client GUI scale |