ForgeHooksClientMixin

EARLY:强制开启模板缓冲

基本信息

属性 值
路径 com.gtnewhorizons.navigator.mixins.early.minecraft.ForgeHooksClientMixin
行数 20
注解 @Mixin(value = ForgeHooksClient.class, remap = false)(:11)
构建器 Mixins 的 ENABLE_STENCIL

唯一的 @Inject(:15)

@Inject(method = "createDisplay", at = @At("HEAD"))

在 ForgeHooksClient.createDisplay(...) 的方法头注入。

⚠️ remap = false 但 method = "createDisplay" 是未带描述符的短名 —— 所以它按名字匹配(不按完整签名), 若 Forge 的 createDisplay 有多个重载,@Inject 会全部注入或报错 (取决于 require 设置;本类未设 require)。

注入目的

createDisplay 里创建 Display 时设置 GL_STENCIL_BITS(模板缓冲)。 Xaero 的世界地图需要模板缓冲做遮罩,但 Minecraft 默认不分配。

⚠️ 在 HEAD 注入意味着注入代码在原方法体之前跑, 此时 GL 上下文尚未创建 —— 所以注入代码只能是设置 Java 侧的 Display 参数 (如 display.setStencilSize(...)),不能直接调 GL。

双模组要求

Mixins 的 ENABLE_STENCIL(:16-21):

.addRequiredMod(TargetedMod.XAEROMINIMAP)
.addRequiredMod(TargetedMod.XAEROWORLDMAP)
.setApplyIf(() -> ModuleConfig.enableXaeroMinimapModule)

addRequiredMod 调了两次 → 两个模组都装才应用。 见分类页缺陷 7。

⚠️ 描述串是本构建器唯一有的: new MixinBuilder("Force enables stencil buffer")(:16)。

相关