工具配方表
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,
而不是按槽位精确查找。