ProxyMariculture

Mariculture 钛系工具部件反射注册

基本信息

属性 值
路径 squeek.tictooltips.proxy.ProxyMariculture
行数 129
触发条件 Loader.isModLoaded("Mariculture")(ModTiCTooltips.java:45)
反射目标 mariculture.plugins.tconstruct.TitaniumTools(:22)

[!NOTE] 范围 Mariculture 不在 Wiki 收录范围(relation.md 无对应行),故不建分类、不加链接。 本 mod 对它的接入是单向的:只读其 TitaniumTools 插件的静态 Item 字段, 把它们塞进 TCon 的部件分类表。Mariculture 本身不知道 TiC Tooltips 存在。

与 ProxyExtraTiC 的实现差异

维度 ProxyExtraTiC 本类
声明方式 enum PartInfo 28 项 无枚举,25 段裸 getDeclaredField 赋值
字段名大小写 PICKAXE_HEAD(大写下划线) pickaxe_head(小写下划线)
代码行数 114 129
是否记录 TCon→Ex 映射 是(ticToExtraTiCParts) 否,只有单向列表
公共总表 extraTiCParts MaricultureParts(首字母大写的字段名)

⚠️ public static List<Item> MaricultureParts(:14)以大写字母开头命名, 违反 Java 字段命名约定,是本仓唯一一处这样的写法。

registerParts()(:20-127)

25 次 getDeclaredField(...) → MaricultureParts.add(part) → 对应分类表 add(part)。 按 ToolPartHelper 的分组顺序:

分组 反射字段(Mariculture 侧) 数量 加入的 TCon 分类表
工具头 pickaxe_head / shovel_head / excavator_head 3 toolHeads
武器矿镐头 hammer_head 1 weaponMiningHeads
武器工具头 axe_head / scythe_head / broad_axe_head 3 weaponToolHeads
武器头 sword_blade / large_sword_blade / knife_blade / frypan_head / battle_sign_head 5 weaponHeads
武器护手 crossbar / hand_guard / large_guard 3 weaponGuards
满护手 full_guard 1 fullWeaponGuards
绑线 binding / tough_binding 2 bindings / toughBindings
杆 tool_rod / tough_rod 2 rods
板 large_plate 1 plates
碎片 chunk 1 shards
箭杆 tool_rod 1 arrowRods
凿头 chisel_head 1 chisels

合计 28 次 getDeclaredField,产生 25 个 Item (tool_rod 读了两次:一次进 rods :93-95,一次进 arrowRods :111-113)。

⚠️ 重名歧义:tool_rod 既是普通杆又是箭杆。 :93-95 把它加进 rods,:111-113 又把同一个 Item 引用加进 arrowRods。 MaricultureParts 里也加了两次(:94 和 :112), 所以该列表含重复项,长度是 25 但去重后只有 24 个不同对象。

异常处理(:119-124)

} catch (RuntimeException e) { throw e; }
  catch (Exception e) { Log.error(...); return false; }

与 ProxyExtraTiC 完全一致:RuntimeException 原样抛, 受检异常只记日志并返回 false。

⚠️ 同上缺陷:init()(:16-18)丢弃返回值, 调用方无法察觉失败;且任一字段缺失会导致后续全部字段不再注册 (异常直接跳出循环),呈现为「部分部件有 tooltip、部分没有」, 而不是整体回退。

反射脆弱点

本类没有「部分成功」的保护:25 次 getDeclaredField 串在一个 try 里。 Mariculture 若重命名任一字段,整段注册在第一个失败点中止。 Mariculture 的 TitaniumTools 插件是可选的(Mariculture 可不带 TCon 装), 此时类不存在 → ClassNotFoundException → 只记日志。

相关