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 |
相关
- ToolHelper -
getPrimaryHarvestLevel提供输入值 - TooltipHandler -
hasIguanaTweaks的两个消费点 - PatternHelper - 被本类间接关闭