aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/de/hysky/skyblocker/SkyblockerMod.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/AfterTranslucentMixin.java35
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java25
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/render/SRenderLayers.java6
-rw-r--r--src/main/resources/skyblocker.mixins.json1
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",