0x00 C00Handshake
The very first packet sent by the client. Initiates the connection and requests a protocol state transition.
Fields
| Field | Type | Description |
|---|---|---|
| protocolVersion | VarInt | Protocol version (47 for 1.8.9) |
| serverAddress | String (max 255) | Hostname the client connected to |
| serverPort | unsigned short | Port the client connected to |
| requestedState | VarInt | 1=STATUS, 2=LOGIN |
Wire Encoding
| Field | Type | Notes |
|---|---|---|
| Protocol Version | VarInt | 47 for 1.8.9 |
| Server Address | String | Hostname or IP |
| Server Port | unsigned short | Big-endian uint16 |
| Next State | VarInt | 1=Status, 2=Login |
MCP References
MCP
NetHandlerHandshakeTCP.processHandshake()MCP
NetHandlerHandshakeMemory.processHandshake()Handler Interface
HND
INetHandlerHandshakeServerNotes
Determines whether the connection enters STATUS or LOGIN state. Sent by GuiConnecting.java during server connection, Minecraft.java for local singleplayer, OldServerPinger.java for server list pinging, and RealmsConnect.java for Realms. The requestedState field is critical: value 1 enters STATUS (used by server pinger), value 2 enters LOGIN (used for actual gameplay).
implementation Implementation Cases
ServerCrasher
Not commonly intercepted by modules — handled by vanilla NetHandlerHandshakeTCP.
FakeConnections
Not commonly intercepted by modules — handled by vanilla NetHandlerHandshakeTCP.