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(资源包定义自定义主题)开关配套。

关联