工具部件替换 Tool Part Replacing
允许把工具上的工具部件整体换成另一种,为跨材料玩法提供自由组合空间;同时对换部件施加惩罚。
- 模块:
ToolPartReplacing(脉冲ToolPartReplacing) - 主类:
iguanaman.iguanatweakstconstruct.replacing.IguanaToolPartReplacing - 实现:
replacing/ReplacementLogic.java、replacing/ModPartReplacement.java - 总开关:
partReplacement(配置键PartReplacement,默认true)
可替换判定
ReplacementLogic.canReplace 遍历工具的所有部件,对每个部件检查两条:
- 该部件是
IIconHolder或IPartRenderer(即为可视的实体工具部件); ModPartReplacement.canModify允许替换——要求工具已有该部件对应的替换记录(canReplacePart+if (!addReplacement) return true;之后的tags.getBoolean(key)检查)。
被判定为「需重新绑定」的头部/手柄/配件会清除材质绑定,使玩家可以在工具台上用另一种材料重新绑定,而不是必须用替换配方逐个更换。
ModPartReplacement 修饰符
replacing/ModPartReplacement.java 定义了实际执行替换的 ModifierRoot(IguanaModToolAssembly 的子类),tag 为 "PartReplacement"。
modify(List<ItemStack> stacks, NBTagCompound tags):
- 按
Replacment(源码原文拼写,sic)记录取回当前工具部件; - 从
stacks末尾弹出待替换的部件(保证替换件在手); tool.setInvisible()清除原部件;- 通过
Crafting.addToolRecipe(parts, size)重新合成整把工具; - 触发事件
IguanaToolPartReplacing.replaceEvent(onPartReplace)做本地化通知与提示。
换头惩罚(挖掘等级)
替换掉镐头会清空挖掘提升相关数据:NBT 键 HarvestLevel 重置为材料等级 - 1、HarvestLevelModified 置 false、HeadEXP 归零、ModMiningLevelBoost 与 GemBoost 两个标记一并删除。
惩罚强度由配置 PickBoostXpPenality(默认 5)控制——换头后需要重新累积的经验比例。
跨模组部件替换
replacing/ModPartReplacement 之外的 override/ModifierOverride 与 replacing/PartToolTipHandler 协作,把替换信息追加到工具 tooltip。第三方部件(如 Extra Tinkers’ 的部件)只要满足上面的两条判定即可被纳入替换系统,无需本 mod 特判——IguanaModToolAssembly 统一接管了组装逻辑。
可覆盖
ModifierOverride.cfg 可改写替换流程;RestrictionHelper(见 部件限制)可以禁止某些部件参与替换。
提示
replacing/PartToolTipHandler 在工具 tooltip 中列出每个部件的替换状态。受 PartReplacement 开关控制。