装配机配方

基本信息

属性 值
实现类 blocks/HEBlockRecipes.java(137 行)
注册入口 postInit 阶段,hooks/HEHooksShared.java:143 HEBlockRecipes.registerRecipes()
配方类型 GT5 assemblerRecipes(装配机)
配方总数 动态 = N_钎焊材料 × (1 + 2 × M_启用档位),见下
自有物品 1 个坝 + 14 档泵 + 14 档涡轮
N = 遍历到的合格钎焊材料种类数
M = enabledTiers 中为 true 的档位数(默认 5:lv/mv/hv/ev/iv)
配方总数 = N × 1        (坝,每个材料 1 条)
         + N × 2 × M    (泵 + 涡轮,每个材料每档 2 条)

不要写死具体条数——它随 enabledTiers 配置和 GT 的 Materials 表变化。 源码里没有任何硬编码的配方条数。

外层循环:遍历所有钎焊材料

for (Materials material : Materials.values()) {
    if (!isSolderingMaterial(material)) {
        continue;
    }

    int multiplier = material.contains(SubTag.SOLDERING_MATERIAL_GOOD) ? 1
            : material.contains(SubTag.SOLDERING_MATERIAL_BAD) ? 4 : 2;

(HEBlockRecipes.java:87-93)

钎焊材料判定(HEBlockRecipes.java:25-28)

private static boolean isSolderingMaterial(Materials material) {
    return material.mStandardMoltenFluid != null && material.contains(SubTag.SOLDERING_MATERIAL)
            && !(GregTechAPI.mUseOnlyGoodSolderingMaterials && !material.contains(SubTag.SOLDERING_MATERIAL_GOOD));
}

三个条件同时满足:

  1. mStandardMoltenFluid != null —— 有标准熔融流体
  2. 含 SubTag.SOLDERING_MATERIAL 标签
  3. 若 GT 开启了 mUseOnlyGoodSolderingMaterials,则还必须含 SOLDERING_MATERIAL_GOOD

第 3 条使配方数依赖 GT 的全局设置 mUseOnlyGoodSolderingMaterials。 该设置切换后,合格材料集合会变。

流体量系数 multiplier

标签 multiplier 含义
SOLDERING_MATERIAL_GOOD 1 优质钎焊料
SOLDERING_MATERIAL_BAD 4 劣质钎焊料(用量 4 倍)
两者都无 2 普通钎焊料

实际流体量 = material.getMolten(144L * multiplier / 2L) (HEBlockRecipes.java:102、118、130)

multiplier 144 × m / 2
1 72 mB
2 144 mB
4 288 mB

144L * multiplier / 2L 是整数除法,四个档位都能整除,无截断问题。

配方 1:水力坝控制器

HEBlockRecipes.java:95-103:

GTValues.RA.stdBuilder()
        .itemInputs(
                ItemList.Casing_SolidSteel.get(1L),
                new ItemStack(GregTechAPI.sBlockConcretes, 2, 8),
                ItemList.Cover_Screen.get(1L),
                ItemList.FluidRegulator_MV.get(2L),
                GTUtility.getIntegratedCircuit(1))
        .itemOutputs(HE.hydroDamControllerBlock).fluidInputs(material.getMolten(144L * multiplier / 2L))
        .duration(10 * SECONDS).eut(TierEU.RECIPE_LV).addTo(assemblerRecipes);
项 值
固体钢外壳 ItemList.Casing_SolidSteel × 1
混凝土 GregTechAPI.sBlockConcretes × 2,meta 8
屏幕 ItemList.Cover_Screen × 1
流体调节器 ItemList.FluidRegulator_MV × 2
电路 GTUtility.getIntegratedCircuit(1)
产物 HE.hydroDamControllerBlock
时长 10 * SECONDS
耗电 TierEU.RECIPE_LV(固定 LV)

混凝土 meta 8 与 水力坝 的 concreteBlockMeta = 8 一致—— 配方用的就是坝壳体材料。 坝的电压档位由电路在运行时决定(HEHydroDamTileEntity.getVoltageTier()), 配方里电路恒为 1(getIntegratedCircuit(1)),因此只有 1 条坝配方。

配方 2、3:泵与涡轮(每档 2 条)

外层内层循环(HEBlockRecipes.java:105-133):

for (int tierId = 0; tierId < HE.hydroPumpBlocks.length; tierId++) {
    if (!(HEConfig.enabledTiers[tierId])) {
        continue;
    }
    ...
}

材料表(5 个平行数组,索引 = tierId)

HEBlockRecipes.java:32-85,全部 15 元素,索引 0 是 null(ULV 禁用):

tierId 1 LV 2 MV 3 HV 4 EV 5 IV 6 LuV 7 ZPM 8 UV 9 UHV 10 UEV 11 UIV 12 UMV 13 UXV 14 MAX
hulls Hull_LV Hull_MV Hull_HV Hull_EV Hull_IV Hull_LuV Hull_ZPM Hull_UV Hull_MAX Hull_UEV Hull_UIV Hull_UMV Hull_UXV Hull_MAXV
motors Motor_LV _MV _HV _EV _IV _LuV _ZPM _UV _UHV _UEV ⚠️_UEV ⚠️_UEV ⚠️_UEV ⚠️_UEV
pumps Pump_LV _MV _HV _EV _IV _LuV _ZPM _UV _UHV _UEV ⚠️_UEV ⚠️_UEV ⚠️_UEV ⚠️_UEV
rotorMaterialsPerVoltage Steel Aluminium StainlessSteel Titanium TungstenSteel TungstenSteel Iridium Osmium Neutronium Neutronium Neutronium Neutronium Neutronium Neutronium
cableMaterialsPerVoltage Tin Copper Gold Aluminium Platinum VanadiumGallium Naquadah NaquadahAlloy NaquadahAlloy NaquadahAlloy NaquadahAlloy NaquadahAlloy NaquadahAlloy NaquadahAlloy

⚠️ UEV 以上的电机与泵全部复用 Electric_Motor_UEV / Electric_Pump_UEV (HEBlockRecipes.java:40-43、49-52)——源码对 UIV / UMV / UXV / MAX 四档写了同一个 ItemList,并用 // UIV、// UMV、// UXV、// MAX 注释标注。 这是源码原样(GT5 本身没有 UIV+ 的电机/泵物品),不是笔误。 与 水力泵 的壳体缺陷(// TODO: case 10, 12 - 15)性质不同: 那处的 switch 是漏写,这里的重复是上游物品不存在。

配方本体

两种机器材料完全相同,只差电路数量:

项 泵(HEBlockRecipes.java:110-119) 涡轮(HEBlockRecipes.java:121-131)
hulls[tierId] × 1 × 1
转子 GTOreDictUnificator.get(OrePrefixes.rotor, rotorMaterialsPerVoltage[tierId], 2L) × 2 × 2
motors[tierId] × 1 × 1
pumps[tierId] × 1 × 1
电缆 GTOreDictUnificator.get(OrePrefixes.cableGt01, cableMaterialsPerVoltage[tierId], 2L) × 2 × 2
电路 GTUtility.getIntegratedCircuit(1) GTUtility.getIntegratedCircuit(2)
产物 HE.hydroPumpBlocks[tierId] HE.hydroTurbineBlocks[tierId]
流体 material.getMolten(144L * multiplier / 2L) 同左
时长 10 * SECONDS 10 * SECONDS
耗电 GTValues.VP[tierId - 1] GTValues.VP[tierId - 1]

耗电索引 tierId - 1:GTValues.VP 不含 ULV, 而 tierId 从 1(LV)起,故需减 1 才能对齐。 tierId = 0(ULV)已被 enabledTiers[0] 恒为 false 挡住(见 配置项),不会以 VP[-1] 崩溃。

转子与电缆用 GTOreDictUnificator 按材料取, 因此任何注册了对应矿石字典的材料都能用,不限定具体 mod。

源码自带 TODO

HEBlockRecipes.java:24:

// TODO: Fill up recipe components as needed

紧贴在 isSolderingMaterial 上方—— 表示作者认为配方材料表还没填完(与 HETieredTileEntity 里两处 TODO: case 10, 12 - 15 呼应)。

关联