diff --git a/src/main/java/com/gtnewhorizons/angelica/event/ClientEvent.java b/src/main/java/com/gtnewhorizons/angelica/event/ClientEvent.java new file mode 100644 index 000000000..3a8454880 --- /dev/null +++ b/src/main/java/com/gtnewhorizons/angelica/event/ClientEvent.java @@ -0,0 +1,36 @@ +package com.gtnewhorizons.angelica.event; + +import net.minecraft.client.renderer.EntityRenderer; +import net.minecraftforge.eventbus.api.bus.EventBus; +import net.minecraftforge.eventbus.api.event.MutableEvent; + +public class ClientEvent extends MutableEvent { + public static final EventBus BUS = EventBus.create(ClientEvent.class); + + public final ClientEventType event; + public final EntityRenderer renderer; + public final float partialTicks; + + private ClientEvent(ClientEventType event) { + this.event = event; + this.renderer = null; + this.partialTicks = 0; + } + + private ClientEvent(ClientEventType event, EntityRenderer renderer, float partialTicks) { + this.event = event; + this.renderer = renderer; + this.partialTicks = partialTicks; + } + + public static void post(ClientEventType event, EntityRenderer renderer, float partialTicks) { + if (!BUS.hasListeners()) return; + BUS.post(new ClientEvent(event, renderer, partialTicks)); + } + + public static void post(ClientEventType event) { + if (!BUS.hasListeners()) return; + BUS.post(new ClientEvent(event)); + } +} + diff --git a/src/main/java/com/gtnewhorizons/angelica/event/ClientEventType.java b/src/main/java/com/gtnewhorizons/angelica/event/ClientEventType.java new file mode 100644 index 000000000..de04ad9ff --- /dev/null +++ b/src/main/java/com/gtnewhorizons/angelica/event/ClientEventType.java @@ -0,0 +1,8 @@ +package com.gtnewhorizons.angelica.event; + +public enum ClientEventType { + PRE_RENDER_GUI, + PRE_RENDER_HUD, + POST_RENDER_HUD, + ON_TICK, +} diff --git a/src/main/java/com/gtnewhorizons/angelica/hudcaching/HUDCaching.java b/src/main/java/com/gtnewhorizons/angelica/hudcaching/HUDCaching.java index 63b03c519..45e2b5594 100644 --- a/src/main/java/com/gtnewhorizons/angelica/hudcaching/HUDCaching.java +++ b/src/main/java/com/gtnewhorizons/angelica/hudcaching/HUDCaching.java @@ -6,11 +6,12 @@ import com.gtnewhorizon.gtnhlib.client.renderer.postprocessing.CustomFramebuffer import com.gtnewhorizon.gtnhlib.client.renderer.postprocessing.SharedDepthFramebuffer; import com.gtnewhorizon.gtnhlib.client.renderer.vao.IVertexArrayObject; import com.gtnewhorizon.gtnhlib.client.renderer.vao.VertexBufferType; -import com.gtnewhorizon.gtnhlib.client.renderer.vbo.IVertexBuffer; import com.gtnewhorizon.gtnhlib.client.renderer.vertex.DefaultVertexFormat; import com.gtnewhorizons.angelica.compat.ModStatus; import com.gtnewhorizons.angelica.compat.holoinventory.HoloInventoryReflectionCompat; import com.gtnewhorizons.angelica.config.AngelicaConfig; +import com.gtnewhorizons.angelica.event.ClientEvent; +import com.gtnewhorizons.angelica.event.ClientEventType; import com.gtnewhorizons.angelica.glsm.GLStateManager; import com.gtnewhorizons.angelica.glsm.hooks.GLSMConfig; import com.gtnewhorizons.angelica.mixins.interfaces.GuiIngameAccessor; @@ -65,6 +66,8 @@ public class HUDCaching { } public static void renderCachedHud(EntityRenderer renderer, GuiIngame ingame, float partialTicks, boolean hasScreen, int mouseX, int mouseY) { + ClientEvent.post(ClientEventType.PRE_RENDER_GUI, renderer, partialTicks); + ClientEvent.post(ClientEventType.PRE_RENDER_HUD, renderer, partialTicks); if (ModStatus.isXaerosMinimapLoaded && ingame instanceof GuiIngameForge) { // this used to be called by asming into renderGameOverlay, but we removed it XaeroMinimapCore.beforeIngameGuiRender(partialTicks); @@ -78,6 +81,7 @@ public class HUDCaching { if (!AngelicaConfig.hudCachingActive || mc.displayWidth < 16 || mc.displayHeight < 16) { ingame.renderGameOverlay(partialTicks, hasScreen, mouseX, mouseY); + ClientEvent.post(ClientEventType.POST_RENDER_HUD, renderer, partialTicks); return; } @@ -170,6 +174,8 @@ public class HUDCaching { GLStateManager.tryBlendFuncSeparate(GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO); mc.getTextureManager().bindTexture(Gui.icons); + + ClientEvent.post(ClientEventType.POST_RENDER_HUD, renderer, partialTicks); } /** diff --git a/src/mixin/java/com/gtnewhorizons/angelica/mixins/early/angelica/MixinMinecraft_IconifyGuard.java b/src/mixin/java/com/gtnewhorizons/angelica/mixins/early/angelica/MixinMinecraft_IconifyGuard.java index 1303cb358..395f2751d 100644 --- a/src/mixin/java/com/gtnewhorizons/angelica/mixins/early/angelica/MixinMinecraft_IconifyGuard.java +++ b/src/mixin/java/com/gtnewhorizons/angelica/mixins/early/angelica/MixinMinecraft_IconifyGuard.java @@ -1,5 +1,7 @@ package com.gtnewhorizons.angelica.mixins.early.angelica; +import com.gtnewhorizons.angelica.event.ClientEvent; +import com.gtnewhorizons.angelica.event.ClientEventType; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.EntityRenderer; import net.minecraft.client.shader.Framebuffer; @@ -15,6 +17,7 @@ public class MixinMinecraft_IconifyGuard { at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/EntityRenderer;updateCameraAndRender(F)V") ) private void angelica$skipRenderWhenIconified(EntityRenderer entityRenderer, float partialTicks) { + ClientEvent.post(ClientEventType.ON_TICK); final Framebuffer fb = Minecraft.getMinecraft().getFramebuffer(); if (fb == null || fb.framebufferWidth < 16 || fb.framebufferHeight < 16) { return;