IC2Classic一直对所有合成表进行硬编码,不会因为修改合成表很烦人而改变。
但IC2C增加了一种禁用IC2C自带合成表然后添加自定义配方的方法。 所有IC2配方的制作/机器在各自的Json文件与合成表ID,设置一个合成表ID布尔值为false将关闭该合成表。
现在,由于关闭了合成表,你必须添加一个新合成表。通过修改customCraftingRecipes.json或customMachineRecipes.json来完成此操作。
按照格式编写的自定义合成表才不会使游戏加载后崩溃。
制作合成表
要加载合成表,你必须有一个能够称为“合成表”的阵列。
该阵列的内部是代表合成表各个元素的对象。
{
"recipes":
[
{
"recipeType": "shaped",
"hidden": false,
"output":
{
"item": "minecraft:stick",
"meta": 0,
"amount": 1,
"nbt": '{"display":{"Name": "TestingName"}}'
},
"pattern": ["OOO", "ILF", "OOO"],
"inputs":
[
{
"patternID": "O",
"inputType": "ore",
"oreID": "dye",
"amount": 1
},
{
"patternID": "L",
"inputType": "itemList",
"items":
[
{
"item": "minecraft:cobblestone",
"meta": 0,
"amount": 1
},
{
"item": "minecraft:dirt",
"meta": 0,
"amount": 1
}
]
},
{
"patternID": "F",
"inputType": "fluid",
"fluidID": "water"
},
{
"patternID": "I",
"inputType": "item",
"item":
{
"item": "minecraft:stick",
"meta": 0,
"amount": 1
}
}
]
}
]
}
首先必须提供的是recipeType,来定义这个合成表是有序合成(shaped)还是无序合成(shapeless),唯一的区别是有序合成需要pattern和patternID。
然后是可选的hidden,决定了合成表是否会被隐藏,使物品管理器和配方书不会显示。
接下来是代表物品输出的output,包含:
item:输出物品是什么。
meta:输出物品的耐久值。
amount:输出物品的数量。
nbt:输出物品的nbt标签是什么,可选。
之后,如果这个合成表是有序的,需要提供pattern,由9个字符构成,代表工作台3×3合成界面。
最后是代表物品输入的inputs,包含:
patternID:告诉系统这个东西对应pattern的哪一个字符。
inputType:输入的是什么类型。(有效的东西:ore、fluid、item、itemList)
这决定了接下来需要填写的字符串:
inputType为ore时:
oreID:矿石的名称。
amount:需要的数量。(如果不存在此项,默认为1)
inputType为fluid时:
fluidID:流体的名称。(water="water",lava="lava")
inputType为item时:
item:物品是什么。
meta:物品的耐久值。
amount:物品的数量。
nbt:物品的nbt标签是什么,可选。
inputType为itemList时:
items:物品的清单,每个单独物品的编写方式与“inputType为item时”的编写方式相同。
制作机器合成表
{
"recipes":
[
{
"recipeType": "macerator",
"outputs":
[
{
"item": "minecraft:stick",
"meta": 0,
"amount": 64,
"nbt": '{"display":{"Name": "TestingName"}}'
}
],
"recipeMetadata": '{}',
"recipeExperience": 1.05,
"input":
{
"inputType": "ore",
"oreID": "oreDiamond"
}
},
{
"recipeType": "massFab",
"input":
{
"inputType": "ore",
"oreID": "oreDiamond"
},
"amplifier": 100000
},
{
"recipeType": "electrolyzer",
"recipeEnergy": 10000,
"direction": "both",
"input":
{
"item": "minecraft:stick",
"meta": 0,
"amount": 64
},
"output":
{
"item": "minecraft:dirt",
"meta": 0,
"amount": 64
}
},
{
"recipeType": "cannerFuel",
"fuelType": "multiplier",
"multiplier": 0.5,
"input":
{
"item": "minecraft:dirt",
"meta": 0,
"amount": 64
}
}
]
}
这是在假设你阅读了“制作合成表”章节的情况下编写的。
同样的,首先必须提供的是recipeType来说明这个合成表是哪个机器的配方。
macerator是打粉机/提取机/压缩机/回收机,这些机器共享一个选项卡。
必须提供output,必须是物品,可以自定义数量,但不能让产物数量随机。
recipeMetadata可以控制合成表处理时长和能量消耗,一个可选的NBT标签组合。
可以有的字符串:
RecipeEnergyModifier:合成所需能量的倍数。
RecipeEnergy:整数值,合成所需的能量。
RecipeTimeModifier:合成所需时间的倍数。
RecipeTime:整数值,合成所需的时间。
这些修改器必须在提供的NBT标签组合中,并且不支持子组合。
下一个可选的事情是recipeExperience,它允许修改一次合成可以获得多少经验。
对于这些机器来说,最后应该是input。
下一台机器是物质生成机。
这台机器只能修改input和amplifier,amplifier可以修改当放入物品时物质生成机生成物质增加的倍数。
下一台机器是电解机,
这台机器有input/output参数,必须是item。
recipeEnergy:修改过程中使用的能量。
direction:说明这个合成表是干什么的。(有效值:both、discharge、charge)
最后一台机器是装罐机。
input必须是一个item。
fuelType:定义燃料类型,adaptive或multiplier。
根据选择哪个燃料类型,下一个参数将有所不同。
如果选择multiplier,则必须创建一个multiplier参数,即float/double,该参数定义在现有燃料中添加多少燃料。
如果选择adaptive,则提供整数,以告知将添加多少tick中的燃料。
这篇教程涵盖了所有可以添加内容的机器。