2 unstable releases

0.2.0-alpha.1+mc.1.20.1 Aug 10, 2023
0.0.1 Oct 30, 2022

#8 in #edition

Download history 39/week @ 2024-07-21 80/week @ 2024-07-28 25/week @ 2024-08-04 31/week @ 2024-08-11 26/week @ 2024-08-18 43/week @ 2024-08-25 36/week @ 2024-09-01 28/week @ 2024-09-08 27/week @ 2024-09-15 44/week @ 2024-09-22 43/week @ 2024-09-29 5/week @ 2024-10-06 18/week @ 2024-10-13 24/week @ 2024-10-20 26/week @ 2024-10-27 17/week @ 2024-11-03

85 downloads per month
Used in 13 crates (5 directly)

MIT license

620KB
13K SLoC

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.

use valence_protocol::{PacketEncoder, PacketDecoder, Difficulty};
use valence_protocol::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.try_next_packet().unwrap().unwrap();
let decoded_packet = frame.decode::<DifficultyS2c>().unwrap();

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

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

  • encryption: Enables support for packet encryption.
  • compression: Enables support for packet compression.

Dependencies

~17–26MB
~431K SLoC