流体类型注册

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 是必需的,见 依赖门控)。

相关条目