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
+vec3b 3 3x 8bit signed int
+packn 2 16bit signed int representing a float value normalized to [-1,1]
+ it can be unpacked by dividing by 32767
+packu 2 16bit unsigned int representing a float value normalized to [0,1]
+ it can be unpacked by dividing by 65535
+vec3n 6 3x packn
+vec3u 6 3x packu
+quat 8 2bit index of largest component, a 2bit padding, then 3x 20bit small components in xyzw
+ order mapped from [-0.7072,0.7072] to [0,1048574] (with largest omitted)
+entity state 42 [ 0] vec3i chunk pos (there's a variation where this is a vec3b)
+ [12] vec3u block pos by 16,
+ [18] vec3 velocity,
+ [30] quat orientation,
+ [38] packn pitch by PI/2
+ [40] packn yaw by PI
Packets
Login
-----
-Sent from client to serveri as a request to join. The server may
+Sent from client to server as a request to join. The server may
respond negatively if the player name is already taken or some cap has
been reached.
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
+ 46 name of the world the server's currently running
max 32 byte UTF-8 string
-Length: 68-100
+Length: 47-78
Part
Code: 4
Payload:
0 player's entity state as predicted by the client
- 64 movement input, 3x 16bit signed int, each component mapped from [-1,1] to [-32767,32767]
- 70 pitch input, 16bit signed int, mapped from [-PI/2,PI/2] to [-32767,32767]
- 72 yaw input, 16bit signed int, mapped from [-PI,PI] to [-32767,32767]
- 74 active actions, 8bit bit field, first three bits are primary, secondary, and tertiary
- 75 selected inventory slot, 8bit unsigned int
-Length: 76
+ 42 movement input, vec3n
+ 48 active actions, 8bit bit field, first three bits are primary, secondary, and tertiary
+ 49 selected inventory slot, 8bit unsigned int
+Length: 50
Spawn Entity
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: 100 - 132
+ 0 entity ID, 32bit unsigned int
+ 4 entity's model ID, 32bit unsigned int
+ 8 entity state
+ 50 bounding box of the entity, 6x 32bit float
+ 74 flags, 32bit bitfield with boolean values
+ 1: world collision
+ 78 entity name, max 32 byte UTF-8 string
+Length: 79 - 110
Despawn Entity
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 480
+ 0 number of entities, 32bit int, 1-12
+ 4 base for chunk coordinates, vec3i
+ 16 entity ID, 32bit unsigned int
+ 20 entity state with vec3b as chunk position (rather than vec3i)
+ 53 next entity...
+Length: 16 + multiple of 37, max 460
Player Correction
Payload:
0 sequence number of the offending packet, 16bit unsigned int
2 entity state of the player's entity on the server
-Length: 66
+Length: 44
Chunk Begin
-----------
Sent by the server to inform the client of an upcoming chunk transmission.
+The client may send this packet to the server to re-request a chunk
+transmission. In that case fields other than the chunk coordinates are
+ignored. Also, the server may choose not to resend the chunk (e.g. if the
+player is too far away from it).
Code: 9
Payload:
8 block size, size of the data block, 32bit unsigned int
12 data, raw data
Length: 12-484
+
+
+Block Update
+------------
+
+Sent by the server whenever one or more block in a chunk have changed.
+
+Code: 11
+Payload:
+ 0 chunk coordinates, vec3i
+ 12 number of blocks, 32bit unsigned int, 1-78
+ 16 first block index, 16bit unsigned int
+ 18 first block data, 32bit
+ 22 second block index...
+Length: 16 + multiple of 6, max 484
+
+
+Message
+-------
+
+Sent by the client when the user submits a line on the chat input.
+Sent by the server on various events like player chat, server status, command output, etc.
+
+Code: 12
+Payload:
+ 0 message type, 8bit unsigned int: 0 = notification, 1 = chat
+ 1 referral, 32bit unsigned int, entity ID if type = 1
+ 5 message, max 450 byte UTF-8 string, should be zero terminated if shorter
+Length: 6-455