ThaumcraftCompatHandler

基本信息

属性 值
类 com.gtnewhorizons.angelica.loading.fml.compat.handlers.ThaumcraftCompatHandler
路径 src/main/java/com/gtnewhorizons/angelica/loading/fml/compat/handlers/ThaumcraftCompatHandler.java
行数 16
类型 public class ... implements ICompatHandler(:9)
门控 CompatConfig.fixThaumcraft(CompatHandlers.java:19)

它是什么

Thaumcraft 的兼容数据提供者。与 ThaumicHorizons 是同一补丁的两份拷贝,针对两个平行 mod。

唯一覆写:getHUDCachingEarlyReturn(:12-14)

return ImmutableMap.of("thaumcraft.client.lib.RenderEventHandler", ImmutableList.of("renderOverlay"));

一个类、一个方法。补丁内容由 HUDCachingEarlyReturnTransformer 注入:在 renderOverlay 方法指令序列开头插入

INVOKESTATIC HUDCaching$HUDCachingHooks.shouldReturnEarly()Z
IFEQ  exitLabel
ICONST_0 / IRETURN   (返回值 Z 或 I 时)
RETURN              (返回值 V 时)
exitLabel:

即:当 Angelica 的 HUD 缓存命中时,让 Thaumcraft 的 renderOverlay 立刻返回零值,避免它重绘已被缓存的内容造成重复。

耦合点

被补丁的方法名 renderOverlay 与 Thaumcraft RenderEventHandler 里的 Forge RenderGameOverlayEvent 订阅回调同名。Angelica 自己的 HUDCaching 也用同名方法发 ClientEvent(见 HUDCaching :75-76、:90、:187),两者是不同层级但语义对齐的钩子。

已知问题

  1. 补丁只在 LaunchWrapper 路径存在。装了 RetroFuturaBootstrap 时,CompatHandlers 驱动的全部兼容 transformer 一个都不注册(AngelicaRfbPlugin.makeTransformers 只返回 3 个 RFB transformer)。即:RFB + Thaumcraft = HUDCaching 与 Thaumcraft 的 HUD 重复渲染。这是一个真实的功能性缺口,不是配置问题。
  2. 无类级 Javadoc。
  3. 目标类名 thaumcraft.client.lib.RenderEventHandler 是字符串字面量,Thaumcraft 改包名即静默失效(ClassConstantPoolParser 找不到就不变换,不报错)。

相关条目