装配与流体类机器
GT 5 装配 / 流体封装类机器的脚本 API,共 19 个 ZenClass、26 个 ZenMethod。这是全 mod 最大的一个分组。全部走 AddMultipleRecipeAction,不可撤销。
全表
| ZenClass | 方法数 | 目标 RecipeMap | 备注 |
|---|---|---|---|
mods.gregtech.Assembler |
3 | assemblerRecipes |
|
mods.gregtech.CircuitAssembler |
2 | circuitAssemblerRecipes |
|
mods.gregtech.AssemblyLine |
1 | GTRecipeConstants.AssemblyLine |
常量不是 RecipeMap |
mods.gregtech.Amplifabricator |
1 | amplifierRecipes |
addRecipe(input, duration, amount) |
mods.gregtech.Packer |
1 | packagerRecipes |
map 名与类名不对应 |
mods.gregtech.Unpacker |
1 | unpackagerRecipes |
map 名与类名不对应 |
mods.gregtech.Printer |
1 | printerRecipes |
用 dataStick + ink |
mods.gregtech.Separator |
1 | electroMagneticSeparatorRecipes |
|
mods.gregtech.Sifter |
1 | sifterRecipes |
|
mods.gregtech.Pulverizer |
1 | maceratorRecipes |
map 名与类名不对应 |
mods.gregtech.OreWasher |
2 | oreWasherRecipes |
⚠️ 1 个重载用裸 FluidStack |
mods.gregtech.Extractor |
1 | extractorRecipes |
|
mods.gregtech.Compressor |
1 | compressorRecipes |
|
mods.gregtech.PrecisionLaser |
2 | laserEngraverRecipes |
map 名与类名不对应 |
mods.gregtech.FluidHeater |
1 | fluidHeaterRecipes |
用 IItemStack circuit |
mods.gregtech.FluidSolidifier |
1 | fluidSolidifierRecipes |
用 IItemStack mold |
mods.gregtech.FluidCanner |
1 | cannerRecipes(与 Canner 共用) |
无 duration / eut |
mods.gregtech.Canner |
2 | cannerRecipes(与 FluidCanner 共用) |
|
mods.gregtech.Mixer |
2 | mixerRecipes |
方法签名(全部实测自源码)
Assembler.addRecipe(IItemStack output, IIngredient input1, IIngredient input2, ILiquidStack fluidInput, int durationTicks, int euPerTick)
Assembler.addRecipe(IItemStack output, IIngredient input1, IIngredient input2, int durationTicks, int euPerTick)
Assembler.addRecipe(IItemStack output, IIngredient[] inputs, ILiquidStack fluidInput, int durationTicks, int euPerTick)
CircuitAssembler.addRecipe(IItemStack output, IIngredient[] inputs, ILiquidStack fluidInput, int durationTicks, int euPerTick)
CircuitAssembler.addRecipe(IItemStack output, IIngredient[] inputs, int durationTicks, int euPerTick)
AssemblyLine.addRecipe(IItemStack aResearchItem, int aResearchTime, IItemStack[] aInputs, ILiquidStack[] aFluidInputs, IItemStack aOutput, int aDuration, int aEUt)
Amplifabricator.addRecipe(IIngredient input, int duration, int amount)
Packer.addRecipe(IItemStack output, IIngredient input1, IIngredient input2, int durationTicks, int euPerTick)
Unpacker.addRecipe(IItemStack output1, IItemStack output2, IIngredient input, int durationTicks, int euPerTick)
Printer.addRecipe(IItemStack output, IIngredient input, IItemStack dataStick, ILiquidStack ink, int durationTicks, int euPerTick)
Separator.addRecipe(IItemStack[] output, IIngredient input, int[] outChances, int durationTicks, int euPerTick)
Sifter.addRecipe(IItemStack[] outputs, IIngredient input, int[] outChances, int durationTicks, int euPerTick)
Pulverizer.addRecipe(IItemStack[] outputs, IIngredient input, int[] outChances, int durationTicks, int euPerTick)
OreWasher.addRecipe(IItemStack output1, IItemStack output2, IItemStack output3, IIngredient input, FluidStack fluidInput, int durationTicks, int euPerTick) ← 裸 FluidStack
OreWasher.addRecipe(IItemStack output1, IItemStack output2, IItemStack output3, IIngredient input, int durationTicks, int euPerTick) ← 委托,1000mB 水
Extractor.addRecipe(IItemStack output, IIngredient input, int durationTicks, int euPerTick)
Compressor.addRecipe(IItemStack output, IIngredient input, int durationTicks, int euPerTick)
PrecisionLaser.addRecipe(IItemStack output, IIngredient input1, IIngredient input2, int durationTicks, int euPerTick, boolean cleanroom)
PrecisionLaser.addRecipe(IItemStack output, IIngredient input1, IIngredient input2, int durationTicks, int euPerTick)
FluidHeater.addRecipe(ILiquidStack fluidOutput, IItemStack circuit, ILiquidStack fluidInput, int durationTicks, int euPerTick)
FluidSolidifier.addRecipe(IItemStack output, IItemStack mold, ILiquidStack fluidInput, int durationTicks, int euPerTick)
FluidCanner.addRecipe(IItemStack output, IIngredient input, ILiquidStack fluidOutput, ILiquidStack fluidInput) ← 无 duration / eut
Canner.addRecipe(IItemStack output, IIngredient input1, IIngredient input2, int durationTicks, int euPerTick)
Canner.addRecipe(IItemStack[] output, IIngredient input1, IIngredient input2, int durationTicks, int euPerTick)
Mixer.addRecipe(IItemStack output, ILiquidStack fluidOutput, IIngredient[] input, ILiquidStack fluidInput, int durationTicks, int euPerTick)
Mixer.addRecipe(IItemStack output, IIngredient[] input, int durationTicks, int euPerTick)
AssemblyLine:两个 metadata 常量 + TierEU 依赖(AssemblyLine.java:63-71)
RA.stdBuilder()
.metadata(RESEARCH_ITEM, researchItem)
.metadata(SCANNING, new Scanning(researchTime, TierEU.RECIPE_LV)) // ← 扫描等级固定 LV
.itemInputs(inputs).itemOutputs(output).fluidInputs(fluidInputs)
.duration(duration).eut(eut)
.addTo(GTRecipeConstants.AssemblyLine);
Scanning(researchTime, TierEU.RECIPE_LV) 的扫描等级硬编码为 RECIPE_LV,脚本无法指定。
⚠️ OreWasher:第一个重载从脚本侧无法调用(OreWasher.java:21-46)
@ZenMethod
public static void addRecipe(IItemStack output1, IItemStack output2, IItemStack output3, IIngredient input,
FluidStack fluidInput, int durationTicks, int euPerTick) { // ← net.minecraftforge.fluids.FluidStack
全 mod 其他 54 台机器的流体参数都用 minetweaker.api.liquid.ILiquidStack(CraftTweaker 侧类型),只有这一个重载用裸 net.minecraftforge.fluids.FluidStack。ZenScript 无法构造裸 FluidStack,因此这个重载在脚本中实际不可达。
第二个重载(无 fluid 参数)委托给它,硬编码 1000 mB 水:
addRecipe(output1, output2, output3, input, FluidRegistry.getFluidStack("water", 1000), durationTicks, euPerTick);
数值
| 数值 | 值 |
|---|---|
| ZenClass 数 | 19(全 mod 最大分组) |
| ZenMethod 数 | 26 |
| 涉及 RecipeMap 数 | 18(cannerRecipes 被 Canner + FluidCanner 共用) |
AssemblyLine 硬编码扫描等级 |
TierEU.RECIPE_LV |
OreWasher 默认流体 |
"water" × 1000 mB |
OreWasher 不可达重载数 |
1(裸 FluidStack) |
FluidCanner 参数数 |
4(无 duration / eut) |
Amplifabricator 参数数 |
3(input, duration, amount) |
| 可撤销 | 全部否 |
@ModOnly |
全部 "gregtech" |
源码缺陷
OreWasher第 1 重载用裸FluidStack而非ILiquidStack(:22-23):全 mod 唯一的类型不一致。ZenScript 无法传入裸FluidStack,该重载从脚本侧不可达。结果是 OreWasher 只能用水洗矿,无法指定其他液体。OreWasher的 1000 mB 水硬编码(:56):FluidRegistry.getFluidStack("water", 1000)写死,无法改量、无法换液体。Canner与FluidCanner共用cannerRecipes:用错类名不报错,配方跑在别的机器上。同 冶炼类机器、金属与成型类机器 的模式,属本 mod 最普遍的设计瑕疵。FluidCanner.addRecipe无durationTicks/euPerTick(:4参):取值来自RA.stdBuilder()未设置时的默认值 —— 未调用 setter = 默认值的典型位置,具体数值由 GT5 本体 builder 决定,本条目不外推。- 6 个类的 map 名与 ZenClass 名不对应:
Packer→packagerRecipes、Unpacker→unpackagerRecipes、Pulverizer→maceratorRecipes、PrecisionLaser→laserEngraverRecipes、Separator→electroMagneticSeparatorRecipes、AssemblyLine→GTRecipeConstants.AssemblyLine(常量而非 RecipeMap)。全部无注释说明。 AssemblyLine的扫描等级硬编码(:65):new Scanning(researchTime, TierEU.RECIPE_LV),脚本无法指定TierEU。Amplifabricator.addRecipe(input, duration, amount)参数顺序反直觉(全 mod 唯一):amount在duration之后,且没有 output 参数(产出由 amount 决定)。其他 54 台机器都是 output 在最前。PrecisionLaser的cleanroom布尔(:2重载):与其他机器的hidden(Distillery / Fermenter / Brewery)机制不同,源码无注释。FluidCanner的fluidOutput/fluidInput命名与传统相反:常规理解是「输入流体 → 输出流体」,此处参数顺序为output(物品), input(物品), fluidOutput, fluidInput,容易读反。- 19 个类中 13 个只有 1 个方法,大量重复样板。
相关条目
- 冶炼类机器 - 另一个共用 RecipeMap 的例子(
arcFurnaceRecipes) - 金属与成型类机器 -
CuttingSaw/Slicer共用cutterRecipes - 化学类机器 - 流体处理侧对照
- GT++ 机器 - GT++ 的多流体机器
- AddMultipleRecipeAction - 全部方法的共同基类