Architecture
The protocol implementation is organized into several key components:- Java Edition Protocol - TCP-based protocol for Java Edition clients
- Bedrock Edition Protocol - UDP-based RakNet protocol for Bedrock Edition clients
- Codec System - Efficient encoding/decoding of Minecraft data types
- Encryption Layer - AES-128 CFB8 encryption for secure connections
- Compression Layer - Zlib compression for bandwidth optimization
Protocol Crates
pumpkin-protocol
The main protocol crate located atpumpkin-protocol/ provides:
- Packet encoding and decoding
- Connection state management
- Encryption and compression support
- VarInt/VarLong codec implementation
- Serialization/deserialization utilities
src/lib.rs- Core protocol types and constantssrc/packet.rs- Packet trait definitionssrc/java/- Java Edition protocol implementationsrc/bedrock/- Bedrock Edition protocol implementationsrc/codec/- Data type codecs (VarInt, VarLong, etc.)
pumpkin-data
The data crate located atpumpkin-data/ contains:
- Protocol version mappings
- Packet ID definitions for multiple versions
- Registry data (blocks, items, entities, etc.)
src/generated/packet.rs- Auto-generated packet IDs for all supported versions
Connection States
The protocol supports the following connection states:pumpkin-protocol/src/lib.rs:54-61
Protocol Limits
Pumpkin enforces the following packet size limits:pumpkin-protocol/src/lib.rs:35-36
Supported Versions
Pumpkin supports multiple Minecraft versions with dynamic packet ID mapping:- Java Edition: 1.21 through 1.21.11
- Current Version: 1.21.11 (Protocol 785)
- Lowest Supported: 1.21 (Protocol 767)
pumpkin-data/src/generated/packet.rs:3-4
Multi-Version Support
Packets implement theMultiVersionJavaPacket trait to support multiple protocol versions:
PacketId struct stores packet IDs for each supported version, automatically mapping to the correct ID based on the client’s protocol version.
Defined in pumpkin-protocol/src/packet.rs:17-20 and pumpkin-data/src/generated/packet.rs:6-32
Packet Structure
Java Edition (TCP)
Uncompressed Packet:pumpkin-protocol/src/java/packet_encoder.rs:173-196 for detailed documentation.
Bedrock Edition (UDP)
Bedrock Edition uses the RakNet protocol with a different packet structure:- Game Packet ID: 0xFE
- 14-bit Header: Contains packet ID (10 bits) + sub-client IDs (4 bits)
- Compression Support: Optional zlib compression
- MTU Size: 1400 bytes
pumpkin-protocol/src/bedrock/mod.rs:9-20
Raw Packet Representation
pumpkin-protocol/src/lib.rs:309-312
Next Steps
- Java Edition Protocol - Detailed Java Edition implementation
- Bedrock Edition Protocol - Bedrock Edition and RakNet
- Encryption - AES encryption implementation
- Compression - Zlib compression support
