Expand description
Minecraft Java Edition network protocol for the ghast client library.
Layers, bottom to top:
codec: bounds-checkedReaderoverbytes::Bytes(zero-copy byte arrays and strings),McWritefor encoding, VarInt/VarLong.types,nbt,chat: hand-written shared types —BlockPoswith the per-version bit layout, slots, lazily parsed NBT (nbt::RawNbt), chat JSON.- Generated packet modules per protocol version (
v1_8= protocol 47,v1_16_5= protocol 754), each with typed packet structs, one enum per state and direction, and id constants. AVersionmarker type ties a version’s packet sets together so a version-agnostic layer can be written generically. frame: length framing, zlib compression with partial inflation, the AES-128-CFB8 hook (crypto), and the per-idPacketFilterthat drops unwanted packets before they are decoded.io(featuretokio): async framed reader/writer.
Decoding never panics on untrusted input: every failure is a DecodeError or
FrameError, and allocations are bounded by the input size.
use ghast_protocol::{FrameDecoder, FrameEncoder, PacketSet, RawPacket};
use ghast_protocol::v1_8::play::serverbound::{KeepAlive, ServerboundPlayPacket};
let mut enc = FrameEncoder::new();
enc.write_packet(&KeepAlive { keep_alive_id: 42 }).unwrap();
let mut dec = FrameDecoder::new();
dec.push(&enc.take());
let raw: RawPacket = dec.next_packet().unwrap().unwrap();
let p = ServerboundPlayPacket::decode_raw(&raw).unwrap();
assert_eq!(p, ServerboundPlayPacket::KeepAlive(KeepAlive { keep_alive_id: 42 }));Re-exports§
pub use codec::Decode;pub use codec::Encode;pub use codec::McWrite;pub use codec::Reader;pub use error::DecodeError;pub use error::EncodeError;pub use error::FrameError;pub use frame::FrameDecoder;pub use frame::FrameEncoder;pub use frame::FrameLimits;pub use io::FramedReader;pub use io::FramedWriter;pub use packet::Direction;pub use packet::Packet;pub use packet::PacketFilter;pub use packet::PacketSet;pub use packet::RawPacket;pub use packet::State;pub use packet::Version;pub use types::BlockPos;
Modules§
- chat
- Chat components.
- codec
- Low-level reading and writing of protocol primitives.
- crypto
- AES-128-CFB8 stream cipher used after the login encryption handshake.
- error
- Error types.
- frame
- Framing: length prefixes, zlib compression and the encryption hook.
- io
- Async framed reader and writer over tokio’s
AsyncRead/AsyncWrite(featuretokio). - nbt
- Named Binary Tag (NBT) as used on the network by 1.8 – 1.20.1.
- packet
- Packet traits, raw packets and the per-id interest filter.
- testgen
- Deterministic random value generation for tests (feature
testgen). - types
- Hand-written protocol types shared by the generated packet code.
- v1_8
- Protocol 47 (Minecraft 1.8 – 1.8.9), generated from minecraft-data.
- v1_16_5
- Protocol 754 (Minecraft 1.16.4 – 1.16.5), generated from minecraft-data.