限额修复修饰符 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());
两个条件缺一不可:
- IguanaTweaksTConstruct 已加载(外层
if (Loader.isModLoaded(...))); - 其
Tweaks模块已启用(pulsar.isPulseLoaded("Tweaks")); 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 |