valence_protocol

Crates.iovalence_protocol
lib.rsvalence_protocol
version0.2.0-alpha.1+mc.1.20.1
sourcesrc
created_at2022-10-30 02:06:02.062036
updated_at2023-08-10 07:07:54.73573
descriptionProtocol library for Minecraft: Java Edition
homepage
repositoryhttps://github.com/valence-rs/valence
max_upload_size
id701311
size205,673
Ryan Johnson (rj00a)

documentation

https://docs.rs/valence/

README

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.
Commit count: 558

cargo fmt