Java Protocol
The Java protocol implementation supports the latest Minecraft versions with full packet encoding/decoding capabilities.Connection States
Pumpkin manages distinct connection states throughout the client lifecycle:pumpkin-protocol/src/lib.rs:54
Packet Encoding
TheTCPNetworkEncoder handles outbound packets with support for:
- Compression: ZLib compression with configurable thresholds
- Encryption: AES-128 CFB-8 encryption
- Size Limits: Maximum packet size of 2,097,152 bytes
Compression
Packets exceeding the compression threshold are automatically compressed:pumpkin-protocol/src/lib.rs:35-51
Encryption
AES-128 CFB-8 stream encryption is applied to secure client-server communication:pumpkin-protocol/src/lib.rs:227-234
Packet Decoding
TheTCPNetworkDecoder handles inbound packets with automatic:
- Decryption: AES-128 CFB-8 decryption
- Decompression: ZLib decompression
- Validation: Packet length and integrity checks
pumpkin-protocol/src/java/packet_encoder.rs:171-192
Server-Bound Packets
Pumpkin supports all major server-bound packets including:- Handshake: Initial connection handshake
- Status: Server list ping and status requests
- Login: Authentication and encryption setup
- Play: Game actions (movement, chat, inventory, combat)
- Configuration: Client configuration and resource packs
SPlayerPosition- Player movementSChatCommand- Command executionSClickContainer- Inventory interactionsSPlayerAction- Block breaking/placingSInteract- Entity interactions
pumpkin-protocol/src/java/server/play/
Client-Bound Packets
Pumpkin sends client-bound packets for:- World State: Chunk data, block updates, world events
- Entity Updates: Spawn, movement, metadata, removal
- Player State: Health, inventory, experience, abilities
- UI: Chat messages, titles, boss bars, scoreboards
CChunkData- Chunk transmissionCSpawnEntity- Entity spawningCSystemChatMessage- Chat messagesCSetHealth- Player health updatesCUpdateEntityPos- Entity position updates
pumpkin-protocol/src/java/client/play/
Bedrock Protocol
Pumpkin includes Bedrock Edition protocol support for cross-platform compatibility.Bedrock Packets
Bedrock protocol implementation includes:- Chunk Radius Updates:
ChunkRadiusUpdatedPacket - Container Management:
ContainerOpenPacket - Movement Prediction:
CorrectPlayerMovePredictionPacket - Creative Content: Network item descriptors
pumpkin-protocol/src/bedrock/
Network Item Descriptors
Bedrock uses specialized network item descriptors for cross-platform item representation:pumpkin-protocol/src/bedrock/client/creative_content.rs
Protocol Differences
Key differences between Java and Bedrock protocols:| Feature | Java Edition | Bedrock Edition |
|---|---|---|
| Packet Format | VarInt length prefix | Frame-based |
| Encryption | AES-128 CFB-8 | RakNet encryption |
| Compression | ZLib | RakNet compression |
| Position Format | Absolute coordinates | Network block positions |
Status Response
Server list status response provides:pumpkin-protocol/src/lib.rs:369-381
Error Handling
Pumpkin defines comprehensive error types:pumpkin-protocol/src/lib.rs:335-361
Performance Optimizations
- Reused Buffers: Compression scratch buffers are reused to avoid allocations
- Streaming Encryption: Encryption is applied during write without additional buffering
- Async I/O: Full Tokio async support for non-blocking network operations
pumpkin-protocol/src/java/packet_encoder.rs:88-100