valence_protocol

A protocol library for Minecraft: Java Edition. Use this to build clients, servers, proxies, or something novel!

valence_protocol is primarily concerned with defining all of Minecraft's network packets and the process for encoding and decoding them. To encode and decode packets, use the [PacketEncoder] and [PacketDecoder] types.

```rust use valenceprotocol::{PacketEncoder, PacketDecoder, Difficulty}; use valenceprotocol::packets::play::DifficultyS2c;

let mut encoder = PacketEncoder::new();

let packet = DifficultyS2c { difficulty: Difficulty::Peaceful, locked: true, };

// Encode our packet struct. encoder.append_packet(&packet);

// Take our encoded packet(s) out of the encoder. let bytes = encoder.take();

let mut decoder = PacketDecoder::new();

// Put it in the decoder. decoder.queue_bytes(bytes);

// Get the next packet "frame" from the decoder and use that to decode the body of the packet. // Packet frames can be thought of as type-erased packet structs. let frame = decoder.trynextpacket().unwrap().unwrap(); let decoded_packet = frame.decode::().unwrap();

// Check that our original packet struct is the same as the one we just decoded. asserteq!(&packet, &decodedpacket); ```

Supported Minecraft Versions

Currently, valence_protocol only intends to support the most recent stable version of Minecraft. New Minecraft versions often entail a major version bump, since breaking changes to packet definitions are frequent.

The currently targeted Minecraft version and protocol version can be checked using the [MINECRAFT_VERSION] and [PROTOCOL_VERSION] constants.

Feature Flags