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 次
56KB
1K SLoC
mcnbt
读写 NBT 文件。
安装
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 界面。在此处查看其功能 这里。
使用 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 文件格式的网站。
- https://wiki.vg/NBT
- https://minecraft.wiki/w/NBT_format#Binary_format
- https://wiki.bedrock.dev/nbt/nbt-in-depth.html
贡献
运行测试
cargo test --all-features
# ^^^^^^^^^^^^^^ important
依赖项
~0.4–1.4MB
~29K SLoC