diff options
Diffstat (limited to 'src')
5 files changed, 21 insertions, 48 deletions
diff --git a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java index b398e9b6..52c44082 100644 --- a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java +++ b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java @@ -26,6 +26,7 @@ import de.hysky.skyblocker.utils.NEURepoManager; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.chat.ChatMessageListener; import de.hysky.skyblocker.utils.discord.DiscordRPCManager; +import de.hysky.skyblocker.utils.render.RenderHelper; import de.hysky.skyblocker.utils.render.culling.OcclusionCulling; import de.hysky.skyblocker.utils.render.gui.ContainerSolverManager; import de.hysky.skyblocker.utils.render.title.TitleContainer; @@ -113,6 +114,7 @@ public class SkyblockerMod implements ClientModInitializer { MuseumItemCache.init(); SecretsTracker.init(); ApiUtils.init(); + RenderHelper.init(); containerSolverManager.init(); statusBarTracker.init(); Scheduler.INSTANCE.scheduleCyclic(Utils::update, 20); diff --git a/src/main/java/de/hysky/skyblocker/mixin/AfterTranslucentMixin.java b/src/main/java/de/hysky/skyblocker/mixin/AfterTranslucentMixin.java deleted file mode 100644 index 99ba30e1..00000000 --- a/src/main/java/de/hysky/skyblocker/mixin/AfterTranslucentMixin.java +++ /dev/null @@ -1,35 +0,0 @@ -package de.hysky.skyblocker.mixin; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; - -import com.llamalad7.mixinextras.sugar.Share; -import com.llamalad7.mixinextras.sugar.ref.LocalBooleanRef; - -import de.hysky.skyblocker.utils.render.RenderHelper; -import dev.cbyrne.betterinject.annotations.Inject; -import net.minecraft.client.render.BufferBuilderStorage; -import net.minecraft.client.render.WorldRenderer; - -/** - * Injects after Fabric's After Translucent world render event - */ -@Mixin(value = WorldRenderer.class, priority = 2000) -public class AfterTranslucentMixin { - @Shadow - private BufferBuilderStorage bufferBuilders; - - @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/ParticleManager;renderParticles(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider$Immediate;Lnet/minecraft/client/render/LightmapTextureManager;Lnet/minecraft/client/render/Camera;F)V")) - private void onRenderParticles(@Share("renderedParticles") LocalBooleanRef renderedParticles) { - renderedParticles.set(true); - } - - @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;push()V")) - private void beforeClouds(@Share("renderedParticles") LocalBooleanRef renderedParticles) { - if (renderedParticles.get()) { - renderedParticles.set(false); - RenderHelper.drawGlobalObjectsAfterAfterTranslucent(bufferBuilders.getEntityVertexConsumers()); - } - } -} diff --git a/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java b/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java index 1058d94c..b64a8404 100644 --- a/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java +++ b/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java @@ -3,20 +3,23 @@ package de.hysky.skyblocker.utils.render; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.logging.LogUtils; +import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.mixin.accessor.BeaconBlockEntityRendererInvoker; import de.hysky.skyblocker.utils.render.culling.OcclusionCulling; import de.hysky.skyblocker.utils.render.title.Title; import de.hysky.skyblocker.utils.render.title.TitleContainer; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; +import net.fabricmc.fabric.api.event.Event; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.render.*; import net.minecraft.client.render.VertexFormat.DrawMode; -import net.minecraft.client.render.block.entity.BeaconBlockEntityRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.sound.SoundEvents; import net.minecraft.text.OrderedText; import net.minecraft.text.Text; +import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Box; import net.minecraft.util.math.Vec3d; @@ -32,11 +35,17 @@ import org.slf4j.Logger; public class RenderHelper { private static final Logger LOGGER = LogUtils.getLogger(); + private static final Identifier TRANSLUCENT_DRAW = new Identifier(SkyblockerMod.NAMESPACE, "translucent_draw"); private static final MethodHandle SCHEDULE_DEFERRED_RENDER_TASK = getDeferredRenderTaskHandle(); private static final Vec3d ONE = new Vec3d(1, 1, 1); private static final int MAX_OVERWORLD_BUILD_HEIGHT = 319; private static final MinecraftClient client = MinecraftClient.getInstance(); + public static void init() { + WorldRenderEvents.AFTER_TRANSLUCENT.addPhaseOrdering(Event.DEFAULT_PHASE, TRANSLUCENT_DRAW); + WorldRenderEvents.AFTER_TRANSLUCENT.register(TRANSLUCENT_DRAW, RenderHelper::drawTranslucents); + } + public static void renderFilledThroughWallsWithBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { renderFilledThroughWalls(context, pos, colorComponents, alpha); renderBeaconBeam(context, pos, colorComponents); @@ -247,14 +256,12 @@ public class RenderHelper { matrices.pop(); } - public static void drawGlobalObjectsAfterAfterTranslucent(VertexConsumerProvider.Immediate immediate) { - //Filled Blocks - immediate.draw(SRenderLayers.getFilled()); - immediate.draw(SRenderLayers.getFilledThroughWalls()); - - //Beacon Beams - immediate.draw(RenderLayer.getBeaconBeam(BeaconBlockEntityRenderer.BEAM_TEXTURE, false)); - immediate.draw(RenderLayer.getBeaconBeam(BeaconBlockEntityRenderer.BEAM_TEXTURE, true)); + /** + * This is called after all {@link WorldRenderEvents#AFTER_TRANSLUCENT} listeners have been called so that we can draw all remaining render layers. + */ + private static void drawTranslucents(WorldRenderContext context) { + //Draw all render layers that haven't been drawn yet - drawing a specific layer does nothing and idk why + ((VertexConsumerProvider.Immediate) context.consumers()).draw(); } public static void runOnRenderThread(Runnable runnable) { diff --git a/src/main/java/de/hysky/skyblocker/utils/render/SRenderLayers.java b/src/main/java/de/hysky/skyblocker/utils/render/SRenderLayers.java index 4c1beb1f..e2725767 100644 --- a/src/main/java/de/hysky/skyblocker/utils/render/SRenderLayers.java +++ b/src/main/java/de/hysky/skyblocker/utils/render/SRenderLayers.java @@ -13,12 +13,12 @@ import net.minecraft.client.render.VertexFormat.DrawMode; import net.minecraft.client.render.VertexFormats; public class SRenderLayers { - private static final Transparency DEFAULT_TRANSPARENCY = new Transparency("default", () -> { + private static final Transparency DEFAULT_TRANSPARENCY = new Transparency("default_transparency", () -> { RenderSystem.enableBlend(); RenderSystem.defaultBlendFunc(); }, () -> RenderSystem.disableBlend()); - private static final MultiPhase FILLED = RenderLayer.of("filled", VertexFormats.POSITION_COLOR, DrawMode.TRIANGLE_STRIP, 131072, false, true, MultiPhaseParameters.builder() + private static final MultiPhase FILLED = RenderLayer.of("filled", VertexFormats.POSITION_COLOR, DrawMode.TRIANGLE_STRIP, RenderLayer.CUTOUT_BUFFER_SIZE, false, true, MultiPhaseParameters.builder() .program(RenderPhase.COLOR_PROGRAM) .cull(Cull.DISABLE_CULLING) .layering(RenderPhase.POLYGON_OFFSET_LAYERING) @@ -26,7 +26,7 @@ public class SRenderLayers { .depthTest(DepthTest.LEQUAL_DEPTH_TEST) .build(false)); - private static final MultiPhase FILLED_THROUGH_WALLS = RenderLayer.of("filled_through_walls", VertexFormats.POSITION_COLOR, DrawMode.TRIANGLE_STRIP, 131072, false, true, MultiPhaseParameters.builder() + private static final MultiPhase FILLED_THROUGH_WALLS = RenderLayer.of("filled_through_walls", VertexFormats.POSITION_COLOR, DrawMode.TRIANGLE_STRIP, RenderLayer.CUTOUT_BUFFER_SIZE, false, true, MultiPhaseParameters.builder() .program(RenderPhase.COLOR_PROGRAM) .cull(Cull.DISABLE_CULLING) .layering(RenderPhase.POLYGON_OFFSET_LAYERING) diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index 5a72f8c6..4e7bfe16 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -5,7 +5,6 @@ "compatibilityLevel": "JAVA_17", "client": [ "AbstractInventoryScreenMixin", - "AfterTranslucentMixin", "ArmorTrimMixin", "BatEntityMixin", "ClientPlayerEntityMixin", |