From 986e474657f24ddbca6bf5717156212b4ec3234b Mon Sep 17 00:00:00 2001 From: James Seibel Date: Thu, 3 Oct 2024 07:36:11 -0500 Subject: [PATCH] Add fading to Forge and Neo, fix fading rain, fix old MC compiling --- .../fabric/FabricClientProxy.java | 6 ++-- .../mixins/client/MixinLevelRenderer.java | 35 +++++++++++++++++-- .../mixins/client/MixinLevelRenderer.java | 26 +++++++++++++- 3 files changed, 61 insertions(+), 6 deletions(-) diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java index 104bc97c3..f148c129d 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java @@ -253,7 +253,7 @@ public class FabricClientProxy implements AbstractModInitializer.IEventProxy modelViewMatrix, projectionMatrix, #if MC_VER < MC_1_21_1 - renderContext.tickDelta() + renderContext.tickDelta(), #else renderContext.tickCounter().getGameTimeDeltaTicks(), #endif @@ -262,7 +262,7 @@ public class FabricClientProxy implements AbstractModInitializer.IEventProxy }); // TODO add to forge and neo - WorldRenderEvents.LAST.register((renderContext) -> + WorldRenderEvents.AFTER_TRANSLUCENT.register((renderContext) -> { Mat4f projectionMatrix = McObjectConverter.Convert(renderContext.projectionMatrix()); @@ -277,7 +277,7 @@ public class FabricClientProxy implements AbstractModInitializer.IEventProxy modelViewMatrix, projectionMatrix, #if MC_VER < MC_1_21_1 - renderContext.tickDelta() + renderContext.tickDelta(), #else renderContext.tickCounter().getGameTimeDeltaTicks(), #endif diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java index 20cd3ecab..0057e206a 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java @@ -141,17 +141,48 @@ public class MixinLevelRenderer #endif + float frameTime; + #if MC_VER < MC_1_21_1 + frameTime = Minecraft.getInstance().getFrameTime(); + #else + frameTime = Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(); + #endif + // only render before solid blocks if (renderType.equals(RenderType.solid())) { - ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, Minecraft.getInstance().getFrameTime()); + ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, frameTime); } else if (renderType.equals(RenderType.translucent())) { - ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, Minecraft.getInstance().getFrameTime()); + ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, frameTime); } + // render fade + // fade rendering needs to happen AFTER_ENTITIES and AFTER_TRANSLUCENT respectively (fabric names) + // however since this method intjects at the beginning of the rendertype, + // we need to trigger for the renderType after those passes are done + if (renderType.equals(RenderType.cutout())) + { + ClientApi.INSTANCE.renderFadeOpaque( + mcModelViewMatrix, + mcProjectionMatrix, + frameTime, + ClientLevelWrapper.getWrapper(this.level) + ); + } + else if (renderType.equals(RenderType.tripwire())) + { + ClientApi.INSTANCE.renderFade( + mcModelViewMatrix, + mcProjectionMatrix, + frameTime, + ClientLevelWrapper.getWrapper(this.level) + ); + } + + if (Config.Client.Advanced.Debugging.lodOnlyMode.get()) { callback.cancel(); diff --git a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java index b8ca8924c..39c158472 100644 --- a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java +++ b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java @@ -126,7 +126,8 @@ public class MixinLevelRenderer frameTime = Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(); #endif - // only render before solid blocks + + // render LODs if (renderType.equals(RenderType.solid())) { ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, frameTime); @@ -136,6 +137,29 @@ public class MixinLevelRenderer ClientApi.INSTANCE.renderDeferredLods(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, frameTime); } + // render fade + // fade rendering needs to happen AFTER_ENTITIES and AFTER_TRANSLUCENT respectively (fabric names) + // however since this method intjects at the beginning of the rendertype, + // we need to trigger for the renderType after those passes are done + if (renderType.equals(RenderType.cutout())) + { + ClientApi.INSTANCE.renderFadeOpaque( + mcModelViewMatrix, + mcProjectionMatrix, + frameTime, + ClientLevelWrapper.getWrapper(this.level) + ); + } + else if (renderType.equals(RenderType.tripwire())) + { + ClientApi.INSTANCE.renderFade( + mcModelViewMatrix, + mcProjectionMatrix, + frameTime, + ClientLevelWrapper.getWrapper(this.level) + ); + } + if (Config.Client.Advanced.Debugging.lodOnlyMode.get()) { callback.cancel();