介绍
Fast NBT 可以降低 Minecraft 日常 NBT 操作的开销:读取标签、将其转换为游戏对象,以及从区块、数据包、方块状态和 ItemStack 中加载数据。
CompoundTag
- 各种 get 方法。原版游戏会先调用
contains检查键是否存在,再调用get——这需要查找映射表两次。Fast NBT 将这两个操作合并为一次,并应用内联优化,大幅提升查找速度。 - 迭代。不再使用
keySet配合get进行迭代,而是同时遍历键和值,因此写入和合并复合标签时,不必再为每个条目单独查找。 - 相关类。其他相关类中使用这些 get 方法的操作也得到了优化。
ItemStack、方块状态与 NBT I/O
- 加载 ItemStack。从 NBT 读取
ItemStack时,会直接从底层映射表读取tag和ForgeCaps,不再通过两次contains调用进行探测;getOrCreateTagElement、getTagElement和removeTagKey也只需查找一次。 - 方块状态。
NbtUtils.readBlockState和getDataVersion会直接读取Name和Properties,不再经过原版的contains/getString调用链。 - 区块分区调色板。通常,每个调色板条目在每次加载或保存区块时,都要经过完整的 DFU 编解码链:分派编解码器、注册表查找、每个属性一个
MapCodec,以及DataResult/Either/Pair/Optional的分配。Fast NBT 会直接从映射表中解析规范的{Name, Properties}标签。这是该模组带来最大性能提升的部分。 - NBT I/O。无限制读取器——包括每次区块加载,以及读取 level.dat 和玩家数据时——会跳过一次字节计数流程,因为其结果最终会被丢弃。
因此,性能提升主要体现在批量解码 NBT 的场景:世界和区块加载、服务器自动保存(需要重新编码每个区块),以及携带带标签 ItemStack 的物品栏、方块实体和实体数据。调色板处理路径中临时对象减少,也意味着垃圾回收压力更小。
这不是通用性能模组:它不会触及 NBT 以外的内容,也无法改善受磁盘或网络速度限制的工作负载。收益取决于整合包需要解码的 NBT 数量;在纯原版世界中,收益最小。
配置
首次启动时会生成 config/fastnbt.toml,并为每项优化提供独立开关:
enabled = true # master switch for everything below
[features.itemStack]
enabled = true
[features.blockState]
enabled = true
[features.blockStateCodec]
enabled = true
[features.nbtIo]
enabled = true
CompoundTag 的重写没有单独的开关;全局 enabled 标志负责控制它们。
如何确保安全
- 只有规范数据会走快速路径。任何非规范数据都会作为解码错误报告,而不会被擅自猜测;与原版完全一致,
Properties中方块不具备的键会被忽略。对于区块调色板,调用方会将解码失败的条目设为空气,因此即使世界引用了未安装模组中的方块,仍然可以加载——每个条目只会记录一行日志。 - 编码绝不会被替换。调色板优化只会加快解码速度,因此保存的区块和网络数据包仍与原内容逐字节一致。
- 注入冲突。这些优化会替换或重定向原版方法,且没有提供非破坏性变体;因此,如果其他模组也针对同一方法,最后应用的修改会生效。发布前请在大型整合包中进行测试。
采用 GNU LGPL v3.0 或更高版本授权。
常见问题
Fast NBT 支持哪些 Minecraft 版本?
Fast NBT 支持 Minecraft Java 版 1.18.2–1.21.1,共 6 个版本,可用的加载器:Forge / NeoForge。下载时注意选择和你游戏版本一致的文件。
Fast NBT 怎么安装?
先用 PCL2 或 HMCL 启动器安装对应版本的 Forge / NeoForge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。
nutant233 的其他作品
查看全部 →
Fast Recipe Search
大幅加快配方搜索速度。
Fast Tag
Optimize performance related to tags
Infinite Storage Cell
Added infinite capacity storage cell to Applied Energistics 2.
GregTech Leisure
Pure-tech GregTech: Modern pack. Full GT progression, less grind — Steam ULV to MAX.
评论
登录后评论和评分