+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
=======
Code: 0
Payload: none
+Length: 0
Login
Payload:
0 player name, max 32 byte UTF-8 string,
shorter names should be zero terminated
+Length: 0-32
Join
Code: 2
Payload:
0 entity ID of the player, 32bit unsigned int
- 4 chunk coords of the player, 3x 32bit signed int
- 16 pos/vel/rot/ang of the player, 13x 32bit float
+ 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
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
+
+
+Chunk Begin
+-----------
+
+Sent by the server to inform the client of an upcoming chunk transmission.
+
+Code: 9
+Payload:
+ 0 transmission ID, used for reference with Chunk Data packets, 32bit unsigned int
+ 4 flags, 32bit bitfield with boolean values
+ 1: compressed
+ 8 chunk coordinates, vec3i
+ 20 data size, 32bit unsigned int
+Length: 24
+
+
+Chunk Data
+----------
+
+Raw chunk data sent by the server, optionally compressed with zlib.
+
+Code: 10
+Payload:
+ 0 transmission ID, references the Chunk Begin packet this data belongs to, 32bit unsigned int
+ 4 block offset, offset of this block inside the whole data, 32bit unsigned int
+ 8 block size, size of the data block, 32bit unsigned int
+ 12 data, raw data
+Length: 12-484