流体类型注册
TGregRegistry.registerFluids(),在 TGregworks.init 阶段无条件调用(init 事件)。
它把每个工具材料的熔融流体注册成 TiC 的 FluidType,从而让 TiC 的砧台/浇铸台认识这些流体。
代码
for (Materials m : toolMaterials) {
if (m.mStandardMoltenFluid != null) {
TGregFluidType fluidType = new TGregFluidType(
m,
m.mStandardMoltenFluid.getBlock(), // block
0, // meta
m.mStandardMoltenFluid.getTemperature(), // baseTemperature
m.mStandardMoltenFluid, // fluid
true, // isToolpart
matIDs.get(m)); // matID
toolMaterialFluidTypes.put(m, fluidType);
FluidType.registerFluidType(m.mStandardMoltenFluid.getName(), fluidType);
}
}
6 个构造参数
| # | 参数 | 值 | 用途 |
|---|---|---|---|
| 1 | block |
m.mStandardMoltenFluid.getBlock() |
流体的显示方块 |
| 2 | meta |
硬编码 0 |
全部流体都用 metadata 0 |
| 3 | baseTemperature |
mStandardMoltenFluid.getTemperature() |
铸造台的可加热判定 |
| 4 | fluid |
m.mStandardMoltenFluid |
流体本身 |
| 5 | isToolpart |
硬编码 true |
⚠️ 见下 |
| 6 | matID |
matIDs.get(m) |
本类独有的字段 |
TGregFluidType(vexatos.tgregworks.integration.recipe.tconstruct)继承 TiC FluidType,
只加了两个 public final 字段:int matID 与 Materials material,构造函数里原样存下。
为什么需要 matID
TGregRecipeRegistry.registerBoltRecipes() 在遍历 FluidType.fluidTypes 判定箭头材料时:
if (fluidEntry.getValue() instanceof TGregFluidType)
arrowheadMaterialID = ((TGregFluidType) fluidEntry.getValue()).matID; // 直接拿
else { CastingRecipe recipe = tb.getCastingRecipe(liquid, new ItemStack(metalPattern, 1, 2));
if (recipe == null) continue; // 查不到就跳过
arrowheadMaterialID = recipe.getResult().getItemDamage(); } // 靠浇铸配方反推
TGregFluidType 携带 matID,所以 GT 材料的熔融流体不需要"先在砧台铸一次镐头"就能反查材料 ID。
非 TGregFluidType 的流体必须能在浇铸台查到"该流体 + 镐 pattern"的配方,否则整条弩箭路线被跳过。
这直接扩大了弩箭配方的覆盖面:即便 enable.recipe.fluidsolidifier.castSolidifierRecipes 关闭、
TiC 侧没有 GT 的熔融→部件配方,GT 材料的弩箭照样能通过流固机做出来。见 弩箭配方。
三个必须知道的约束
只处理"标准熔融流体"
判据是 m.mStandardMoltenFluid != null。没有标准熔融形态的材料完全不会被注册,
因此也没有 FluidType、也拿不到 流固机配方 与
流体抽取机配方——那两个配方用的是
m.getMolten(n),与这里的 mStandardMoltenFluid 是两套不同来源,
所以可能出现"有 getMolten 但没 FluidType"或反之的不对称。
isToolpart 恒为 true
无论该材料在 TiC 里是否真的能做部件,都标成 isToolpart。
TiC 用这个位筛选"哪些流体可以铸成工具部件",所以所有 GT 工具材料的熔融流体都会出现在
TiC 的可铸列表里。
meta 恒为 0
FluidType 的 meta 参数写死 0,没有按 GT 流体的 metadata 分派。
如果某个 GT 流体本身是多 metadata 的(如某些化学流体),getBlock() + meta 0 可能取错外观。
门控
没有门控。 registerFluids() 在 init 阶段无条件执行,
不检查 Tinkers' Smeltery / Tinkers' Weaponry / TiCTooltips 任何一个。
但它依赖 FluidType 这个 TiC 熔炼模块的类,因此熔炼模块被移除时本 mod 也无法工作
(TConstruct.pulsar 是必需的,见 依赖门控)。
相关条目
- 材料注册 —
toolMaterials与matIDs的来源 - 弩箭配方 —
TGregFluidType.matID的唯一消费点 - 流固机配方 — 消费
isToolpart位 - Legacy Metal Pattern 兼容层 — Smeltery 缺失时 pattern 的替代
- 依赖门控 — 本项无门控的说明