采集等级名称解析
基本信息
| 属性 | 值 |
|---|---|
| 类型 | 名称解析辅助类 + 兼容代理 |
| 涉及类 | 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_USHarvest 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> |
相关条目
- WailaHandler 插件与提示栏组装 - 第 3 行"挖掘等级"的渲染条件
- WAILA 采集选项 -
harvestlevel与harvestlevelnum两个开关 - 工具类别与有效工具判定 -
harvestLevel这个整数本身的来源 - 兼容代理 -
ProxyIguanaTweaks与其它两个代理的绑定方式