2个不稳定版本

0.2.0 2020年12月29日
0.1.0 2015年11月23日

#1757 in 编码

Zlib 许可证

58KB
1K SLoC

贵族

贵族是一个Rust库,用于编码和解码NBT,这是一种由Minecraft: Java Edition使用的格式。

特性

  • 创建少量内存分配的解码器
  • 使用构建器而不是堆分配对象进行编码的编码器
  • 支持在Minecraft 1.12中添加的TAG_Long_Array(截至2020年的所有标签)。
  • 可以正确编码和解码测试文件(例如bigtest.nbt)。
  • 支持用于编码文本的Java变体的CESU-8。
  • 不使用unsafe

该库基于https://wiki.vg/NBT#Specification中的规范。

缺少的特性

  • Serde支持。遇到了生命周期问题。
  • CJSON支持。尚未实现。
  • 基岩版支持。那里使用的格式不同。
  • 往返编码/解码,因为编码器和解码器使用不同的类型。

解码

let mut file = File::open("hello_world.nbt")?;
let mut data = vec![];
file.read_to_end(&mut data)?;
let cursor = std::io::Cursor::new(data);

// Load the document. This step either copies the data (plaintext)
// or decompresses it (gzip).
let doc = Document::load(cursor)?;
// Parses the document. This returns the root tag's name, and the
// root tag (always a Compound tag). Both of these are borrowing the
// data inside the Document.
let (name, root) = doc.parse()?;

println!("name: {}", name.decode()?);
println!("{:#?}", root);

编码

let mut writer = NbtWriter::new();

let mut root = writer.root("hello world");
root.field("name").string("Bananrama");
// finish() call is required.
root.finish();

let result: Vec<u8> = writer.finish();

依赖项

~665KB
~11K SLoC