ToolPartHelper

部件分类表 21 组、材料极值扫描、着色字符串入口

基本信息

属性 值
路径 squeek.tictooltips.helpers.ToolPartHelper
行数 407

本类做三件事:① 维护「哪些 Item 属于哪类工具部件」;② 在 postInit 扫描 TConstructRegistry 全表算出每个属性的 min/max,作为着色基准;③ 提供 24 个 「着色 + 文本」组合方法。

部件分类表(:22-54,静态初始化)

全部字段都是 public static final List<Item>,注意它们是可变列表 —— 三个 Proxy 会在运行期往里 add()。

字段 初始内容 数量
toolHeads pickaxeHead, shovelHead, excavatorHead 3
weaponMiningHeads hammerHead 1
weaponToolHeads hatchetHead, scytheBlade, broadAxeHead 3
weaponHeads swordBlade, largeSwordBlade, knifeBlade, frypanHead, signHead 5
weaponGuards crossbar, handGuard, wideGuard 3
fullWeaponGuards fullGuard 1
bindings binding 1
toughBindings toughBinding 1
rods toolRod, toughRod 2
plates largePlate 1
shards toolShard 1
arrowHeads arrowhead 1
arrowFletchings fletching 1
bowStrings bowstring 1
arrowRods toolRod, partArrowShaft 2
chisels chiselHead 1
shurikenParts partShuriken 1
arrowShafts partArrowShaft 1
bowLimbs partBowLimb 1
crossbowLimbs partCrossbowLimb 1
crossbowBodies partCrossbowBody 1
boltParts partBolt 1

合计 22 个列表(arrowRods 与 rods 共用 toolRod)。 :48 注释标明后 7 组是「stuff added in 1.8.0」。

派生判定全是 List.contains,所以复杂度 O(n) 且随 Proxy 注入而增长。

三个特殊判定

方法 条件 用途
isWeaponGuard (:72) isNormalWeaponGuard || isFullWeaponGuard 合并两种护手
isBinding (:88) isNormalBinding || isToughBinding 合并两种绑线
hasCustomMaterial (:152) isArrowShaft || isArrowFletching || isBowString 这三类不是 ToolMaterial,需走 getCustomMaterial

determineMinAndMaxValues()(:208-320)

postInit 调用一次,遍历四张 TCon 表算极值,供 ColorHelper 归一化:

表 循环体读取的字段 写入的 min/max
TConstructRegistry.toolMaterials attack, harvestLevel, durability, toolSpeed, handleDurability, reinforced, shoddy minAttack/maxAttack、minHarvestLevel/maxHarvestLevel、minDurability/maxDurability、minMiningSpeed/maxMiningSpeed、minHandleModifier/maxHandleModifier、minReinforcedLevel/maxReinforcedLevel、minShoddiness/maxPositiveShoddiness/maxNegativeShoddiness
arrowMaterials breakChance, mass minBreakChance/maxBreakChance、minWeight/maxWeight
bowMaterials drawspeed, flightSpeedMax minBowDrawSpeed/maxBowDrawSpeed、minBowArrowSpeedModifier/maxBowArrowSpeedModifier、minFlightSpeedMax/maxFlightSpeedMax
customMaterials 经 CompatibilityHelper.getFletchingMaterial 取 fletching;getCustomMaterial(.., BowstringMaterial.class);getCustomMaterial(.., ArrowShaftMaterial.class) minAccuracy/maxAccuracy、minBreakChance/maxBreakChance、minWeight/maxWeight、minFletchingDurabilityModifier/maxFletchingDurabilityModifier、minBowString{Drawspeed,Durability,ArrowSpeed}Modifier/*、minArrowDurabilityModifier/maxArrowDurabilityModifier

bowMaterials 循环把 flightSpeedMax 同时写进 minFlightSpeedMax/maxFlightSpeedMax(:262-263)和 minBowArrowSpeedModifier/maxBowArrowSpeedModifier(:264-265),两对字段等值。

三个初始化缺陷

  1. 4 个 min 字段从未播种 —— minAccuracy、minWeight、 minFletchingDurabilityModifier、minArrowDurabilityModifier 声明于 :176-206,但循环里没有对应的 needsInit 赋值分支, 永远停在 Java 默认值 0f。minWeight 稍好,因为 arrowMaterials 循环 在 :243 初始化了 minWeight(但 maxWeight 也一起初始化了)。 minAccuracy / minFletchingDurabilityModifier / minArrowDurabilityModifier 三个确实从头到尾都是 0。
  2. minShoddiness 恒为 0 —— :157 显式写成 0f,之后没有任何一行更新它。
  3. shoddiness 极值只在 else 分支算 —— :220-223 位于 needsInit 的 else 里,所以 toolMaterials 的第一个材料永远不参与正/负 shoddiness 极值计算。

着色字符串方法(24 个,:323-405)

统一模式:ColorHelper.getRelativeColor(val, min, max) + StringHelper.getXxxString(val)。

⚠️ 三个方法把 min/max 传反了(getRelativeColor 支持 min > max, 表示「越小越好」,:13-16 会按反向判越界):

方法 传入 语义
getWeightString (:361) (val, maxWeight, minWeight) 重量越小越好
getBowDrawSpeedString (:366) (val, maxBowDrawSpeed, minBowDrawSpeed) 同上
getBreakChanceString (:397) (val, maxBreakChance, minBreakChance) 折断率越小越好

⚠️ 一个方法取错字段 —— getBowStringDurabilityModifierString (:387-390):

public static String getBowStringDurabilityModifierString(float val) {
    return ColorHelper.getRelativeColor(val, minBowStringDrawspeedModifier, maxBowStringDrawspeedModifier)   // ← 拉速
            + StringHelper.getModifierString(val);
}

函数处理的是 durability modifier,却用 drawspeed 的区间着色。 正确字段 minBowStringDurabilityModifier / maxBowStringDurabilityModifier 在 :197-198 声明、:276 与 :284-287 正确赋值,只是这里没被用。 后果:弓弦耐久那一行的颜色按拉速区间归一化,可能整列同色或被钳到端点色。

相关