工具配方表

TGregRecipeRegistry.addRecipesForToolBuilder() 在 postInit 阶段 用 ToolBuilder.addCustomToolRecipe(new TGregToolRecipe(...)) 向 TiC 注册 25 条工具合成配方。 TGregToolRecipe 是 TiC ToolRecipe 的子类,唯一作用是让本 mod 的部件和 TiC 原版部件在同一条配方里通用。

25 条配方

工具 头部件 手柄 配件 附加件
镐 Pickaxe 镐头 手柄 绑定结 —
锹 Shovel 铲头 手柄 — —
斧 Hatchet 斧刃 手柄 — —
锄 Mattock 斧刃 手柄 铲头 —
凿 Chisel 凿刃 手柄 — —
阔剑 Broadsword 剑刃 手柄 宽护手 —
长剑 Longsword 剑刃 手柄 护手 —
刺剑 Rapier 剑刃 手柄 十字柄 —
匕首 Dagger 刀刃 手柄 十字柄 —
弯刀 Cutlass 剑刃 手柄 大型护手 —
煎锅 Frypan 盘 手柄 — —
战旗 Battlesign 牌板 手柄 — —
镰刀 Scythe 镰刀刀刃 坚韧手柄 坚韧绑定结 坚韧手柄
伐木斧 Lumberaxe 宽斧刃 坚韧手柄 大板 坚韧绑定结
碎骨刀 Cleaver 宽剑刃 坚韧手柄 大板 坚韧手柄
开掘铲 Excavator 开掘铲头 坚韧手柄 大板 坚韧绑定结
锤 Hammer 锤头 坚韧手柄 大板 大板
战斧 Battleaxe 宽斧刃 坚韧手柄 宽斧刃 坚韧绑定结
短弓 Shortbow 弓壁 弓弦 弓壁 —
长弓 Longbow 弓壁 弓壁 弓弦 大板
弩 Crossbow 弩臂 弩身 弓弦 坚韧绑定结
箭 Arrow 箭头 手柄 箭羽 箭杆
回旋镖 Shuriken 回旋镖 回旋镖 回旋镖 回旋镖
飞刀 Throwingknife 刀刃 手柄 — —
标枪 Javelin 箭头 坚韧手柄 坚韧手柄 —

前 18 条无条件注册;后 7 条在 TConstruct.pulsar.isPulseLoaded("Tinkers' Weaponry") 为真时才注册。 后 7 条全部使用武器专属的 TGregToolRecipe 子类 / 额外构造器,见下。

TGregToolRecipe 的核心:双向接受

TGregToolRecipe 维护 4 条 LinkedList<ItemTGregPart>(newHeadList / newHandleList / newAccessoryList / newExtraList),在覆写 addHeadItem / addHandleItem / addAccessoryItem / addExtraItem 时把 ItemTGregPart 也记进去。 然后在 validHead / validHandle / validAccessory / validExtra 里做双向判断:

for (ItemTGregPart part : newHeadList) {
    if ((part == input) && isEqualType(part, input)) return true;    // 本 mod 部件
    if (input == part.getType().getCounterpart()) return true;        // TiC 原版同种部件
}
return super.validHead(input);                                        // 父类的其他合法头

isEqualType(part, input):input instanceof ItemTGregPart ? part.getType() == ((ItemTGregPart) input).getType() : input == part.getType().getCounterpart() ——只按 PartTypes 枚举值比较,不比较材料,所以 8 个 ToughRod 实例互相等价。

结果:一条 GT 材料镐头 + 一个 TiC 原版手柄可以合成出镐,反之亦然。 这是本 mod 相对纯 TiC 最大的易用性改动。

三种"额外放宽"

棍子/骨头代替手柄

validHandle / validAccessory / validExtra 里都有:

if (toolRod != null && part.getType().getCounterpart() == toolRod
    && (input == Items.stick || input == Items.bone)) return true;

toolRod 字段在 TGregToolRecipe 里被初始化为 TConstructRegistry.getItem("toolRod") (即 TiC 的手柄)。因此任何配方的"手柄"位是手柄时,原版木棍/骨头也能填。

弓弦兼任手柄与配件

TGregBowRecipe 覆写 validHandle / validAccessory,只要 bowstring 在对应的 handleList / accessoryList 里就接受。TGregBowRecipe 有 7 个构造器重载, 专门用来把 TinkerWeaponry.bowstring / fletching / partArrowShaft 塞进 TiC ToolRecipe 构造器本不接受的槽位(TiC 的 ToolRecipe 构造器签名是固定的 5 参)。

TGregBowRecipe.validHead 额外允许:当弓壁(BowLimb)同时在手柄位时, 头部位接受木棍/骨头——这让"3 弓壁 + 弓弦"能出短弓。

箭羽与箭杆

TGregAmmoRecipe 覆写 validHandle:

return TinkerWeaponry.partArrowShaft != null && handleList.contains(TinkerWeaponry.partArrowShaft)
       && input == TinkerWeaponry.partArrowShaft || super.validHandle(input);

配合 arrowRecipe.addHandleItem(TinkerWeaponry.partArrowShaft), 箭的配方同时接受箭头 + 任意手柄与箭头 + 箭杆两种组装方式。

findRecipe 的反向查找

ModTGregPartReplacement.findRecipe(ToolCore tool)(IguanaTweaksTConstruct 集成用) 只接受 r instanceof TGregToolRecipe && r.getType().getClass().equals(tool.getClass())。 这是本 mod 部件替换功能只对本 mod 自己的配方生效的原因—— 它遍历 ToolBuilder.instance.combos 找第一个匹配的 TGregToolRecipe, 而不是按槽位精确查找。

相关条目