From ebb9a0edbddd43a6e644c27508487f89e0d27bef Mon Sep 17 00:00:00 2001 From: Deftu Date: Tue, 24 Dec 2024 18:28:10 +0200 Subject: [PATCH] [OC-40] Add PostWorldRenderEvent --- .../event/v1/events/PostWorldRenderEvent.java | 24 ++++++ versions/mappings/forge-1.16.5-1.12.2.txt | 3 + .../internal/mixin/EntityRendererMixin.java | 73 +++++++++++++++++++ .../src/main/resources/mixins.oneconfig.json | 1 + 4 files changed, 101 insertions(+) create mode 100644 modules/events/src/main/java/org/polyfrost/oneconfig/api/event/v1/events/PostWorldRenderEvent.java create mode 100644 versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/EntityRendererMixin.java diff --git a/modules/events/src/main/java/org/polyfrost/oneconfig/api/event/v1/events/PostWorldRenderEvent.java b/modules/events/src/main/java/org/polyfrost/oneconfig/api/event/v1/events/PostWorldRenderEvent.java new file mode 100644 index 000000000..ff200ebad --- /dev/null +++ b/modules/events/src/main/java/org/polyfrost/oneconfig/api/event/v1/events/PostWorldRenderEvent.java @@ -0,0 +1,24 @@ +package org.polyfrost.oneconfig.api.event.v1.events; + +import org.polyfrost.universal.UMatrixStack; + +public class PostWorldRenderEvent implements Event { + + private final UMatrixStack stack; + + private final float partialTicks; + + public PostWorldRenderEvent(UMatrixStack stack, float partialTicks) { + this.stack = stack; + this.partialTicks = partialTicks; + } + + public UMatrixStack getStack() { + return stack; + } + + public float getPartialTicks() { + return partialTicks; + } + +} diff --git a/versions/mappings/forge-1.16.5-1.12.2.txt b/versions/mappings/forge-1.16.5-1.12.2.txt index 358ab3ad5..659fdd7e7 100644 --- a/versions/mappings/forge-1.16.5-1.12.2.txt +++ b/versions/mappings/forge-1.16.5-1.12.2.txt @@ -22,6 +22,9 @@ net.minecraft.client.network.play.NetworkPlayerInfo net.minecraft.client.network net.minecraft.client.shader.ShaderDefault net.minecraft.client.shader.ShaderUniform net.minecraft.client.shader.ShaderInstance net.minecraft.client.shader.ShaderManager +net.minecraft.client.renderer.GameRenderer net.minecraft.client.renderer.EntityRenderer +net.minecraft.client.renderer.GameRenderer renderWorld() renderWorldPass() + net.minecraft.client.world.ClientWorld net.minecraft.client.multiplayer.WorldClient net.minecraft.network.IPacket net.minecraft.network.Packet diff --git a/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/EntityRendererMixin.java b/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/EntityRendererMixin.java new file mode 100644 index 000000000..d15fd2aa6 --- /dev/null +++ b/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/EntityRendererMixin.java @@ -0,0 +1,73 @@ +package org.polyfrost.oneconfig.internal.mixin; + +import net.minecraft.client.renderer.EntityRenderer; +import org.polyfrost.oneconfig.api.event.v1.EventManager; +import org.polyfrost.oneconfig.api.event.v1.events.PostWorldRenderEvent; +import org.polyfrost.universal.UMatrixStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Slice; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(EntityRenderer.class) +public class EntityRendererMixin { + + @Inject( + method = "renderWorldPass", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/profiler/Profiler;endStartSection(Ljava/lang/String;)V", + //#if FABRIC + //$$ ordinal = 1 + //#else + //#if MC >= 1.16.5 + //$$ ordinal = 1 + //#else + ordinal = 2 + //#endif + //#endif + ), + slice = @Slice( + //#if MC >= 1.16.5 + //$$ from = @At( + //$$ value = "INVOKE", + //$$ target = "Lnet/minecraft/client/renderer/WorldRenderer;updateCameraAndRender(Lcom/mojang/blaze3d/matrix/MatrixStack;FJZLnet/minecraft/client/renderer/ActiveRenderInfo;Lnet/minecraft/client/renderer/GameRenderer;Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/util/math/vector/Matrix4f;)V" + //$$ ), + //$$ to = @At( + //$$ value = "INVOKE", + //$$ target = "Lnet/minecraft/client/renderer/GameRenderer;renderHand(Lcom/mojang/blaze3d/matrix/MatrixStack;Lnet/minecraft/client/renderer/ActiveRenderInfo;F)V" + //$$ ) + //#else + from = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/GlStateManager;disableFog()V" + ), + to = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/EntityRenderer;renderHand(FI)V" + ) + //#endif + ) + ) + private void onRenderWorldPass( + //#if MC <= 1.12.2 + int pass, + //#endif + float partialTicks, + long finishTimeNano, + //#if MC >= 1.16.5 + //$$ com.mojang.blaze3d.matrix.MatrixStack matrixStack, + //#endif + CallbackInfo ci + ) { + UMatrixStack stack = + //#if MC >= 1.16.5 + //$$ new UMatrixStack(matrixStack); + //#else + new UMatrixStack(); + //#endif + EventManager.INSTANCE.post(new PostWorldRenderEvent(stack, partialTicks)); + } + +} diff --git a/versions/src/main/resources/mixins.oneconfig.json b/versions/src/main/resources/mixins.oneconfig.json index 4b93b512a..11d08d5d1 100644 --- a/versions/src/main/resources/mixins.oneconfig.json +++ b/versions/src/main/resources/mixins.oneconfig.json @@ -17,6 +17,7 @@ "ShaderGroupAccessor", "SoundManagerMixin", "SoundManagerAccessorMixin", + "EntityRendererMixin", "WorldClientMixin", "SoundManagerMixin", "compat.OptifineConfigMixin",