ClientProxy
基本信息
| 属性 | 值 |
|---|---|
| 类名 | com.slprime.chromatictooltips.ClientProxy |
| 文件 | src/main/java/com/slprime/chromatictooltips/ClientProxy.java |
| 继承 | extends CommonProxy implements IResourceManagerReloadListener |
| 启用版本 | Minecraft 1.7.10 |
功能
全部实际注册逻辑的所在。preInit 一次性完成事件监听器、快捷键、
13 个 enricher、渲染器与 3 个行转换器的注册。
2 个快捷键
| 变量 | 键位 | 分类 |
|---|---|---|
nextPage |
Keyboard.KEY_Z |
key.categories.chromatictooltips |
previousPage |
Keyboard.KEY_NONE |
key.categories.chromatictooltips |
⚠️ previousPage 默认是 KEY_NONE(未绑定) ——
即翻到上一页默认没有快捷键,必须在选项里自行设置。
说「两个快捷键都有默认键位」是错的。
⚠️ 两个 KeyBinding 声明为 public static final,
但其 isPressed() 状态被 TooltipHandler 间接读取
(ClientProxy 另有 nextPageIsPressed / previousPageIsPressed 两个
protected static boolean 标志)。
⚠️ 键位名 next_page / previous_page 用下划线,
而分类名 chromatictooltips 无下划线。
3 个事件监听器(preInit)
TooltipUtils.registerEventListener(this);
TooltipUtils.registerEventListener(new FoodEffectsHandler());
TooltipUtils.registerEventListener(new FoodStatsHandler());
监听器实例为匿名式直接 new,无静态单例、无字段引用
(FoodEffectsHandler / FoodStatsHandler 各 1 个)。
⚠️ this(ClientProxy 自身)作为监听器注册,说明它自己带
@SubscribeEvent 方法(TickEvent 等,见文件尾部)。
12 个 enricher 实例(注册顺序即优先级)
addEnricher(new TitleEnricher()); 1
addEnricher(new KeyboardModifierEnricher()); 2
addEnricher(new ItemStatsEnricher(true)); 3
addEnricher(new StackSizeEnricher()); 4
addEnricher(new HotkeyEnricher()); 5
addEnricher(new ItemInfoEnricher()); 6
addEnricher(new FluidInfoEnricher()); 7
addEnricher(new EnchantmentEnricher()); 8
addEnricher(new ItemStatsEnricher(false)); 9
addEnricher(new OreDictionaryEnricher()); 10
addEnricher(new ContextInfoEnricher()); 11
addEnricher(new ModInfoEnricher()); 12
⚠️ 实际是 12 次 addEnricher 调用,注册 12 个实例,
但 enricher/ 包里只有 11 个类 ——
因为 ItemStatsEnricher 被注册了两次:
new ItemStatsEnricher(true)(位置 3)与 new ItemStatsEnricher(false)(位置 9),
是同一个类的两个实例(构造参数区分行为)。
⚠️ enricher/ 目录实测 11 个类:
ContextInfoEnricher、EnchantmentEnricher、FluidInfoEnricher、
HotkeyEnricher、ItemInfoEnricher、ItemStatsEnricher、
KeyboardModifierEnricher、ModInfoEnricher、OreDictionaryEnricher、
StackSizeEnricher、TitleEnricher。
12 个实例 ≠ 11 个类,报数时要说清。
⚠️ 两个 ItemStatsEnricher 实例分列第 3 与第 9 位,
中间夹了 5 个其它 enricher —— 即「已用 / 未用」两套渲染位置被刻意分开。
其构造参数 boolean showOnlyIcons 直接决定 sectionId() 的返回值:
public ItemStatsEnricher(boolean showOnlyIcons) { this.showOnlyIcons = showOnlyIcons; }
public String sectionId() { return SECTION_ID + (this.showOnlyIcons ? ":icons" : ""); }
即 true 版拿到 …:icons 后缀的独立分节 id,false 版拿基础 id。
两实例靠 sectionId() 区分而非靠对象身份。
渲染器
TooltipHandler.setRendererClass(TooltipRenderer.class);
⚠️ 用的是 setRendererClass(Class) —— 传入类对象而非实例,
渲染器实例化时机由 TooltipHandler 决定。
3 个行转换器
addLineConverter(ModifierConverter.PATTERN, new ModifierConverter());
addLineConverter(DividerTextConverter.PATTERN, new DividerTextConverter());
addLineConverter(DividerConverter.PATTERN, new DividerConverter());
| 类 | 匹配 |
|---|---|
ModifierConverter |
ModifierConverter.PATTERN |
DividerTextConverter |
DividerTextConverter.PATTERN |
DividerConverter |
DividerConverter.PATTERN |
⚠️ 每个转换器自带静态 PATTERN(Pattern 类型)作为注册键
—— 即按正则而非按类型注册。converter/ 包正好 3 个类,一一对应。
⚠️ 全部以静态字段 PATTERN 作为键,不重复 new 正则。
IResourceManagerReloadListener
实现该接口 → 资源包重载时本类被回调。
这与 GeneralConfig 里
Enable resource pack themes(资源包定义自定义主题)开关配套。
关联
- ChromaticTooltips -
@SidedProxy的 clientSide - CommonProxy - 基类
- TooltipRegistry -
addEnricher/addLineConverter的宿主 - TooltipHandler -
setRendererClass - TooltipRenderer - 被设置的渲染器
- FoodEffectsHandler / FoodStatsHandler - 2 个事件监听器
- 配置类 - 3 个
@Config类