装配机配方
基本信息
| 属性 | 值 |
|---|---|
| 实现类 | 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));
}
三个条件同时满足:
mStandardMoltenFluid != null—— 有标准熔融流体- 含
SubTag.SOLDERING_MATERIAL标签 - 若 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 呼应)。