流体抽取机配方
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 任何门控。