#minecraft #protocols #helper #nbt #packet #version

mclib

Minecraft协议的实用工具和助手

1个不稳定版本

0.0.1 2024年2月24日

#40#nbt

Apache-2.0

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