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),两对字段等值。
三个初始化缺陷
- 4 个 min 字段从未播种 ——
minAccuracy、minWeight、minFletchingDurabilityModifier、minArrowDurabilityModifier声明于:176-206,但循环里没有对应的needsInit赋值分支, 永远停在 Java 默认值0f。minWeight稍好,因为arrowMaterials循环 在:243初始化了minWeight(但maxWeight也一起初始化了)。minAccuracy/minFletchingDurabilityModifier/minArrowDurabilityModifier三个确实从头到尾都是 0。 minShoddiness恒为 0 ——:157显式写成0f,之后没有任何一行更新它。- 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 正确赋值,只是这里没被用。
后果:弓弦耐久那一行的颜色按拉速区间归一化,可能整列同色或被钳到端点色。
相关
- ColorHelper - 归一化着色实现
- StringHelper - 数值转文本
- TooltipHandler - 消费方
- ProxyExtraTiC / ProxyMariculture - 往分类表注入条目