部件铸件 Legacy Metal Pattern Cast

条件注册:TGregworks.preInit 里 if (!TConstruct.pulsar.isPulseLoaded("Tinkers' Smeltery")) 才调用 CastLegacy.preInit()。也就是说只有 Tinkers’ Smeltery(Tinkers’ Smeltery 附属)没有加载时 才存在本物品。加载了 Smeltery 时,CastLegacy.metalPattern == null,全部 23 个 subtype 由 TiC 自己的 TinkerSmeltery.metalPattern 顶替(Pattern.MetalPatterns.getPatternItem() 里的三元判断)。

基本信息

属性 值
注册名 TGregworks:metalPattern
类 tconstruct.smeltery.items.MetalPattern(直接复用 TiC 的类,不是本 mod 的类)
构造 new MetalPattern("cast_", "materials/")
本地化名 tconstruct.MetalPattern(复用 TiC 的键,因此需要 Smeltery 的语言条目)
注册位置 CastLegacy.preInit(),条件为 Smeltery 未加载
注册到目录 23 个 subtype 全部 TConstructRegistry.addItemStackToDirectory("<name>Cast", …)

23 个 subtype

patternTypes 数组按下标 0–22 依次对应 metadata:

metadata 目录名 含义
0 ingotCast 锭铸件
1 toolRodCast 手柄铸件
2 pickaxeHeadCast 镐头铸件
3 shovelHeadCast 铲头铸件
4 hatchetHeadCast 斧刃铸件
5 swordBladeCast 剑刃铸件
6 wideGuardCast 宽护手铸件
7 handGuardCast 护手铸件
8 crossbarCast 十字柄铸件
9 bindingCast 绑定结铸件
10 frypanHeadCast 盘铸件
11 signHeadCast 牌板铸件
12 knifeBladeCast 刀刃铸件
13 chiselHeadCast 凿刃铸件
14 toughRodCast 坚韧手柄铸件
15 toughBindingCast 坚韧绑定结铸件
16 largePlateCast 大板铸件
17 broadAxeHeadCast 宽斧刃铸件
18 scytheHeadCast 镰刀刀刃铸件
19 excavatorHeadCast 开掘铲头铸件
20 largeBladeCast 宽剑刃铸件
21 hammerHeadCast 锤头铸件
22 fullGuardCast 大型护手铸件

⚠️ 只覆盖 MetalPatterns 的前 23 个枚举值。Pattern.MetalPatterns 共有 28 个值 (含占位的 nothing1 / nothing2 与 arrowhead / gem / nugget),后 5 个在 legacy 模式下 会取到 metadata 23–27 的铸件。实际影响为零:没有任何 PartTypes 引用这 5 个枚举值 (PartTypes 只用到 ingot…fullguard 这 23 个),而 5 个武器部件 (ArrowHead / Shuriken / CrossbowLimb / CrossbowBody / BowLimb)走 WeaponryPatterns.getPatternItem(),那里无条件返回 TinkerWeaponry.metalPattern, 不受 Smeltery 是否加载影响;Chunk 的 pattern 是 null,PartTypes.getPatternItem() 直接返回 null。

配方

本物品没有自己的获取配方——它只作为 pattern 被 28 个部件的挤压/固化配方消费 (addExtruderRecipe(plate, counterpart, pattern, 800, power) 与 addFluidSolidifierRecipe(counterpart, molten, pattern, 800, power)), 以及被 碎片铸件 类似的黄铜板/金板压制路径消费。见 铸件配方。

缺失映射(remap)

TGregworks.remap(FMLMissingMappingsEvent) → CastLegacy.remap(e):

  • 前提:TinkerSmeltery.metalPattern != null(即后来 Smeltery 又被加载了);
  • 匹配 mapping.name.equalsIgnoreCase("TGregworks:metalPattern")(忽略大小写)且 mapping.type == GameRegistry.Type.ITEM;
  • 动作:mapping.remap(TinkerSmeltery.metalPattern),把旧存档里的 23 个 subtype 全部转交给 TiC 的铸件。

这条路径保证"先无 Smeltery 玩、后装了 Smeltery"的存档不会丢铸件。 FMLMissingMappingsEvent 是唯一的加载后钩子,@Mod.EventHandler 签名 public void remap(FMLMissingMappingsEvent e)。

相关条目