ProxyIguanaTweaks

读 Iguana Tweaks 配置修正锄 / 锤的显示矿级

基本信息

属性 值
路径 squeek.tictooltips.proxy.ProxyIguanaTweaks
行数 34(本仓最短的 Proxy)
触发条件 Loader.isModLoaded("IguanaTweaksTConstruct")(ModTiCTooltips.java:48)
反射目标 iguanaman.iguanatweakstconstruct.reference.Config(:17)

[!NOTE] 范围 iguanatweakstconstruct 已在收录范围且已成文, 故此处可加链接。

⚠️ 本类不做部件注册(另两个 Proxy 的核心职责), 只读对方的配置项并影响本 mod 的矿级显示。这是三个 Proxy 里唯一的「行为修正」。

三个 Proxy 中唯一会改静态状态的

ModTiCTooltips.hasIguanaTweaks(:30 声明,:49 置 true)被设置后, 影响 TooltipHandler 两处:

位置 影响
:65 图纸 tooltip 整个关闭 —— item instanceof IPattern && !hasIguanaTweaks
:171 无按键时在插入点多插一个空行

所以装了 iguanatweakstconstruct 之后, PatternHelper 的两个判定方法变成死代码。

init()(:15-26)

IguanaTweaksConfig = Class.forName("iguanaman.iguanatweakstconstruct.reference.Config");
Field levelingPickaxeBoost = IguanaTweaksConfig.getDeclaredField("levelingPickaxeBoost");
Field pickaxeBoostRequired = IguanaTweaksConfig.getDeclaredField("pickaxeBoostRequired");
toolsRequireBoost = levelingPickaxeBoost.getBoolean(null) && pickaxeBoostRequired.getBoolean(null);

读对方 Config 类的两个静态 boolean:

对方字段 含义
levelingPickaxeBoost 镐 / 锤升级需要提升矿级
pickaxeBoostRequired 该升级是强制的

两者都为 true 时 toolsRequireBoost = true(逻辑与,不是或)。

⚠️ 反射读静态字段,所以传 null 作为对象参数。 两个字段在对方 Config 里必须是 static boolean, 若对方改成实例字段,getBoolean(null) 会抛 NullPointerException。

getUnboostedHarvestLevel(:28-33)

public static int getUnboostedHarvestLevel(Item item, int harvestLevel) {
    if (toolsRequireBoost && (item.getUnlocalizedName().toLowerCase(Locale.ROOT).contains("pick")
            || item.getUnlocalizedName().toLowerCase(Locale.ROOT).contains("hammer")))
        return Math.max(0, harvestLevel - 1);
    else return harvestLevel;
}
条件 返回
toolsRequireBoost 且物品名(小写)含 pick 或 hammer max(0, harvestLevel - 1)
其他 原 harvestLevel

即:当对方强制「镐/锤要更高矿级才能升级」时, tooltip 显示的是升级前的矿级,避免玩家按显示值做出错误判断。 max(0, ...) 防止矿级 0 减成负数。

⚠️ 按物品显示名做子串匹配是本类最脆的一环:

  • 用 getUnlocalizedName()(未本地化名)而非注册名, 改名/加 mod(如中文名「镐」)会失配
  • 任何名字里含 pick / hammer 的无关物品都会被误判
  • toLowerCase(Locale.ROOT) 用了 Locale.ROOT 而非默认 locale, ✅ 规避了土耳其语 I 陷阱 —— 这处是正确的

异常处理(:21-25)

} catch (RuntimeException e) { throw e; }
  catch (Exception e) { Log.error("Failed to load Iguana Tweaks integration: " + e.toString()); }

⚠️ 与另两个 Proxy 不同:这里既不返回 boolean,也不 return false, 方法签名就是 void,失败后 toolsRequireBoost 保持 字段默认值 false(:13)—— 即「不修正矿级」,属安全的降级。

静态状态表

字段 类型 初值 写入点
IguanaTweaksConfig Class<?> null init() :17
toolsRequireBoost boolean false init() :20

相关