数据映射(Data Maps)
数据映射(data map)是一种可以附加到已注册对象上的、基于数据驱动并可重新加载的对象集合。该系统让游戏行为的数据驱动变得更加简单易行,因为它们提供了如同步(syncing)或冲突解决(conflict resolution)等功能,从而带来了更好、更易配置的用户体验。你可以将 标签 理解为“注册表对象(registry object) ➜ 布尔值(boolean)”的映射,而数据映射则更灵活,是“注册表对象 ➜ 对象”的映射。类似于 标签,数据映射会在原有数据的基础上添加内容,而不是覆盖已有内容。
数据映射既可以附加到静态的内置注册表,也可以附加到动态、数据驱动的数据包注册表(datapack registry)。通过 /reload 命令或任何其他重新加载服务器资源的方式,数据映射都支持热重载。
NeoForge 提供了多种 内置数据映射,用于常见场景,替代了原版 Minecraft 中的硬编码字段。更多信息请参阅相关链接文章。
文件位置(File Location)
数据映射会从一个 JSON 文件中加载,该文件路径为 <mapNamespace>/data_maps/<registryNamespace>/<registryPath>/<mapPath>.json,其中:
<mapNamespace>是数据映射 ID 的命名空间(namespace);<mapPath>是数 据映射 ID 的路径(path);<registryNamespace>是注册表 ID 的命名空间(如果为minecraft可省略);<registryPath>是注册表 ID 的路径。
举例如下:
- 如果数据映射名为
mymod:drop_healing,对应minecraft:item注册表(见下方示例),路径应为mymod/data_maps/item/drop_healing.json。 - 如果数据映射名为
somemod:somemap,对应minecraft:block注册表,路径应为somemod/data_maps/block/somemap.json。 - 如果数据映射名为
example:stuff,对应somemod:custom注册表,路径应为example/data_maps/somemod/custom/stuff.json。
JSON 结构(JSON Structure)
数据映射文件本身可以包含以下字段:
replace:布尔值(boolean),在添加本文件中的值之前会清空整个数据映射。此字段不应被模组(mod)发布时携带,仅供希望完全覆盖该映射的资源包开发者使用。neoforge:conditions:一个 加载条件 列表。values:一个将注册表 ID 或标签 ID 映射到对应值的映射表。具体值的结构由该数据映射的 codec(编解码器)定义(见下文)。remove:要从数据映射中移除的注册表 ID 或标签 ID 列表。