Structure ========= Offset Size Type Description 0 4 data protocol tag, must be 0xFB1AB1AF 4 2 uint sequence number 6 2 uint sequence ack 8 4 data bitfield with previous acks 12 1 uint type code for the payload 13 3 none padding, reserved for future use 16 0-484 data payload, contents and length vary, mostly depending on the type code all multibyte values are in LE the current code does no conversion, so only works on machines with native LE (or BE if the server and all clients are on that, but that's by accident and will break if conversion code is ever added) Common Types ------------ Name Size Type vec3 12 3x 32bit float vec3i 12 3x 32bit signed int quat 16 4x 32bit float entity state 64 vec3i, vec3, vec3, quat, vec3 Packets ======= Ping ---- To tell the other side we're still alive. Both server and client will send this if they haven't sent something in a while. Code: 0 Payload: none Length: 0 Login ----- Sent from client to serveri as a request to join. The server may respond negatively if the player name is already taken or some cap has been reached. Code: 1 Payload: 0 player name, max 32 byte UTF-8 string, shorter names should be zero terminated Length: 0-32 Join ---- Sent by the server either as a response to a successful login or when it's changing worlds. Code: 2 Payload: 0 entity ID of the player, 32bit unsigned int 4 entity state of the player 68 name of the world the server's currently running max 32 byte UTF-8 string Length: 68-100 Part ---- Sent by the server either as a respons to a failed login or when the client was kicked. Optionally sent by the client on disconnect. Code: 3 Payload: none Length: 0 Player Update ------------- Sent by clients to notify the server of their changes to the player. Code: 4 Payload: 0 entity state of the player as seen by the client Length: 64 Spawn Entity ------------ Sent by the server to notify the client of an entity entering spawn range. Code: 5 Payload: 0 entity ID, 32bit unsigned int 4 entity's skeleton ID, 32bit unsigned int 8 entity state 72 bounding box of the entity, 6x 32bit float 96 flags, 32bit bitfield with boolean values 1: world collision 100 entity name, max 32 byte UTF-8 string Length: 132 Despawn Entity -------------- Sent by the server to notify the client of an entity leaving spawn range. Code: 6 Payload: 0 entity ID, 32bit unsigned int Length: 4 Entity Update ------------- Sent by the server to notify the client of updated entity properties. Contained entities must be ordered by ascending entity ID. Code: 7 Payload: 0 number of entities, 32bit int, 1-7 4 entity ID, 32bit unsigned int 8 entity state 72 next entity... Length: 4 + multiple of 68, max 452 Player Correction ----------------- Sent by the server to tell a client that its prediction is way off. Code: 8 Payload: 0 sequence number of the offending packet, 16bit unsigned int 2 entity state of the player's entity on the server Length: 66