工具微调修饰符 Tweaks Modifiers

Tweaks 模块中不属于「削弱原版工具」的两个自定义修饰符变体,用于给 Tinkers’ 的强力修饰符加上额外成本。

  • 模块:Tweaks
  • 实现:tweaks/modifiers/ModFluxExpensive.java、tweaks/modifiers/ModLimitedToolRepair.java
  • 装配:tweaks/ToolCraftingRecipe.java(强制这几种组合走自定义配方)、tweaks/RepairCraftingRecipe.java、tweaks/PartCraftingRecipe.java

ModFluxExpensive(耗能电池)

继承 tconstruct.modifiers.tools.ModFlux,用于替换 Tinkers’ 的「红石电池 / 金电池 / 钻石电池 / 末影电池」等耗能部件。

额外成本

canModify 要求至少 2 个修饰符槽:

return tags.getInteger("Modifiers") > 1 && !tags.getBoolean(key);

modify 在 super.modify 之后再扣 1 个修饰符槽:

int modifiers = tags.getCompoundTag("InfiTool").getInteger("Modifiers");
modifiers -= 1;
tags.getCompoundTag("InfiTool").setInteger("Modifiers", modifiers);

matches 同时要求 super.matches(input, tool) 与 canModify(tool, input) 都成立。

即:装耗能电池的净成本是普通电池的 2 倍修饰符槽。这是源码注释 // needs 2 modifiers 的实际含义。

ModLimitedToolRepair(限额修复)

继承 tconstruct.modifiers.tools.ModToolRepair,为工具修复增加次数上限。

protected boolean canModify(ItemStack tool, ItemStack[] input) {
    NBTTagCompound tags = tool.getTagCompound().getCompoundTag("InfiTool");
    int repairCount = tags.getInteger("RepairCount");
    if (repairCount >= Config.maxToolRepairs) return false;
    return super.canModify(tool, input);
}
  • 计数器:NBT 键 RepairCount(整数)
  • 上限来源:配置 maxToolRepairs(配置键 maxToolRepairs,见 Tweaks 配置)
  • 达到上限后 canModify 返回 false,无法再装修复槽

强制配方

Tweaks 模块用三个自定义配方类替换 Tinkers’ 的默认工具台配方,以确保上述修饰符与部件替换的组合被正确处理:

配方类 作用
ToolCraftingRecipe 工具合成配方,处理修饰符槽与材料绑定
PartCraftingRecipe 部件合成配方,配合 部件替换
RepairCraftingRecipe 修复配方,配合 ModLimitedToolRepair

ToolUpdateRecipe(iguanaman.iguanatweakstconstruct.ToolUpdateRecipe)额外提供旧版 Iguana 工具的数据迁移配方——把早期版本产出的工具 NBT 升级到当前格式,override/OldToolConversionHandler 配合完成反序列化兼容。

相关