安全编辑 NBT

本文将向您介绍“NBT 编辑” -- 使用工具来编辑存储在实体、物品和某些方块中的数据字符串 -- 以及如何避免将来以导致其损坏的方式对其进行编辑。

在本教程中,您将学习以下内容:

  • NBT 数据是什么以及如何使用。
  • 为什么可能需要编辑 NBT 数据。
  • 编辑 NBT 数据的最佳实践。

要求

在开始本教程之前,建议完成以下内容。

多年来,《我的世界》地图制作者的常见做法是使用外部工具来编辑“NBT”,即存储在实体、物品和某些方块中的数据,如名称、损坏值、或年龄。 NBT 本质上是一个标签列表和相应的值。 例如,一个僵尸猪人会包含一个值为 zombie_pigmanID 标签。 使用 MCEdit 或 MCCToolChest 等工具编辑 NBT 可以产生强大的效果并为创建者节省大量时间。 例如,您可以使用工具通过简单地更改其 CustomName 标签的值来编辑生物的名称,而不必在游戏中使用名称标签和铁砧。

然而,在某些情况下,如果《我的世界》的更新会改变游戏写入或读取特定标签的方式,NBT 编辑会导致问题。 《我的世界》中的大多数功能都是为玩游戏而构建的,而不是使用外部工具进行编辑。 这些工具模拟玩游戏的过程。 您可以在游戏中更改箱子的内容,并且像 MCCToolChest 之类的工具会将数据写入 NBT,如前所述。 然而,当地图制作者使用工具在游戏中以一种理论上不可行的方式编辑 NBT 时,经常会出现问题。

重要

黄金法则是:如果您以一种游戏本身永远不会采用的方式更改事物,便会有风险。 如果游戏无法区分 NBT 值是由游戏本身保存的还是手动编辑的,那么您通常是安全的。

编辑成书的 NBT 以更改其文本不成问题;但编辑 NBT 导致超过一本书的游戏内字符限制就不行了。 将猫的 CatType 更改为 5 使其成为花斑猫;将其更改为 5000 可能是个糟糕的主意。

《我的世界》的开发人员只期望他们的代码按照其编程的方式进行编辑。 您可能会发现以某种方式编辑 NBT 标签可以让您做一些很酷的事情,但不能保证该标签的处理方式将来不会改变,因为首先就不是这么编辑的。

例如,地图创建者常通过编辑村民的几个 NBT 标签来自定义村民交易。 其中一项更改通常是将 TradeTier 标签设置为负数,这样村民就永远不会像在生存《我的世界》中那样解锁新交易。 由于《我的世界》的开发者从来没有打算像这样进行交易,他们从根本上改变了 TradeTier 标签在“村庄和劫掠者村庄”更新中的工作方式,破坏了地图中的许多自定义村民。 如今,自定义交易通常使用战利品表函数来处理,这是专门为此目的开发的功能。

这个规则有例外,这通常是由于多年来创建者以某种方式编辑 NBT,而《我的世界》的开发者必须为他们建立支持。 例如,无法在游戏中编写物品的 lore 标签,但通常认为在编辑器中这样做是安全的。

这个建议可能不仅仅适用于 NBT 编辑 -- 当您以非预期的方式使用时,游戏的行为、命令、脚本和其他功能都可能产生有趣的结果。 《我的世界》是一个活生生的游戏,功能不断变化。 尽管开发人员显然会尽一切努力不破坏您的内容,但他们会按照预期的使用方式开发功能。 当创建者依赖这些意想不到的“技巧”,导致内容破坏时,创建者、他们的玩家和 Microsoft 开发人员都不得不设法解决这个问题。 如有疑问,请始终在新的更新上测试您的内容,以检查是否存在破坏性的更改。