4 个版本 (2 个稳定版)

1.1.0 2023 年 11 月 19 日
1.0.0 2023 年 10 月 27 日
0.2.0 2023 年 10 月 21 日
0.1.0 2023 年 7 月 2 日

88游戏

每月下载量 24 次

MIT 许可证

56KB
1K SLoC

mcnbt

读写 NBT 文件。

docs.rs Crates.io Website

安装

cargo add mcnbt

示例

读取 NBT 数据。

use mcnbt::{ByteOrder, Tag};

let tag = Tag::from_bytes(
    include_bytes!("../examples/hello_world.nbt"), // file to read
    ByteOrder::BigEndian // Java Edition uses big endian byte order
);
println!("{:#?}", tag);

写入 NBT 数据。

use mcnbt::{ByteOrder, Tag};

let tag = mcnbt::nbt![
    Tag::Int(Some("foo".to_string()), 42),
    Tag::List(Some("bar".to_string()), vec![
        Tag::String(None, "Hello".to_string()),
        Tag::String(None, "World".to_string()),
    ]),
    Tag::ByteArray(Some("baz".to_string()), vec![
        -8,
        -6,
        -4,
        -2,
        0,
        2,
        4,
        6,
        8,
    ]),
];
println!("{:#?}", tag.to_bytes(ByteOrder::LittleEndian));

使用 CLI

cargo install mcnbt
Usage: nbt [OPTIONS] <path>

Arguments:
  <path>  The path to the NBT file

Options:
  -L, --little-endian  Use little endian byte order
  -h, --help           Print help
  -V, --version        Print version

使用 Web

web” 目录包含一个使用后端 mcnbt 的 Web 界面。在此处查看其功能 这里

Preview

使用 serde

cargo add -F serde mcnbt
use mcnbt::Tag;
use serde_json::Value;

let data = Tag::Compound(
    Some("".to_string()),
    vec![
        Tag::String(
            Some("foo".to_string()),
            "Hello World".to_string()
        ),
        Tag::List(
            Some("bar".to_string()),
            vec![
                Tag::Byte(None, 1),
                Tag::Byte(None, 2),
                Tag::Byte(None, 3),
            ]
        )
    ]
);

assert_eq!(
    serde_json::to_string(&data).unwrap(),
    serde_json::to_string(
        &serde_json::json!({
            "type": "compound",
            "name": "",
            "payload": [
                {
                    "type": "string",
                    "name": "foo",
                    "payload": "Hello World"
                },
                {
                    "type": "list",
                    "name": "bar",
                    "payload": [
                        {
                            "type": "byte",
                            "name": null,
                            "payload": 1
                        },
                        {
                            "type": "byte",
                            "name": null,
                            "payload": 2
                        },
                        {
                            "type": "byte",
                            "name": null,
                            "payload": 3
                        }
                    ]
                }
            ]
        })
    ).unwrap()
);

资源

以下是用于开发此库的一些解释 NBT 文件格式的网站。

贡献

运行测试

cargo test --all-features
#          ^^^^^^^^^^^^^^ important

依赖项

~0.4–1.4MB
~29K SLoC