采集等级名称解析

基本信息

属性 值
类型 名称解析辅助类 + 兼容代理
涉及类 squeek.wailaharvestability.helpers.StringHelper、squeek.wailaharvestability.proxy.ProxyIguanaTweaks
职责 把 block.getHarvestLevel(meta) 返回的整数转成显示名
调用点 WailaHandler.getHarvestability 第 3 行

概述

StringHelper.getHarvestLevelName(int num) 是一条三级回退链,返回第一个成功的名字;全部失败则返回数字本身。

1. Tinkers' Construct:tconstruct.library.util.HarvestLevels.getHarvestLevelName(int)  (静态块反射)
2. Iguana Tweaks TConstruct:iguanaman.iguanatweakstconstruct.util.HarvestLevels.getHarvestLevelName(int)
   —— 仅当 ModWailaHarvestability.hasIguanaTweaks 为真
3. 本模组语言键:wailaharvestability.harvestlevel<num+1>
4. 兜底:String.valueOf(num)

各级细节

第 1 级:Tinkers’ Construct(静态初始化)

StringHelper 的静态块直接 Class.forName("tconstruct.library.util.HarvestLevels") 并取 getHarvestLevelName(int.class),异常被空 catch 吞掉,getHarvestLevelName 保持 null。

注意:这里没有 Loader.isModLoaded 判断,Class.forName 在类加载时执行。@Mod 声明了 after:TConstruct,实践中 TConstruct 总是先加载,因此这一级实际上总是命中。

第 2 级:Iguana Tweaks TConstruct

只有当 ModWailaHarvestability.hasIguanaTweaks 为 true 时才走。该标志在 FMLPostInitializationEvent 中检测到 Loader.isModLoaded("IguanaTweaksTConstruct") 后置位,并调用 ProxyIguanaTweaks.init() 完成反射绑定。

ProxyIguanaTweaks.getHarvestLevelName(int) 在调用失败(init 失败导致 proxyGetHarvestLevelName 为 null → invoke 抛 NPE)时返回字面量 "<Unknown>"。也就是说这一级失败不会掉到第 3 级,而是直接把 <Unknown> 显示在提示栏上。

第 3 级:模组自带语言键(实际不可达)

代码拼接 wailaharvestability.harvestlevel + (num + 1),例如等级 0 → wailaharvestability.harvestlevel1。

⚠️ 本 fork 的 10 个语言文件中都没有任何 wailaharvestability.harvestlevel<数字> 键。现有的 wailaharvestability.harvestlevel 是提示栏前缀(en_US Harvest Level : / zh_CN 挖掘等级 : ),不带数字后缀。

后果:StatCollector.canTranslate(...) 恒为假,第 3 级永远失败,实际只会走第 4 级的纯数字。若 Tinkers 与 Iguana Tweaks 都不在,提示栏上显示的就是 3、4 这样的裸数字。

第 4 级:数字兜底

String.valueOf(num)。

与"显示编号"开关的交互

getHarvestability 在拿到名字后会剥掉颜色码再比较:

String harvestLevelName = StringHelper.stripFormatting(StringHelper.getHarvestLevelName(harvestLevel));
String harvestLevelNum = String.valueOf(harvestLevel);
showHarvestLevelNum = showHarvestLevelNum && (!showHarvestLevel || !harvestLevelName.equals(harvestLevelNum));

即:当名称恰好等于数字时(正是第 3、4 级回退链走到数字的情况),(N) 后缀被自动抑制,避免出现 3 (3) 这种重复。若两个开关都开启则渲染 名称 (N);只开名称则渲染 名称;只开编号则渲染 N。

其它 StringHelper 职责

方法 作用
concatenateStringList(List<String>, String) 用指定分隔符把多行拼成一行,供最小模式使用
stripFormatting(String) EnumChatFormatting.getTextWithoutFormattingCodes,用于上面那次名字/数字比较

数值

数值 值
名称回退级数 4(含数字兜底)
可达的名称来源 2(Tinkers’ Construct、Iguana Tweaks TConstruct)
语言文件中 harvestlevel<数字> 键数 0
语言文件总数 10(cs/de/en/es/fr/it/ko/pt/ru/zh)
最低显示等级 harvestLevel >= 1(等级 0 不显示等级行)
<Unknown> 兜底文案 <Unknown>

相关条目