StringHelper
数值→本地化文本(伤害换算心数、罗马数字强化等级)
基本信息
| 属性 | 值 |
|---|---|
| 路径 | squeek.tictooltips.helpers.StringHelper |
| 行数 | 138 |
| 外部依赖 | GTNHLib 的 NumberFormatUtil.formatNumber(千分位分隔) |
单位换算表
⚠️ 这些除数是硬编码的,不是从 TCon 读来的:
| 方法 | 换算 | 源码 |
|---|---|---|
getDamageNumberString(int) |
attack / 2f |
:37 |
getSpeedString(int) |
speed / 100f |
:62 |
getDrawSpeedString(int) |
drawSpeed / 20f + "s" |
:74 |
getPercentageString(double) |
percent * 100f + "%" |
:103 |
getDurationString(double) |
原值 + "s" |
:99 |
即:攻击力按半心显示(2 点 = 1 心),速度按百分之一格, 拉速按 1/20 秒,折断率/精准度按百分比。
伤害显示(:25-42)
String heart = Math.abs(attack) == 2 ? getLocalizedString("gui.partcrafter8")
: getLocalizedString("gui.partcrafter9");
return getDamageNumberString(attack) + heart;
gui.partcrafter8 是心形图标(空心),gui.partcrafter9 是实心半心。
判定条件是 Math.abs(attack) == 2 —— 恰好 2 点伤害显示心形,
其余(1、3、4…)显示半心。负伤害同样按 abs 判定。
getAmmoDamageRangeString(int)(:90-96)输出 min-max 区间:
min = attack,max = attack * 2,不除 2 也不换心形,固定用 partcrafter9。
强化等级 → 罗马数字(:19-22)
public static String getReinforcedString(int reinforced) {
if (reinforced > 9) return getLocalizedString("tool.unbreakable");
else return getLocalizedString("tool.reinforced") + " " + RomanNumeralHelper.toRoman(reinforced);
}
reinforced > 9→ 本地化 keytool.unbreakable(「无法破坏」)- 否则 →
tool.reinforced+ 空格 + 罗马数字(I…IX)
⚠️ 判定用的是 > 9,即 >= 10 为不破;
ToolHelper 的 isUnbreakable 用的也是 >= 10(:113-115),
两处一致。但不破判断发生在两处而非一处,getReinforcedString 在
reinforced == 10 时返回「无法破坏」文本,而
getEffectiveDurability 直接返回 INFINITE_DURABILITY——
同一件工具的「强化」行和「有效耐久」行会走不同分支。
shoddiness 文本(:44-55)
| 方法 | 逻辑 |
|---|---|
getShoddinessTypeCode (:44) |
>0 → "stonebound",<0 → "jagged",0 → ""(返回英文代码,非本地化) |
getShoddinessTypeString (:48) |
同上分支,但返回 material.stone.ability / material.cactus.ability 的本地化文本 |
getShoddinessString (:53) |
formatNumber(abs(shoddiness)) — 丢符号,正负由颜色表达 |
无尽耐久(:77-80)
return durability != ToolHelper.INFINITE_DURABILITY ? formatNumber(durability)
: StatCollector.translateToLocal("tictooltips.infinite");
比对的是 ToolHelper 的 INFINITE_DURABILITY = Integer.MAX_VALUE,
命中则显示本 mod 自己的 tictooltips.infinite(「Infinite」)。
本地化回退机制(:118-137)
static {
localizationAlternatives.put("tool.unbreakable", "tictooltips.unbreakable");
localizationAlternatives.put("tool.reinforced", "modifier.tool.reinforced");
}
getLocalizedString 先试原 key;若 translateToLocal 原样返回(= 没找到),
再去 localizationAlternatives 找备选 key;两个都没有就返回未翻译的 key 本身。
⚠️ 两条备选的方向是反的:
tool.unbreakable的备选是本 mod 的tictooltips.unbreakable(lang 里注释标为「things that should be in TiC」,:50)tool.reinforced的备选是 TCon 老版本 keymodifier.tool.reinforced——:123-124注释说明是给改名前的版本兜底
:120 还有一行被注释掉的备选
// localizationAlternatives.put("tic.string.name", "tictooltips.string.name");
——属于未启用的示例代码,不是生效的映射。
相关
- RomanNumeralHelper -
toRoman的实现 - ToolHelper -
INFINITE_DURABILITY定义方 - ToolPartHelper - 调用方