From 0d31b09f5047a215805ed9237f8eaff06d9612bc Mon Sep 17 00:00:00 2001 From: modmuss <modmuss50@gmail.com> Date: Tue, 11 Feb 2025 16:41:40 +0000 Subject: [PATCH] Fix incorrect HUD z index for sub layers (#4437) Fixes #4435 --- .../fabric/impl/client/rendering/SubLayer.java | 10 ++++++++-- .../mixin/client/rendering/LayeredDrawerAccessor.java | 6 ++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/SubLayer.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/SubLayer.java index 8919572e3..c02c968ff 100644 --- a/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/SubLayer.java +++ b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/SubLayer.java @@ -22,6 +22,8 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.LayeredDrawer; import net.minecraft.client.render.RenderTickCounter; +import net.fabricmc.fabric.mixin.client.rendering.LayeredDrawerAccessor; + /** * A layer that wraps another layered drawer that can be added to {@link net.fabricmc.fabric.api.client.rendering.v1.LayeredDrawerWrapper LayeredDrawerWrapper}. * @@ -30,11 +32,15 @@ import net.minecraft.client.render.RenderTickCounter; * @param delegate the layered drawer to wrap * @param shouldRender a boolean supplier that determines if the layer should render */ -public record SubLayer(LayeredDrawer delegate, BooleanSupplier shouldRender) implements LayeredDrawer.Layer { +public record SubLayer(LayeredDrawer delegate, BooleanSupplier shouldRender, LayeredDrawerAccessor layeredDrawerAccessor) implements LayeredDrawer.Layer { + public SubLayer(LayeredDrawer delegate, BooleanSupplier shouldRender) { + this(delegate, shouldRender, (LayeredDrawerAccessor) delegate); + } + @Override public void render(DrawContext context, RenderTickCounter tickCounter) { if (shouldRender.getAsBoolean()) { - delegate.render(context, tickCounter); + layeredDrawerAccessor.invokeRenderInternal(context, tickCounter); } } } diff --git a/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/LayeredDrawerAccessor.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/LayeredDrawerAccessor.java index 36f6111fe..730054712 100644 --- a/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/LayeredDrawerAccessor.java +++ b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/LayeredDrawerAccessor.java @@ -20,11 +20,17 @@ import java.util.List; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; +import org.spongepowered.asm.mixin.gen.Invoker; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.LayeredDrawer; +import net.minecraft.client.render.RenderTickCounter; @Mixin(LayeredDrawer.class) public interface LayeredDrawerAccessor { @Accessor List<LayeredDrawer.Layer> getLayers(); + + @Invoker("renderInternal") + void invokeRenderInternal(DrawContext context, RenderTickCounter tickCounter); }