限额修复修饰符 ModLimitedTGregRepair

vexatos.tgregworks.integration.iguanatweakstconstruct.ModLimitedTGregRepair, 继承 修复修饰符 的一整个类。源码注释: “Copied from IguanaTweaksTConstruct to support that mod’s limited tool repair config option. All credits go to their authors.”

全部代码

它只覆写一个方法:

@Override
protected boolean canModify(ItemStack tool, ItemStack[] input) {
    NBTTagCompound tags = tool.getTagCompound().getCompoundTag("InfiTool");
    int repairCount = tags.getInteger("RepairCount");
    return repairCount < Config.maxToolRepairs && super.canModify(tool, input);
}

即在父类的全部判定之外多加一条:InfiTool.RepairCount < iguanaTweaksTConstruct 的 maxToolRepairs。

RepairCount 正是父类 modify 里每次修复累加的字段(tags.setInteger("RepairCount", repair + itemsUsed)), 所以这是一个精确的次数计数器而不是估计值。

注册条件

TGregworks.postInit → IntegrationITT.postInit():

if (IguanaTweaksTConstruct.pulsar.isPulseLoaded("Tweaks") && Config.maxToolRepairs > -1)
    ModifyBuilder.registerModifier(new ModLimitedTGregRepair());
else
    ModifyBuilder.registerModifier(new ModTGregRepair());

两个条件缺一不可:

  1. IguanaTweaksTConstruct 已加载(外层 if (Loader.isModLoaded(...)));
  2. 其 Tweaks 模块已启用(pulsar.isPulseLoaded("Tweaks"));
  3. Config.maxToolRepairs > -1——负数或 -1 表示"不限次数", 此时 IguanaTweaksTConstruct 自己也已经在 Tweaks 里注册了它的限额修复修饰符, 所以本 mod 主动让位,退回无上限的父类。

Config 在这里指的是 iguanaman.iguanatweakstconstruct.reference.Config (不是本 mod 自己的 vexatos.tgregworks.reference.Config)——注意 import 歧义, 本类没有 import 本 mod 的 Config。

构造

本类没有覆写构造器,所以继承父类的 super(new ItemStack[0], 0, "TGregRepair"): modifier 标识与父类完全相同(都是 "TGregRepair")。 由于同一时刻只注册两者之一(见 依赖门控),不会冲突。

行为差异一览

维度 ModTGregRepair ModLimitedTGregRepair
修复材料 碎片(值 1)/ 锭·宝石(值 2) 完全继承
修复量公式 50×件数 + 耐久×0.4×价值,三层衰减 完全继承
modify 行为 清 Broken、累加 RepairCount、刷新能力 完全继承
次数上限 无 RepairCount < maxToolRepairs
触发前置 有 IguanaTweaksTConstruct 且 maxToolRepairs == -1,或无该 mod 有该 mod 且 Tweaks 模块开 且 maxToolRepairs > -1

相关条目