ProxyExtraTiC
ExtraTiC 部件反射映射,28 个 PartInfo + 材料 ID 区间
基本信息
| 属性 | 值 |
|---|---|
| 路径 | squeek.tictooltips.proxy.ProxyExtraTiC |
| 行数 | 114 |
| 触发条件 | Loader.isModLoaded("ExtraTiC")(ModTiCTooltips.java:42) |
| 反射目标 | glassmaker.extratic.common.PartsHandler(:92) |
[!WARNING] 「TiC」在这两个类里指的是不同模组 本类名
ProxyExtraTiC里的TiC= ExtraTiC(glassmaker.extratic), 不是本 mod 硬依赖的 Tinkers’ Construct(TConstruct)。 两者同属作者squeek,是两个独立项目。 判定依据:PartInfo枚举的字段类型全是tconstruct.tools.TinkerTools的Item, 反射读的却是 Ex TiC 的Item—— 明确是两套物品。 ExtraTiC 不在 Wiki 收录范围,故不建分类、不加链接。
PartInfo 枚举(:21-84)
28 个常量,每个把「TCon 侧 Item」映射到「Ex TiC 侧应归入的分类列表」。
| 分组 | 常量 | TCon 侧 Item |
|---|---|---|
| 工具头 | PICKAXE_HEAD / SHOVEL_HEAD / EXCAVATOR_HEAD |
TinkerTools.pickaxeHead 等 |
| 武器矿镐头 | HAMMER_HEAD |
TinkerTools.hammerHead |
| 武器工具头 | AXE_HEAD / SCYTHE_HEAD / LUMBERAXE_HEAD |
hatchetHead / scytheBlade / broadAxeHead |
| 武器头 | SWORD_BLADE / LARGE_SWORD_BLADE / KNIFE_BLADE / FRYPAN_HEAD / BATTLE_SIGN_HEAD |
TinkerTools.* |
| 武器护手 | CROSSBAR / MEDIUM_GUARD / LARGE_GUARD / FULL_GUARD |
crossbar / handGuard / wideGuard / fullGuard |
| 绑线 | BINDING / TOUGHBIND |
binding / toughBinding |
| 杆 | TOOLROD / TOUGHROD |
toolRod / toughRod |
| 板 | LARGEPLATE |
largePlate |
| 碎片 | CHUNK |
toolShard |
| 箭头 | ARROWHEAD |
TinkerWeaponry.arrowhead |
| 凿头 | CHISEL_HEAD |
chiselHead |
| 1.8.0 新增 | SHURIKEN / BOW_LIMB / CROSSBOW_LIMB / CROSSBOW_BODY / BOLT |
TinkerWeaponry.part* |
⚠️ 枚举字段名与 Ex TiC 的字段名同名 ——
registerParts() 用 partInfo.name() 反射读 Ex TiC PartsHandler 的静态字段
(:95)。所以两边字段名必须逐字一致,改名即失效。
setPartItem 的副作用(:74-79)
this.partItem = partItem;
this.relevantList.add(partItem); // 加进 TCon 分类表
extraTiCParts.add(partItem); // 加进本类总表
ticToExtraTiCParts.put(ticPart, partItem);// 记录正反映射
一次调用同时改三张表。第二张表用于「该部件是 Ex TiC 的」判定。
registerParts()(:90-108)
| 步骤 | 内容 |
|---|---|
:92 |
Class.forName("glassmaker.extratic.common.PartsHandler") |
:94-97 |
遍历 PartInfo.values(),逐个读字段 → setPartItem |
:98 |
特殊处理:常量名 TOOLROD 的额外加入 ToolPartHelper.arrowRods |
⚠️ :98 的判定是 if (partInfo.name().equals("TOOLROD")) ——
按字符串比枚举名,编译期常量被降级成运行时比较。
只处理 TOOLROD,TOUGHROD 不加入箭杆列表(Ex TiC 没有对应箭杆)。
异常处理(:100-105)
} catch (RuntimeException e) { throw e; } // RuntimeException 原样抛
catch (Exception e) { Log.error(...); return false; } // 受检异常只记日志
即反射失败(NoSuchFieldException 等)只打日志不崩游戏,
但 init()(:86-88)丢弃了 registerParts() 的返回值,
调用方无法知道映射是否建立成功 —— 失败时表现为部件静默不显示 tooltip。
isExtraTiCMaterialID(:110-112)
return (matID >= 100 && matID < 200) || (matID >= 2000 && matID < 3000);
Ex TiC 的材料 ID 占用两个区段:[100, 200) 与 [2000, 3000)。
⚠️ 纯魔数,无常量定义。两段区间的依据在 Ex TiC 源码里, 本仓只硬编码。Ex TiC 若调整 ID 分配,这段判定会静默失效。
用途见 TooltipHandler 的 :1060-1062:
命中时用 ticToExtraTiCParts 把部件 Item 换成 Ex TiC 版本再取显示名。
相关
- ToolPartHelper - 被
add的分类表宿主 - TooltipHandler -
isExtraTiCMaterialID与映射表的消费方 - ProxyMariculture - 同类反射模式的另一实现(写法不同)