Appearance
The network protocol
The protocol layer is a mod written in Nimony. It uses the host's plain TCP calls and does its own framing and decoding, so the same code can be run under a test harness with no game running.
Target version
The client targets vanilla 1.21.11 (protocol 774) in offline or LAN mode.
Layers
- Wire. Variable-length integers, length-prefixed packets, strings, positions and the other primitive types.
- Framing. A byte stream is split into packets, with compression handled after the threshold negotiated at login.
- State. The connection moves through handshake, login, configuration and play. Each state has its own packet table.
- Chunks. Chunk data is decoded into sections: paletted containers, block states and biome data.
- Play. Decoded packets change the world, entities, inventory and the player's own state.
Packet tables
Packet names and ids come from a table generated from the game's own data, not from memory. A misspelled packet name matches nothing and fails silently, so the constants are swept against the generated table in tests.
Login
Login finishes with a packet that carries an identity: a UUID, a name and a list of properties. It must be read in full. An early version treated it as empty and failed one step after the handshake with a complaint about trailing bytes.
Keep-alives and deadlines
A vanilla server drops a client that never speaks after the handshake within about thirty seconds, and one that stays silent afterwards within forty-five. So the socket must be serviced on every frame from the moment it opens, whatever else the client is doing. See Joining a server.
What is not done
Encryption for online mode is not wired to a login flow, so servers requiring Mojang authentication are out of scope.

