Crates.io | valence_protocol |
lib.rs | valence_protocol |
version | 0.2.0-alpha.1+mc.1.20.1 |
source | src |
created_at | 2022-10-30 02:06:02.062036 |
updated_at | 2023-08-10 07:07:54.73573 |
description | Protocol library for Minecraft: Java Edition |
homepage | |
repository | https://github.com/valence-rs/valence |
max_upload_size | |
id | 701311 |
size | 205,673 |
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);
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.
encryption
: Enables support for packet encryption.compression
: Enables support for packet compression.