MixinEntityRenderer_Xaeros

基本信息

属性 值
类名 com.gtnewhorizons.angelicacompat.mixins.early.client.xaeros.MixinEntityRenderer_Xaeros
目标类 net.minecraft.client.renderer.EntityRenderer
Mixin 阶段 EARLY(mixins.angelicacompat.early.json)
Mixin 启用条件 PatchesConfig.patchXaerosMinimap == true && AngelicaConfig.enableHudCaching == true
Mixin 注入方法 updateCameraAndRender
Mixin 注入点 INVOKE GuiIngame.renderGameOverlay(FZII)V
启用版本 Minecraft 1.7.10(仅客户端)

功能

Xaeros Minimap 在原版 Forge 中通过 xaero.common.core.transformer.GuiIngameForgeTransformer 把 XaeroMinimapCore.beforeIngameGuiRender(partialTicks) 直接插入 GuiIngame.renderGameOverlay(...) 调用之前。但当 Angelica 的 HUDCaching 启用时,renderGameOverlay 整体被早退跳过,Xaeros 的钩子也不再被调用——导致 minimap 在 HUD 缓存命中时不更新玩家位置标记。

MixinCompatHackTweaker 在启动期反射移除 Xaeros GuiIngameForgeTransformer,但移除了就没法补回 Xaeros 的钩子。本 Mixin 即"补回"步骤:

  • 直接在 EntityRenderer.updateCameraAndRender 中注入 XaeroMinimapCore.beforeIngameGuiRender(partialTicks) 调用,与原 Xaeros 钩子位置完全相同;
  • 仅当 mc.ingameGUI instanceof GuiIngameForge(即 Forge 包装过的 HUD)时才执行;
  • 仅当 ModStatus.isXaerosMinimapLoaded 为 true(即 Loader.isModLoaded("XaeroMinimap"))时才执行。

注入代码

@Inject(
    method = "updateCameraAndRender",
    at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiIngame;renderGameOverlay(FZII)V"))
public void angelicacompat$callXaeros(CallbackInfo ci, @Local(ordinal = 0) float partialTicks) {
    if (ModStatus.isXaerosMinimapLoaded && mc.ingameGUI instanceof GuiIngameForge) {
        XaeroMinimapCore.beforeIngameGuiRender(partialTicks);
    }
}

@Local(ordinal = 0) float partialTicks:通过 MixinExtras 注入 partialTicks 局部变量,等价于原 Xaeros transformer 把它从方法参数捕获出来。

第三方 mod 集成

依赖 包 是否必需
xaeros.common.core.XaeroMinimapCore xaero.common.core 是(注入时直接调用其静态方法)
net.minecraftforge.client.GuiIngameForge Forge 是(instanceof 检查)

相关条目