本篇教程由作者设定未经允许禁止转载。
首先,标题说的是实话。
先把这篇教程的目的说在前面,如果你玩模组有一段时间了,对矿物词典(OreDictionary)有认识,也有尝试编辑百科资料,特别是合成表,但不想再多了解点我了解到的皮毛的话可以看完走人:
如果你编辑的合成表来源的模组是 1.13 及以上,并且里面有一些槽位在游戏里看是几个图标来回闪,或者用到了一些比较常见的材料,譬如银锭、锡齿轮、钛杆,千万不要想当然填矿物词典。,把什么 ingotSilver、gearTin、rodTitanium 往里塞。如果有,请惹不起躲得起,别把它糟践了,你把握不住。
如果你这时候想问:不填这那我填啥呢?继续往下看:
矿物词典的简单概念
首先让 Forge 的官方文档来讲一下“矿物词典”的大体概念:
矿物词典是为了实现模组之间的兼容性而存在的。
注册了矿物词典的物品可以与同一矿物词典下的其它物品互换,这样便可以使得在配方中使用任何一种同矿词物品来获得相同产物。
虽然叫这个名字,但矿词的作用绝不仅仅局限于“矿物”。任何相似类型的物品(例如染料)都可以注册到一个矿物词典条目下。
矿物词典的样子大多是一个表类型(是什么东西)的纯小写单词,和一个或多个通常表质地、材质(东西是什么做的)的首字母大写的单词拼凑而成的。譬如:
stickWood。什么东西?棍子(stick)。什么做的?木头(Wood)做的;
dustSteel。什么东西?粉(dust)。什么的粉?钢(Steel)的粉;
crushedPurifiedGraniticMineralSand。粉碎的(crushed)纯化的(purified)花岗岩的(granitic)矿物的(mineral)砂(sand)。
这种也只能是 EU 系的鬼怪才搞得出来,问题不大。虽然长,但是规制还是标标准准的驼峰型。第一个词条 crushed 实际上是省略了 ore,一是防止太长(因为本来就很长了),二来它本质上和 ore(矿石)还是不同,第一个词条如果还用 ore,像是 oreCrushedPurifiedXxxxx,可能在用通配矿词进行过滤的时候会造成麻烦。如果你做用到矿词过滤搭建过一遍格雷的矿物处理线,你肯定会感觉到这些 crushedPurified、crushedCentrifuged 等等矿词设定地有多么妙。
为什么死了?
因为在 1.13 版本的快照 17w49a 里,MOJANG 引入了“标签”(Tag),并率先为原版的木板和羊毛分别在 minecraft 的命名空间下添加了 planks 和 wool 两种标签,而且时至最新的 1.17 pre1,Minecraft 仍然在不停扩充各种各样的标签。Wiki 中的说法是“数据包中的标签允许玩家使用 JSON 文件将物品、方块、流体、实体类型和函数分组。”再结合原版首先用上标签的木板和羊毛,这两个最为典型的同类同用物品。你应该可以感觉到了:这就是矿物词典,但是不只是矿物词典,因为它更好用、更强大、更清楚、更规范。
好用,因为它只依靠数据包,模组作者、数据包作者、普通玩家一视同仁,而如果需要删改矿物词典,要么你得是写模组的,要么你得用 CraftTweaker
强大,因为它的定位比矿物词典高远得多。矿词仅仅为了模组兼容,而标签除了能解决兼容,还可以做到让特定标签下的物品或者方块实现某种功能,譬如带有 minecraft:fox_food 标签的物品能用来繁殖狐狸,minecraft:crystal_sound_blocks 标签能让方块被踩踏时播放水晶质感的音效,而末影人只能拿起带有 minecraft:enderman_holdable 标签的方块。不少模组也运用了这种功能,铺好路,玩家只管往里填就可以了。这些是矿词从始至终也没有下的棋。
清楚,因为每个标签都带有命名空间 ID,你一下子就可以找到这个标签是哪个模组加上的,而在矿词上,一定有不少人遇到过某个东西在这个整合包里能有一大堆不知道哪里冒出来的矿词,这个包里又没有了。
规范,因为虽然模组各自为王,但原版既有的标签早已经指明了一个大方向,所有木板必须得是 minecraft:planks(该标签同时带有可修复木制工具和盾牌、可在熔炉中提供 300 刻燃烧时间以及各种进度、配方等检测的设定),沙子也不得不进入 minecraft:sand 门下(该标签同时带有接受海龟产蛋的设定),除了原版,最有“大一统”执行力的可能就只有 Forge 和 Fabric 了,它们也为一众模组常见的物品类别提供了标签,譬如(以 Forge 为例)上面说到的 dustSteel,在标签时代就变为了小类 forge:dusts/steel,往大了卸一级就是 forge:dusts,它可以囊括所有的粉类物品。
Forge 的官方文档从 1.13 开始就已经没有矿物词典的相关页面了,但是没必要念旧。上面四点足证原版标签的优越性。本为原版所用的特性,对模组也裨益万分。矿物词典好走不送。
为什么写这篇教程?
有些哥们高版本原版没玩明白就开始在这片未知的领域徜徉了,可怕的是不自知,想当然地利用一些“经验”来编写资料。下面给一些经典图鉴(2021/6/29):
这些截图满打满算只花了五分钟。不知道是运气太好,还是出了这种问题的合成表确实多。
我应该怎么做?
找标签。下面提供了几种查询合成表中使用的标签的途径。
1. Just Enough Items
既然写合成表,就一定要有一个能查询合成表的工具,JEI 这么一个名牌模组就不过多介绍了。在 JEI 里查找到你需要录入的配方,鼠标指针指上物品图标在来回轮换的槽位,可以看到物品提示的最后一行出现了“接受标签:”的字样,后面跟的就是这个槽位应当被录入的标签名。下图显示了通用机械里水壶的配方,其中有四个槽位均接受所有带有物品标签“forge:ingots/tin”的物品,热力系列的锡锭和通用机械的锡锭同属该标签下。
它的弊端在于,如果一个合成表中使用的标签在当前的包内只有一个名下物品,“接受标签:”是不会显示的。这一点和 1.12 的矿词在 JEI 中的情况相同。好比上面这个动态图,如果我把热力删掉,这个合成表既不会跑马灯,也不会显示接受什么标签。
2. 有标签显示功能的模组
CurseForge 上可以很轻松找到好几款能显示方块标签和物品标签的模组,但大多年久失修断更了。下面是几个可以长久使用的。并且可能会一直更新的,有标签查询功能的模组。但说在前面:这些模组确实可以让你查到所有物品的所有标签,但完全不会告诉你哪些合成表里的哪个槽位有在接受什么标签。它们仅仅能够查询物品的标签,仅此而已,和合成表无关。
Crimson NBT Tags,可以在物品提示里显示 NBT 和所有标签。
CoFH Core 等自带标签显示功能但内容不纯粹的模组
如果游戏环境里有 CoFH Core,可以不需要额外加装模组。它自带显示所有物品标签和方块标签的功能。
CraftTweaker
CrT 的 /ct hand 指令可以显示手持物品的 ID、标签和 NBT,比较全面。这个模组不仅仅能用来魔改,用来查询一些比较深入的资料还是非常好用的。但是如果仅仅用来查标签,用 Crimson NBT Tags 更好,更方便。
有病才会作为首选的模组
通用机械里有一个叫做“辞典”的设备,手持右击方块可以显示对应的方块标签,潜行右击打开界面放入物品可以显示当前物品的标签。但是除非你当前的游戏环境里正巧有通用机械,并且不知道是太不怕麻烦还是太懒导致放着纯粹简单直观的标签提示模组不用而要用一个物品来查其它物品,否则不要自己用,或者建议别人用通用机械这种大体系模组就为了去查个标签。百科不乏这样的人,别人提出一个细小简单的诉求,你非要推荐一个洋洋洒洒大体系大世界观或者有一大堆乱七八糟内容的模组。如果总是建议别人杀鸡用大伊万,可以先去治病。
3. 模组 JAR 压缩包(源文件)
这个方法通杀。通过直接在模组 JAR 包里查询配方数据(Data)来确定特定配方里有哪个槽位用了什么标签。唯一的问题在于必须会找到配方 JSON 在哪,以及知道需要的标签在 JSON 的什么位置,对应哪个槽位,是什么。实际上并不需要任何 Java、Javascript 和 JSON 知识,英语高于一窍不通即可。前几天发的教程 [宝宝早教] OpenLoader 简单使用以及其它想聊的东西 可能可以提供一些思路。
现在,你可以光速出警,去寻找那些不规范的合成表并且提交你的修改了。百科需要你的贡献。