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中的燃料。


这篇教程涵盖了所有可以添加内容的机器。