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 → 只记日志。
相关
- ToolPartHelper - 被
add的分类表宿主 - ProxyExtraTiC - 同一职责的另一实现(枚举版)