1个不稳定版本
0.0.1 | 2024年2月24日 |
---|
#40 在 #nbt
66KB
2K SLoC
MCLib — Rust的Minecraft库
Minecraft Java版协议助手
lib.rs
:
Minecraft Java版协议助手
当前crate支持的协议版本为 763,Minecraft版本 1.20.2
示例
向数据包写入
use mclib::MCPacket;
use mclib::packets::server::PingRequest;
use mclib::types::MCLong;
let packet = PingRequest {
payload: MCLong::from(1337),
};
// Struct will be packed into Minecraft protocol format with packet id prefixed
let binary: Vec<u8> = packet.pack();
从二进制数据读取
use mclib::MCPacket;
use mclib::packets::server::LoginStart;
// You can use any data type that implements std::io::Read
let raw_data: Vec<u8> = vec![0x01, 0x03, 0x03, 0x07];
let mut binary_data = std::io::Cursor::new(raw_data);
let login_start = LoginStart::unpack(&mut binary_data);
写入新数据包
如果您想写入新数据包,您需要创建一个带有 derive [MCPacket] 特性和 Minecraft 数据类型的结构:您可以使用现有的 [类型] 或通过实现 [MCType] 特性创建新的类型。派生特性将自动添加方法如 pack()
和 unpack()
use mclib::types::{MCShort, MCVarInt};
use mclib::{MCPacket, MCType};
#[derive(MCPacket, Debug, Clone)]
#[packet(packet_id = 0x00)] // Specify packet_id here
pub struct NewMinecraftPacket {
field_1: MCShort
}
NBT
TAG_Compound('hello world'): 1 entry
{
TAG_String('name'): 'Bananrama'
}
此NBT的代码等效为
use mclib::nbt::{NBT, IntoNBTTag};
let nbt = NBT(
Some("hello world".to_string()),
vec![("name", "Bananrama".to_nbt())].to_nbt(),
);
有关NBT标签的更多信息,请参阅 相关页面
依赖项
~1.3–1.9MB
~38K SLoC