材料逐项开关 enable.<材料>
这是"为什么我装了的材料没有 TGregworks 工具部件"的第一排查点。
键名与位置
TGregRegistry.registerToolParts() 里:
TGregworks.config.get(Config.Category.Enable, m.mName, true).getBoolean(true)
Config.Category.Enable = "enable",m.mName 是 GT Materials 枚举名。
所以键形如 enable.Iron / enable.Osmiridium / enable.SteelMagnetic,
分类 enable(没有第二段——与 enable.recipe.* 是同级的两棵子树)。
这些键是代码在遍历 Materials.values() 时按需创建的,配置文件里实际出现的材料集合
完全取决于装了哪些 GregTech 模块与哪个 MC 版本。
材料入选的完整判定
一个 GT 材料 m 会被注册成 TGregworks 工具材料,当且仅当同时满足 4 个条件
(TGregRegistry.registerToolParts 的 for 循环条件):
| # | 条件 | 源码 | 能否配置 |
|---|---|---|---|
| 1 | (m.mTypes & 64) == 64 |
GT 材料的 mTypes 位 6(Materials 里表示"可作工具材料") |
否 |
| 2 | !doesMaterialExist(m) |
!addMaterialsAnyway && TConstructRegistry.toolMaterialStrings.containsKey(m.mName) |
间接(addMaterialsAnyway) |
| 3 | gtMaterials.contains(m) |
GregTech_API.sGeneratedMaterials 列表内 |
否 |
| 4 | config.get("enable", m.mName, true) |
本页的逐项开关 | 是 |
doesMaterialExist里被注释掉的第二段是&& Arrays.asList(GregTech_API.sGeneratedMaterials).contains(m)——它与条件 3 重复,所以源码把它去掉了。
4 个条件的后果
条件 1:mTypes & 64
GT 侧的材料类型位。这一条把"熔融后是液体"(bit 0)之类的材料直接筛掉, 只有被 GT 标记为可作工具/工具材料的才进来。具体位含义由 GregTech 本体定义, 本 mod 只是位测试。
条件 2:TiC 同名材料
默认(addMaterialsAnyway = false)下,如果 TiC 已经有同名工具材料,该 GT 材料被整体跳过。
TiC 自带的材料名有 Iron / Gold / Diamond / Steel / Copper / Cobalt 等一批,
而 GT 的 Materials 也用同名枚举——两者重合的部分不会被 TGregworks 接管,
这些材料只能用 TiC 自己的部件配方。
⚠️ doesMaterialExist 只看名字,不看 ID。所以两个 mod 各自加了一个叫 Foo 的材料时,
后加载的那个会被静默吞掉,除非开 addMaterialsAnyway。
条件 3:GregTech_API.sGeneratedMaterials
GT 生成的材料列表,通常在 GT 的 postInit 阶段填充。这是 mod 加载顺序的硬依赖:
本 mod 在 preInit 读它,所以 GT 必须已经跑过 sGeneratedMaterials 的填充。
条件 4:本页开关
唯一能逐材料"手动摘除"的手段。设为 false 的材料会从
TGregworks.registry.toolMaterials 里消失,因此连带失去:
对应的 28 个部件实例、全部挤压/流固/抽取/合金炉配方、弩箭配方、
TGregFluidType 流体型、客户端渲染映射、材料 ID 分配。
addMaterialsAnyway 的联动
general.addMaterialsAnyway = true 会让条件 2 恒为 false(!addMaterialsAnyway 短路),
即无视 TiC 同名冲突强行注册。配置注释的原文警告:
“Register Materials even if a material with the same name already exists.
May override any material with the same name added by other mods.”
因为 TiC 的 toolMaterialStrings 是按名字索引的,重名注册的实际后果取决于 TiC 内部用哪个值覆盖,
源码无法保证——这是本 mod 唯一一处明确承认"可能覆盖别人的内容" 的地方。
相关条目
- 材料倍率配置 — 入选之后的 8 个数值倍率 + stonebound / reinforced / material-id
- general 段配置 —
addMaterialsAnyway与materialIDRangeStart - 材料注册 — 入选后调用 TiC 的哪几个 API
- 依赖门控 —
preInit阶段与 GT 加载顺序的关系