工具部件替换 Tool Part Replacing

允许把工具上的工具部件整体换成另一种,为跨材料玩法提供自由组合空间;同时对换部件施加惩罚。

  • 模块:ToolPartReplacing(脉冲 ToolPartReplacing)
  • 主类:iguanaman.iguanatweakstconstruct.replacing.IguanaToolPartReplacing
  • 实现:replacing/ReplacementLogic.java、replacing/ModPartReplacement.java
  • 总开关:partReplacement(配置键 PartReplacement,默认 true)

可替换判定

ReplacementLogic.canReplace 遍历工具的所有部件,对每个部件检查两条:

  1. 该部件是 IIconHolder 或 IPartRenderer(即为可视的实体工具部件);
  2. ModPartReplacement.canModify 允许替换——要求工具已有该部件对应的替换记录(canReplacePart + if (!addReplacement) return true; 之后的 tags.getBoolean(key) 检查)。

被判定为「需重新绑定」的头部/手柄/配件会清除材质绑定,使玩家可以在工具台上用另一种材料重新绑定,而不是必须用替换配方逐个更换。

ModPartReplacement 修饰符

replacing/ModPartReplacement.java 定义了实际执行替换的 ModifierRoot(IguanaModToolAssembly 的子类),tag 为 "PartReplacement"。

modify(List<ItemStack> stacks, NBTagCompound tags):

  1. 按 Replacment(源码原文拼写,sic)记录取回当前工具部件;
  2. 从 stacks 末尾弹出待替换的部件(保证替换件在手);
  3. tool.setInvisible() 清除原部件;
  4. 通过 Crafting.addToolRecipe(parts, size) 重新合成整把工具;
  5. 触发事件 IguanaToolPartReplacing.replaceEvent(onPartReplace)做本地化通知与提示。

换头惩罚(挖掘等级)

替换掉镐头会清空挖掘提升相关数据:NBT 键 HarvestLevel 重置为材料等级 - 1、HarvestLevelModified 置 false、HeadEXP 归零、ModMiningLevelBoost 与 GemBoost 两个标记一并删除。

惩罚强度由配置 PickBoostXpPenality(默认 5)控制——换头后需要重新累积的经验比例。

详见 Mining Level Boost。

跨模组部件替换

replacing/ModPartReplacement 之外的 override/ModifierOverride 与 replacing/PartToolTipHandler 协作,把替换信息追加到工具 tooltip。第三方部件(如 Extra Tinkers’ 的部件)只要满足上面的两条判定即可被纳入替换系统,无需本 mod 特判——IguanaModToolAssembly 统一接管了组装逻辑。

可覆盖

ModifierOverride.cfg 可改写替换流程;RestrictionHelper(见 部件限制)可以禁止某些部件参与替换。

提示

replacing/PartToolTipHandler 在工具 tooltip 中列出每个部件的替换状态。受 PartReplacement 开关控制。