#nbt #minecraft #serialization #networking #crabcraft

crab_nbt

最新的Rust包,便于直观地处理NBT数据

7个版本

0.1.3 2024年7月31日
0.1.2 2024年7月14日
0.1.1 2024年6月25日
0.1.0 2024年4月7日
0.0.3 2024年3月24日

#676 in 解析器实现

Download history 5/week @ 2024-04-28 2/week @ 2024-05-05 12/week @ 2024-05-26 6/week @ 2024-06-02 5/week @ 2024-06-09 1/week @ 2024-06-16 125/week @ 2024-06-23 19/week @ 2024-06-30 125/week @ 2024-07-14 13/week @ 2024-07-21 121/week @ 2024-07-28 9/week @ 2024-08-04

每月268次下载
ussr-nbt中使用

GPL-3.0-only

24KB
529

🦀 CrabNBT

最新的Rust包,便于直观地处理NBT数据。

为什么不是其他库呢?

CrabNBT结合了现有NBT包的最佳特性,创造了完美的解决方案。
simdnbtfastnbt表示感谢,感谢他们的想法!

功能

🚧 支持序列化和反序列化到/从结构体(即将推出)
✅ 支持Java字符串
✅ NBT! 宏,便于创建
✅ 从NBT中获取值的好系统
✅ 单个标签的序列化
✅ 支持网络NBT

安装

cargo add crab_nbt

序列化

use crab_nbt::{nbt, Nbt, NbtCompound};

// Using NBT macro
let nbt = nbt!("root nbt_inner name", {
    "float": 1.0,
    "key": "value",
    "long_array": [L; 1, 2],
    "int_array": [Int; 1, 10, 25],
    "byte_array": [B; 0, 1, 0, 0, 1],
    "list": ["a", "b", "c"],
    "nbt_inner": {
        "key": "sub value"
    }
});

let nbt = Nbt::new(
    "root".to_owned(),
    NbtCompound::from_iter([
        ("float".to_owned(), 1.0.into()),
        ("key".to_owned(), "value".into()),
        ("nbt_inner".to_owned(), NbtCompound::from_iter([
            ("key".to_owned(), "sub value".into()),
        ]).into())
    ])
);

反序列化

use bytes::Bytes;
use crab_nbt::{nbt, Nbt, NbtCompound};

fn example(bytes: &mut Bytes) {
    let nbt = Nbt::read(bytes).unwrap();
    let egg_name = nbt
        .get_compound("nbt_inner")
        .and_then(|compound| compound.get_compound("egg"))
        .and_then(|compound| compound.get_string("name"))
        .unwrap();
}

依赖项

~0.5–1MB
~22K SLoC