#minecraft #nbt #chunk #region #data

sculk

一个用于处理Minecraft NBT文件中各种数据的库

5 个版本

0.2.2 2024年7月29日
0.2.1 2024年7月15日
0.2.0 2024年7月15日
0.1.1 2024年7月15日
0.1.0 2024年7月14日

#327 in 数据结构

Download history 245/week @ 2024-07-11 33/week @ 2024-07-18 116/week @ 2024-07-25 18/week @ 2024-08-01

每月 177 次下载

MIT 许可证

375KB
7.5K SLoC

Sculk

[!重要]
支持的Minecraft版本: 1.21

Minecraft数据处理的Rust crate。
使用Rust中速度最快的NBT解析器simdnbt,以便您获得最佳性能。

轻松反序列化方块实体、整个区块、物品组件等。
并获得所有这些的完全类型化的数据结构。

Cargo功能

  • stats 启用 Statistics 数据结构及其反序列化。
    这使 serde 成为依赖项。因此,它是一个功能。

性能抱怨

目前有一个大瓶颈,那就是我对生命周期的问题处理不当。
所有字符串都是 Cow<'a, Mutf8str,这是拥有字符串,它首先从借用字符串转换而来。
这主要是一个临时解决方案,直到我能想出如何正确处理这些字符串的生命周期。
目前,由于我的生命周期问题,在反序列化区块时,每个方块实体都会复制内存。
由于许多字段是字符串,并且区块中有很多方块实体,
在我机器上,每32x32个区块(一个区域)会减慢30-100毫秒。

目前区块使用 BlockEntity 而不是它的 LazyBlockEntity,因为从nbt复合标签中获取懒方块实体
目前需要复制它作为一个 Vec<u8>,这非常慢且效率低下。
但如果你直接从字节中反序列化LazyBlockEntity,对于相对基本的数据,它的速度大约快83%。
因此,我想使用LazyBlockEntity来反序列化,尤其是因为它有一个to_owned方法。
但再次遇到生命周期问题。

依赖项

~1–1.6MB
~35K SLoC