Crafttweaker(1.12.2)入门5:矿物辞典,材料

矿物辞典(https://docs.blamejared.com/1.12/en/Vanilla/OreDict/IOreDictEntry):
矿物辞典(OreDictionary)不是原版概念,而是1.12.2及更低版本的Forge概念(1.13及更高版本被吸收为一个泛用性更广的原版概念——Tag,即标签),用于改善模组之间的兼容性,详见https://mcforge-cn.readthedocs.io/zh/latest/utilities/oredictionary
与IItemStack一样,矿物辞典也可以用尖括号调用,详见https://docs.blamejared.com/1.12/en/Vanilla/Brackets/Bracket_Ore
矿辞相信模组玩家并不陌生,如确有不知请前往各mc论坛、wiki等网站自行了解。因为本篇已是入门章节的最后一部分,后续章节在不了解一些原版或Forge概念(如矿物辞典、方块状态、维度/世界、NBT、属性修饰符、游戏刻、毫桶等)时会导致理解起来困难重重,因此请提前了解,否则请止步于此。
在主手持物品输入指令/ct hand后,应当只会出现以下两种情况:


有矿辞如橡木,无矿辞如附魔金苹果,都已经显示在如图的第二行中了。橡木的矿辞在zs中尖括号调用的结果为<ore:logWood>,与物品堆相比其结构真的是简单多了,形如<ore:orename>:
ore用于声明该尖括号引用会返回一个矿辞IOreDictEntry,与“item:”不同,它是不能省略的
orename是矿辞名字。
注意一个物品完全可以有多个矿辞,因此/ct hand获得的矿辞不会自动从消息栏复制到粘贴板上(一方面是已经复制物品堆到粘贴板了,另一方面多个矿辞下也不可能自动知道复制哪个),请用鼠标对准所需的矿辞单击以复制。
材料(https://docs.blamejared.com/1.12/en/Vanilla/Variable_Types/IIngredient):
材料IIngredient的概念在入门1讲到添加有序配方时就提过了,当时只说把addShaped()方法的inputs参数的类型IIngredient[][]当成IItemStack[][]就好了,实际上IIngredient还能写成别的——
矿辞IOreDictEntry
流体堆ILiquidStack(https://docs.blamejared.com/1.12/en/Vanilla/Liquids/ILiquidStack)
特别地,与工作台配方相关的IIngredient还能写成——
物品条件(https://docs.blamejared.com/1.12/en/Vanilla/Items/Item_Conditions)
物品转换器(https://docs.blamejared.com/1.12/en/Vanilla/Items/Item_Transformers)
有了2篇预科与5篇入门的基础知识,请保持自信看懂以下代码:
1. 矿辞
显然按照入门1,似乎应当写成这样:
实际上可采用右空值省略原则把从右往左扫描到的所有null全部省略,最终简化成最上面那样。
2. 流体堆
在原版中,以上代码等效于:
3. 物品条件
物品条件(Item Conditions)用于筛选符合条件的物品。下面这个配方使木斧可以“一斧头把橡木劈成8个橡木木板”,合成后木斧会消失:
4. 物品转换器
物品转换器(Item Transformers)用于改变物品参与合成后的状态。下面这个配方与上面的类似(木斧换成了石斧):
需要注意写工作台配方时如果涉及有耐久度的物品尽量不要单独用物品条件。以上面的“木斧”代码为例,实际测试中按住shift合成物品时木斧甚至可以“劈开一组原木”后才消失,因此应当尽量使用物品转换器,或是物品条件与物品转换器搭配使用,如:
这样按住shift合成时每进行一次合成木斧即耐久度减1,累计到耐久度减半后即无法继续合成,也就克服了单独用物品条件时的缺陷。