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 → 本地化 key tool.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 老版本 key modifier.tool.reinforced ——:123-124 注释说明是给改名前的版本兜底

:120 还有一行被注释掉的备选 // localizationAlternatives.put("tic.string.name", "tictooltips.string.name"); ——属于未启用的示例代码,不是生效的映射。

相关