流体抽取机配方

TGregRecipeRegistry.addGregTechPartRecipes() 通过 GT_Values.RA.addFluidExtractionRecipe(input, fluid, output, …) 注册。 两条配方默认全部关闭,是本 mod 唯一一组"把成品拆回原料"的配方。

配方矩阵

# 配方 流体量 时长 开关 默认
1 部件 → 熔融材料 288 × price mB max(80, mDurability × price) fluidExtractorRecipes false
2 碎片 → 熔融材料 144 mB max(160, mDurability) shardExtractorRecipes false

两条都在 if (molten != null && molten.getFluid() != null) 里, 所以材料没有熔融形态就没有抽取配方。

调用签名的一个坑

源码两处都写成:

GT_Values.RA.addFluidExtractionRecipe(input.copy(), null, molten.copy(), 0, 时长, 电压);

第 2 个参数(流体输入槽)是硬编码的 null。GT 的抽取机签名是 (input, fluid, output, duration, voltage),所以这条配方的流体输入槽为空—— 意味着机器不能靠"额外加一份流体"来走这条配方,只能吃 1 个固体产出 1 份流体。 这与挤压机/流固机配方里 pattern 与流体分别占不同槽的写法不同,是本 mod 唯一 "两个槽位用同一个物品表达"的地方。

第 4 个参数固定 0(其余两处机器配方用的是 Math.max(80, …) 或 80 + …), 这个 0 对应 GT 抽取机配方的 fluid amount 字段,与时长无关。

熔融量与碎片

来源 熔融量 计算
部件 288 × price mB m.getMolten((GT_Values.L / 2) * p.getPrice())
碎片 144 mB m.getMolten(GT_Values.L / 2),输入 stackSize = 1

碎片那条的输入构造值得注意:

ItemStack stack = getChunk(m, 2);          // 2 个碎片
if (stack != null && ingotStack != null) {
    ...
    ItemStack halfStack = stack.copy();
    halfStack.stackSize = 1;               // ← 只取 1 个
    FluidStack molten = m.getMolten(GT_Values.L / 2);
    if (addShardExtractorRecipes) addFluidExtractionRecipe(halfStack, null, molten, 0, max(160, 耐久), power);
}

getChunk(m, 2) 造 2 个碎片只是为了验证"该材料有碎片产出",实际配方只吃 1 个碎片。 而外层条件 ingotStack != null(ingot 或 gem 取到 1 个)意味着: 没有锭也没有宝石的材料仍然抽不出碎片。

电压

与挤压机/流固机同源:getPowerRequired(m) = mToolQuality < 3 ? 30 : 120 × general.energyUsageMultiplier。

依赖与位置

  • 与挤压机/流固机配方在同一个双层循环里(for 材料 { for 部件 { … } }), 但抽取机配方在 if (stack != null) 块内、FluidStack 判空之后;
  • 碎片抽取在循环之外(for 材料 的尾部);
  • 不依赖 Smeltery / Weaponry 任何门控。

相关条目