让我们重新看到最基本的合成添加语句:
recipes.addShaped(recipeName, output, inputBox);
实际上,output是IItemStack,而inputBox则是IIngredient的二维数组。
IIngredient——材料,它用来匹配一个合成的材料,输入或输出。IIngredient是IItemStack(物品堆)、IOreDictEntry(矿物辞典)、ILiquidStack(流体堆)的接口。这意味着IIngredient可用的方法,IItemStack、IOreDictEntry、ILiquidStack一样可用。对于一个需要IIngredient为参数的函数/方法或者定义IIngredient数组,也可以用IItemStack、IOreDictEntry、ILiquidStack输入。(你加合成的时候,用的不就是IItemStack或者IOreDictEntry嘛)实际上前文的物品条件和物品转换器就是针对IIngredient的。(对于流体不可用,不过我想没人对流体加条件)
需要import crafttweaker.item.IIngredient;
导入有关包。
使用marked方法用一个字符串标记一个材料,在下文的配方函数和配方事件中将会用到。
recipes.addShapeless("test002", <minecraft:stone:2>,
[<minecraft:iron_ingot>.marked("iron"),<minecraft:dirt>]);
你们早就知道用* 数量
来表示数量吧。你可以使用amount ZenGetter获取一个材料对象的数量。
用|
将两个材料连接起来,使得一个配方的某个槽可以使用材料A或材料B,而不用写多个配方。在某些时候,比OD更好用!
recipes.addShaped("te_frame_machine", <thermalexpansion:frame>,
[[<ore:ingotIron>|<ore:ingotAluminum>,<enderio:item_basic_capacitor>,<ore:ingotIron>|<ore:ingotAluminum>],
[<ore:blockGlass>,<ore:gearTin>,<ore:blockGlass>],
[<ore:ingotIron>|<ore:ingotAluminum>,<ore:blockGlass>,<ore:ingotIron>|<ore:ingotAluminum>]]);
用items或itemArray ZenGetter获取匹配的物品,返回IItemStack列表或数组。
用liquids ZenGetter获取匹配的流体,返回ILiquidStack列表。
//Returns an IItemStack List
//possible items: All iron ingots and the gold ingot from MC
val itemsIngredient = <ore:ingotIron> | <minecraft:gold_ingot>;
//Returns an ILiquidStack List
//possible liquids: Lava and Water
val liquidsIngredient = <liquid:lava> | <liquid:water>;
for item in itemsIngredient.items{
//Prints each possible item's Display name
print(item.displayName);
}
for item in itemsIngredient.itemArray{
//Prints each possible item's Display name
print(item.displayName);
}
for liquid in liquidsIngredient.liquids{
//Prints each possible liquid's Display name
print(liquid.displayName);
}