冶炼类机器

GT 5 冶炼 / 热加工机器的脚本 API,共 7 个 ZenClass、11 个 ZenMethod。全部走 AddMultipleRecipeAction + GTValues.RA.stdBuilder(),不可撤销。

全表

ZenClass Java 类 方法数 目标 RecipeMap 特殊字段
mods.gregtech.AlloySmelter AlloySmelter 1 alloySmelterRecipes —
mods.gregtech.ArcFurnace ArcFurnace 1 arcFurnaceRecipes —
mods.gregtech.PlasmaArcFurnace PlasmaArcFurnace 2 arcFurnaceRecipes(与 ArcFurnace 共用) —
mods.gregtech.BlastFurnace BlastFurnace 3 blastFurnaceRecipes metadata(HEAT_CAPACITY, heat)
mods.gregtech.PrimitiveBlastFurnace PrimitiveBlastFurnace 1 primitiveBlastRecipes metadata(ADDITIVE_AMOUNT, coalAmount)
mods.gregtech.PyrolyseOven PyrolyseOven 1 pyrolyseRecipes metadata(CIRCUIT_CONFIG, circuit)
mods.gregtech.OilCracker OilCracker 2 crackingRecipes metadata(CIRCUIT_CONFIG, circuitConfig)

方法签名(全部实测自源码)

AlloySmelter.addRecipe(IItemStack output, IIngredient input1, IIngredient input2, int durationTicks, int euPerTick)
ArcFurnace.addRecipe(IItemStack[] outputs, IIngredient input, ILiquidStack fluidInput, int[] outChances, int durationTicks, int euPerTick)
PlasmaArcFurnace.addRecipe(IItemStack[] outputs, ILiquidStack fluidOutput, IIngredient input, ILiquidStack fluidInput, int[] outChances, int durationTicks, int euPerTick)
PlasmaArcFurnace.addRecipe(IItemStack[] outputs, ILiquidStack fluidOutput, IIngredient input, int[] outChances, int durationTicks, int euPerTick)
BlastFurnace.addRecipe(IItemStack[] output, ILiquidStack fluidOutput, IIngredient[] input, ILiquidStack fluidInput, int durationTicks, int euPerTick, int heat)
BlastFurnace.addRecipe(IItemStack[] output, ILiquidStack fluidInput, IIngredient[] input, int durationTicks, int euPerTick, int heat)
BlastFurnace.addRecipe(IItemStack[] output, IIngredient[] input, int durationTicks, int euPerTick, int heat)
PrimitiveBlastFurnace.addRecipe(IItemStack output1, IItemStack output2, IIngredient input1, IIngredient input2, int durationTicks, int coalAmount)
PyrolyseOven.addRecipe(IItemStack output, ILiquidStack fluidOutput, int circuit, IIngredient input, ILiquidStack fluidInput, int durationTicks, int euPerTick)
OilCracker.addRecipe(int circuitConfig, ILiquidStack fluidOutput, ILiquidStack fluidInput1, ILiquidStack fluidInput2, int durationTicks, int euPerTick)
OilCracker.addRecipe(ILiquidStack fluidOutput, ILiquidStack fluidInput, int durationTicks, int euPerTick)

数值

数值 值
ZenClass 数 7
ZenMethod 数 11
涉及 RecipeMap 数 6(ArcFurnace 与 PlasmaArcFurnace 共用 arcFurnaceRecipes)
提交方式 RA.stdBuilder().addTo(map)
可撤销 全部否
@ModOnly 全部 "gregtech"
注册阶段 init
BlastFurnace 重载数 3(递减 fluidOutput → fluidInput → 无流体)
OilCracker 重载数 2(带/不带 circuitConfig 与第二流体)

源码缺陷

  • 参数顺序在同类中不一致:BlastFurnace 的三个重载是 (output, fluidOutput, input, fluidInput, duration, eut, heat),第三个重载去掉 fluidOutput 后变成 (output, fluidInput, input, ...) —— 同一位置从「流体输出」变成「流体输入」,类型都是 ILiquidStack / IIngredient[] 却语义相反(IItemStack[] output, ILiquidStack fluidInput, IIngredient[] input)。脚本作者极易传反。
  • OilCracker 的 circuitConfig 是第一个参数(int),而同类的 PyrolyseOven 把 circuit 放在第三个。同一 GT 电路配置概念在两个类中位置完全不同。
  • PlasmaArcFurnace 与 ArcFurnace 共用同一 RecipeMap:mods.gregtech.ArcFurnace.addRecipe 与 mods.gregtech.PlasmaArcFurnace.addRecipe 写入的是同一个 map,用错类名不会报错,只是配方跑在别的机器上。源码无任何警告。同理 mods.gregtech.Canner / FluidCanner(cannerRecipes)、mods.gregtech.CuttingSaw / Slicer(cutterRecipes)见 装配与流体类机器。
  • BlastFurnace 的 heat 参数无范围校验:直接传给 metadata(...),脚本传负数或极大值不会被拦截(校验在 GT5 本体的 recipe validation 阶段)。
  • PrimitiveBlastFurnace 只有 1 个重载但产出参数名不对称:Javadoc 的 @param 顺序(output1, output2, input1, input2, durationTicks, coalAmount)与 AddMultipleRecipeAction 构造器实参顺序(input1, input2, coalAmount, output1, output2, durationTicks)不同,容易在维护时错位。
  • PyrolyseOven 的 circuit 是裸 int 而非 IItemStack:与 FluidHeater / Distillery 等用 IItemStack circuit 的类不一致(见 化学类机器)。

相关条目