From 084de2b3f1cb690ce19be3a3bf7bee6cf77d7175 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Fri, 10 Oct 2025 07:44:47 -0500 Subject: [PATCH] Fix double pass fading (sodium still breaks it) --- .../client/MixinChunkSectionsToRender.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinChunkSectionsToRender.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinChunkSectionsToRender.java index de9848e3b..1a78c3bc9 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinChunkSectionsToRender.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinChunkSectionsToRender.java @@ -45,13 +45,8 @@ public class MixinChunkSectionsToRender // needs to fire at HEAD otherwise it will be canceled by Sodium @Inject(at = @At("HEAD"), method = "renderGroup") - private void renderGroup(ChunkSectionLayerGroup chunkSectionLayerGroup, CallbackInfo ci) + private void renderDeferredLayer(ChunkSectionLayerGroup chunkSectionLayerGroup, CallbackInfo ci) { - if (!ClientApi.RENDER_STATE.canRender()) // TODO is this needed? - { - return; - } - ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, Minecraft.getInstance().levelRenderer.level); @@ -63,8 +58,23 @@ public class MixinChunkSectionsToRender { ClientApi.INSTANCE.renderDeferredLodsForShaders(); } - } + + // canceled by sodium, but there isn't a better way to handle it right now + // https://github.com/CaffeineMC/sodium/blob/dev/common/src/main/java/net/caffeinemc/mods/sodium/mixin/core/render/world/ChunkSectionsToRenderMixin.java + @Inject(at = @At("RETURN"), method = "renderGroup") + private void renderOpaqueFade(ChunkSectionLayerGroup chunkSectionLayerGroup, CallbackInfo ci) + { + ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, Minecraft.getInstance().levelRenderer.level); + + + if (chunkSectionLayerGroup == ChunkSectionLayerGroup.OPAQUE) + { + ClientApi.INSTANCE.renderFadeOpaque(); + } + } + + } #endif