diff --git a/build.gradle b/build.gradle index f5a37ab..a96ae93 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ plugins { id "architectury-plugin" version "3.4-SNAPSHOT" - id "dev.architectury.loom" version "1.6-SNAPSHOT" apply false + id "dev.architectury.loom" version "1.11-SNAPSHOT" apply false } architectury { diff --git a/common/src/main/java/me/shedaniel/lightoverlay/common/DebugEntryLightOverlay.java b/common/src/main/java/me/shedaniel/lightoverlay/common/DebugEntryLightOverlay.java new file mode 100644 index 0000000..8c86c24 --- /dev/null +++ b/common/src/main/java/me/shedaniel/lightoverlay/common/DebugEntryLightOverlay.java @@ -0,0 +1,22 @@ +package me.shedaniel.lightoverlay.common; + +import static me.shedaniel.lightoverlay.common.LightOverlay.*; +import net.minecraft.client.gui.components.debug.*; +import net.minecraft.world.level.*; +import net.minecraft.world.level.chunk.*; +import org.jetbrains.annotations.*; + +public class DebugEntryLightOverlay implements DebugScreenEntry { + @Override + public void display(DebugScreenDisplayer debugScreenDisplayer, @Nullable Level level, @Nullable LevelChunk levelChunk, @Nullable LevelChunk levelChunk2) { + if (enabled) { + if (caching) { + debugScreenDisplayer.addLine(String.format("[Light Overlay] Chunks to queue: %02d", ticker.POS.size())); + } else { + debugScreenDisplayer.addLine("[Light Overlay] Enabled"); + } + } else { + debugScreenDisplayer.addLine("[Light Overlay] Disabled"); + } + } +} diff --git a/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlay.java b/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlay.java index 3752887..9a3692d 100644 --- a/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlay.java +++ b/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlay.java @@ -8,6 +8,7 @@ import dev.architectury.platform.Platform; import dev.architectury.registry.client.keymappings.KeyMappingRegistry; import net.minecraft.client.KeyMapping; +import net.minecraft.client.gui.components.debug.*; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -49,18 +50,7 @@ public static void register() { KeyMappingRegistry.register(enableOverlay); registerDebugRenderer(renderer); - - ClientGuiEvent.DEBUG_TEXT_LEFT.register(list -> { - if (enabled) { - if (caching) { - list.add(String.format("[Light Overlay] Chunks to queue: %02d", ticker.POS.size())); - } else { - list.add("[Light Overlay] Enabled"); - } - } else { - list.add("[Light Overlay] Disabled"); - } - }); + DebugScreenEntries.register(ResourceLocation.fromNamespaceAndPath("lightoverlay", "debug"), new DebugEntryLightOverlay()); ClientTickEvent.CLIENT_POST.register(ticker::tick); } @@ -198,7 +188,7 @@ public static void saveConfig(File file) throws IOException { } private static KeyMapping createKeyBinding(ResourceLocation id, InputConstants.Type type, int code, String category) { - return new KeyMapping("key." + id.getNamespace() + "." + id.getPath(), type, code, category); + return new KeyMapping("key." + id.getNamespace() + "." + id.getPath(), type, code, KeyMapping.Category.register(ResourceLocation.fromNamespaceAndPath("lightoverlay", category))); } diff --git a/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayRenderer.java b/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayRenderer.java index 37b8c9f..4570e49 100644 --- a/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayRenderer.java +++ b/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayRenderer.java @@ -1,6 +1,7 @@ package me.shedaniel.lightoverlay.common; -import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.pipeline.*; +import com.mojang.blaze3d.platform.*; import com.mojang.blaze3d.vertex.*; import it.unimi.dsi.fastutil.longs.Long2ByteMap; import net.minecraft.Util; @@ -8,10 +9,9 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.player.LocalPlayer; -import net.minecraft.client.renderer.GameRenderer; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderStateShard; -import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.*; +import static net.minecraft.client.renderer.RenderPipelines.LINES_SNIPPET; +import static net.minecraft.client.renderer.RenderPipelines.MATRICES_PROJECTION_SNIPPET; import net.minecraft.client.renderer.culling.Frustum; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -29,22 +29,24 @@ import java.util.function.Function; public class LightOverlayRenderer implements Consumer { + private static final RenderPipeline LINE_PIPELINE = RenderPipeline.builder(MATRICES_PROJECTION_SNIPPET) + .withLocation("pipeline/debug_line_strip") + .withVertexShader("core/position_color") + .withFragmentShader("core/position_color") + .withCull(false) + .withVertexFormat(DefaultVertexFormat.POSITION_COLOR, VertexFormat.Mode.DEBUG_LINES) + .build(); private static final Function LINE = Util.memoize( - double_ -> RenderType.create( - "light_overlay_lines", - DefaultVertexFormat.POSITION_COLOR, - VertexFormat.Mode.DEBUG_LINES, + double_ -> RenderType.create("light_overlay_lines", 256, + LINE_PIPELINE, RenderType.CompositeState.builder() - .setShaderState(RenderStateShard.POSITION_COLOR_SHADER) .setLineState(new RenderStateShard.LineStateShard(OptionalDouble.of(double_))) - .setTransparencyState(RenderStateShard.NO_TRANSPARENCY) - .setCullState(RenderStateShard.NO_CULL) .createCompositeState(false) ) ); - private final Minecraft minecraft = Minecraft.getInstance(); + public Frustum frustum; public LightOverlayTicker ticker; @@ -54,6 +56,7 @@ public LightOverlayRenderer(LightOverlayTicker ticker) { @Override public void accept(PoseStack poses) { + Minecraft minecraft = Minecraft.getInstance(); if (LightOverlay.enabled) { LocalPlayer playerEntity = minecraft.player; BlockPos playerPos = new BlockPos(playerEntity.getBlockX(), playerEntity.getBlockY(), playerEntity.getBlockZ()); @@ -69,15 +72,15 @@ public void accept(PoseStack poses) { } else { renderCrosses(poses, camera, playerPos, playerPosX, playerPosY, playerPosZ, chunkRange, collisionContext); } - Minecraft.getInstance().renderBuffers().bufferSource().endLastBatch(); + minecraft.renderBuffers().bufferSource().endLastBatch(); } } private void renderLevels(PoseStack poses, Camera camera, BlockPos playerPos, int playerPosX, int playerPosY, int playerPosZ, int chunkRange, CollisionContext collisionContext) { - RenderSystem.depthMask(true); + Minecraft minecraft = Minecraft.getInstance(); BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); BlockPos.MutableBlockPos downMutable = new BlockPos.MutableBlockPos(); - MultiBufferSource.BufferSource source = Minecraft.getInstance().renderBuffers().bufferSource(); + MultiBufferSource.BufferSource source = minecraft.renderBuffers().bufferSource(); for (Map.Entry entry : ticker.CHUNK_MAP.entrySet()) { CubicChunkPos chunkPos = entry.getKey(); if (LightOverlay.caching && (Mth.abs(chunkPos.x - playerPosX) > chunkRange || Mth.abs(chunkPos.y - playerPosY) > Math.max(1, chunkRange >> 1) || Mth.abs(chunkPos.z - playerPosZ) > chunkRange)) { @@ -93,10 +96,10 @@ private void renderLevels(PoseStack poses, Camera camera, BlockPos playerPos, in } } } - RenderSystem.enableDepthTest(); } public void renderLevel(PoseStack poses, MultiBufferSource.BufferSource source, Camera camera, Level world, BlockPos pos, BlockPos down, byte level, CollisionContext collisionContext) { + Minecraft minecraft = Minecraft.getInstance(); String text = String.valueOf(level); Font font = minecraft.font; double cameraX = camera.getPosition().x; @@ -118,7 +121,8 @@ public void renderLevel(PoseStack poses, MultiBufferSource.BufferSource source, } private void renderCrosses(PoseStack poses, Camera camera, BlockPos playerPos, int playerPosX, int playerPosY, int playerPosZ, int chunkRange, CollisionContext collisionContext) { - MultiBufferSource.BufferSource source = Minecraft.getInstance().renderBuffers().bufferSource(); + Minecraft minecraft = Minecraft.getInstance(); + MultiBufferSource.BufferSource source = minecraft.renderBuffers().bufferSource(); VertexConsumer buffer = source.getBuffer(LINE.apply((double) LightOverlay.lineWidth)); BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); @@ -161,10 +165,10 @@ public void renderCross(Matrix4f pose, VertexConsumer builder, Camera camera, Le float x = pos.getX() - cameraX; float y = pos.getY() - cameraY + blockOffset; float z = pos.getZ() - cameraZ; - builder.addVertex(pose, x + .01f, y, z + .01f).setColor(red, green, blue, 255); - builder.addVertex(pose, x + .99f, y, z + .99f).setColor(red, green, blue, 255); - builder.addVertex(pose, x + .99f, y, z + .01f).setColor(red, green, blue, 255); - builder.addVertex(pose, x + .01f, y, z + .99f).setColor(red, green, blue, 255); + builder.addVertex(pose, x + .01f, y, z + .01f).setColor(red, green, blue, 255).setNormal(0.0f, 1.0f, 0.0f); + builder.addVertex(pose, x + .99f, y, z + .99f).setColor(red, green, blue, 255).setNormal(0.0f, 1.0f, 0.0f); + builder.addVertex(pose, x + .99f, y, z + .01f).setColor(red, green, blue, 255).setNormal(0.0f, 1.0f, 0.0f); + builder.addVertex(pose, x + .01f, y, z + .99f).setColor(red, green, blue, 255).setNormal(0.0f, 1.0f, 0.0f); } public boolean isFrustumVisible(double minX, double minY, double minZ, double maxX, double maxY, double maxZ) { diff --git a/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayTicker.java b/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayTicker.java index a1e3136..d86c646 100644 --- a/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayTicker.java +++ b/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayTicker.java @@ -36,7 +36,6 @@ import java.util.function.Supplier; public class LightOverlayTicker { - private final Minecraft minecraft = Minecraft.getInstance(); private long ticks = 0; private static int threadNumber = 0; private static final ThreadPoolExecutor EXECUTOR = (ThreadPoolExecutor) Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors(), r -> { @@ -119,7 +118,7 @@ public void tick(Minecraft minecraft) { } else { assert Minecraft.getInstance().level != null; var height = Mth.ceil(Minecraft.getInstance().level.getHeight() / 32.0); - var start = Math.floorDiv(Minecraft.getInstance().level.getMinBuildHeight(), 32); + var start = Math.floorDiv(Minecraft.getInstance().level.getMinY(), 32); int playerPosX = ((int) player.getX()) >> 4; int playerPosY = ((int) player.getY()) >> 5; int playerPosZ = ((int) player.getZ()) >> 4; @@ -206,6 +205,7 @@ public void tick(Minecraft minecraft) { } private void processChunk(CubicChunkPos pos, int playerPosX, int playerPosY, int playerPosZ, CollisionContext context) { + Minecraft minecraft = Minecraft.getInstance(); CALCULATING_POS.remove(pos); int chunkRange = LightOverlay.getChunkRange(); if (Mth.abs(pos.x - playerPosX) > chunkRange || Mth.abs(pos.y - playerPosY) > Math.max(1, chunkRange >> 1) || Mth.abs(pos.z - playerPosZ) > chunkRange || POS.contains(pos)) { diff --git a/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/LightOverlayImpl.java b/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/LightOverlayImpl.java index c73c7f8..c5803f5 100644 --- a/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/LightOverlayImpl.java +++ b/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/LightOverlayImpl.java @@ -1,17 +1,20 @@ package me.shedaniel.lightoverlay.fabric; import com.mojang.blaze3d.vertex.PoseStack; -import me.shedaniel.lightoverlay.common.LightOverlay; -import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; +import me.shedaniel.lightoverlay.common.*; import java.util.function.Consumer; public class LightOverlayImpl { + public static LightOverlayRenderer renderer = LightOverlay.renderer; public static Consumer debugRenderer = poses -> {}; public static void init() { LightOverlay.register(); - WorldRenderEvents.AFTER_SETUP.register(context -> LightOverlay.renderer.frustum = context.frustum()); - WorldRenderEvents.BEFORE_DEBUG_RENDER.register(context -> debugRenderer.accept(context.matrixStack())); + } + + + public static void renderWorldLast(PoseStack stack) { + debugRenderer.accept(stack); } } diff --git a/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/mixin/MixinClientConnection.java b/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/mixin/MixinClientConnection.java index 446f8af..1ffc4c3 100644 --- a/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/mixin/MixinClientConnection.java +++ b/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/mixin/MixinClientConnection.java @@ -28,7 +28,7 @@ private static void handlePacket(Packet packet, PacketListener listener, Call LightOverlay.queueChunkAndNear(new CubicChunkPos(p.getPos())); } else if (packet instanceof ClientboundSetChunkCacheCenterPacket p) { var height = Mth.ceil(level.getHeight() / 32.0); - var start = Math.floorDiv(level.getMinBuildHeight(), 32); + var start = Math.floorDiv(level.getMinY(), 32); for (int y = start; y < start + height; y++) { LightOverlay.queueChunkAndNear(new CubicChunkPos(p.getX(), y, p.getZ())); } @@ -36,7 +36,7 @@ private static void handlePacket(Packet packet, PacketListener listener, Call LightOverlay.queueChunkAndNear(new CubicChunkPos(p.sectionPos.getX(), p.sectionPos.getY() >> 1, p.sectionPos.getZ())); } else if (packet instanceof ClientboundLightUpdatePacket p) { var height = Mth.ceil(level.getHeight() / 32.0); - var start = Math.floorDiv(level.getMinBuildHeight(), 32); + var start = Math.floorDiv(level.getMinY(), 32); for (int y = start; y < start + height; y++) { LightOverlay.queueChunk(new CubicChunkPos(p.getX(), y, p.getZ())); } diff --git a/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/mixin/MixinDebugRenderer.java b/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/mixin/MixinDebugRenderer.java new file mode 100644 index 0000000..152f9bc --- /dev/null +++ b/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/mixin/MixinDebugRenderer.java @@ -0,0 +1,18 @@ +package me.shedaniel.lightoverlay.fabric.mixin; + +import com.mojang.blaze3d.vertex.*; +import me.shedaniel.lightoverlay.fabric.*; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.culling.*; +import net.minecraft.client.renderer.debug.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; + +@Mixin(DebugRenderer.class) +public class MixinDebugRenderer { + @Inject(method = "render", at = @At("HEAD")) + private void render(PoseStack arg, Frustum arg2, MultiBufferSource.BufferSource arg3, double d, double e, double f, boolean bl, CallbackInfo ci) { + LightOverlayImpl.renderWorldLast(arg); + } +} diff --git a/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/mixin/MixinLevelRenderer.java b/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/mixin/MixinLevelRenderer.java new file mode 100644 index 0000000..b9cd4e9 --- /dev/null +++ b/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/mixin/MixinLevelRenderer.java @@ -0,0 +1,17 @@ +package me.shedaniel.lightoverlay.fabric.mixin; + +import me.shedaniel.lightoverlay.fabric.*; +import net.minecraft.client.*; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.culling.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; + +@Mixin(LevelRenderer.class) +public class MixinLevelRenderer { + @Inject(method = "cullTerrain", at = @At("HEAD")) + private void setupTerrain(Camera arg, Frustum frustum, boolean bl, CallbackInfo ci) { + LightOverlayImpl.renderer.frustum = frustum; + } +} diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 2f6d551..8e5f22a 100755 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -30,7 +30,7 @@ "depends": { "fabricloader": ">=0.14.11", "fabric-api": "*", - "minecraft": "~1.21", + "minecraft": "1.21.10", "java": ">=17", "architectury": ">=13-", "cloth-config2": ">=15-" diff --git a/fabric/src/main/resources/lightoverlay.mixins.json b/fabric/src/main/resources/lightoverlay.mixins.json index c49d45a..3a8723f 100644 --- a/fabric/src/main/resources/lightoverlay.mixins.json +++ b/fabric/src/main/resources/lightoverlay.mixins.json @@ -5,7 +5,9 @@ "compatibilityLevel": "JAVA_17", "mixins": [], "client": [ - "MixinClientConnection" + "MixinClientConnection", + "MixinDebugRenderer", + "MixinLevelRenderer" ], "injectors": { "defaultRequire": 1 diff --git a/gradle.properties b/gradle.properties index 674759d..60a8ef5 100755 --- a/gradle.properties +++ b/gradle.properties @@ -1,17 +1,17 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false -mod_version=12.0.0 -minecraft_version=1.21 +mod_version=13.0.0 +minecraft_version=1.21.10 -architectury_version=13.0.6 +architectury_version=18.0.6 # fabric -fabric_loader_version=0.15.11 -fabric_api_version=0.100.3+1.21 -cloth_config_version=15.0.127 -modmenu_version=11.0.0 +fabric_loader_version=0.17.3 +fabric_api_version=0.136.0+1.21.10 +cloth_config_version=20.0.148 +modmenu_version=16.0.0-rc.1 # forge -forge_version=50.1.7 -neoforge_version=21.0.114-beta \ No newline at end of file +forge_version=56.0.9 +neoforge_version=21.10.38-beta \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 509c4a2..18362b7 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/neoforge/src/main/java/me/shedaniel/lightoverlay/neoforge/LightOverlayImpl.java b/neoforge/src/main/java/me/shedaniel/lightoverlay/neoforge/LightOverlayImpl.java index d8ad1bb..cfedc8a 100644 --- a/neoforge/src/main/java/me/shedaniel/lightoverlay/neoforge/LightOverlayImpl.java +++ b/neoforge/src/main/java/me/shedaniel/lightoverlay/neoforge/LightOverlayImpl.java @@ -5,6 +5,11 @@ import dev.architectury.utils.EnvExecutor; import me.shedaniel.lightoverlay.common.LightOverlay; import me.shedaniel.lightoverlay.common.LightOverlayRenderer; +import net.minecraft.client.*; +import net.neoforged.api.distmarker.*; +import net.neoforged.bus.api.*; +import net.neoforged.fml.common.*; +import net.neoforged.neoforge.client.event.*; import java.util.function.Consumer; diff --git a/neoforge/src/main/java/me/shedaniel/lightoverlay/neoforge/mixin/MixinClientConnection.java b/neoforge/src/main/java/me/shedaniel/lightoverlay/neoforge/mixin/MixinClientConnection.java index 8ff808f..d9bea26 100644 --- a/neoforge/src/main/java/me/shedaniel/lightoverlay/neoforge/mixin/MixinClientConnection.java +++ b/neoforge/src/main/java/me/shedaniel/lightoverlay/neoforge/mixin/MixinClientConnection.java @@ -31,7 +31,7 @@ private static void handlePacket(Packet packet, PacketListener listener, Callbac LightOverlay.queueChunkAndNear(new CubicChunkPos(p.getPos())); } else if (packet instanceof ClientboundSetChunkCacheCenterPacket p) { var height = Mth.ceil(level.getHeight() / 32.0); - var start = Math.floorDiv(level.getMinBuildHeight(), 32); + var start = Math.floorDiv(level.getMinY(), 32); for (int y = start; y < start + height; y++) { LightOverlay.queueChunkAndNear(new CubicChunkPos(p.getX(), y, p.getZ())); } @@ -39,7 +39,7 @@ private static void handlePacket(Packet packet, PacketListener listener, Callbac LightOverlay.queueChunkAndNear(new CubicChunkPos(p.sectionPos.getX(), p.sectionPos.getY() >> 1, p.sectionPos.getZ())); } else if (packet instanceof ClientboundLightUpdatePacket p) { var height = Mth.ceil(level.getHeight() / 32.0); - var start = Math.floorDiv(level.getMinBuildHeight(), 32); + var start = Math.floorDiv(level.getMinY(), 32); for (int y = start; y < start + height; y++) { LightOverlay.queueChunk(new CubicChunkPos(p.getX(), y, p.getZ())); } diff --git a/neoforge/src/main/java/me/shedaniel/lightoverlay/neoforge/mixin/MixinDebugRenderer.java b/neoforge/src/main/java/me/shedaniel/lightoverlay/neoforge/mixin/MixinDebugRenderer.java index ed04164..c93e1fa 100644 --- a/neoforge/src/main/java/me/shedaniel/lightoverlay/neoforge/mixin/MixinDebugRenderer.java +++ b/neoforge/src/main/java/me/shedaniel/lightoverlay/neoforge/mixin/MixinDebugRenderer.java @@ -3,6 +3,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import me.shedaniel.lightoverlay.neoforge.LightOverlayImpl; import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.culling.*; import net.minecraft.client.renderer.debug.DebugRenderer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -12,7 +13,7 @@ @Mixin(DebugRenderer.class) public class MixinDebugRenderer { @Inject(method = "render", at = @At("HEAD")) - private void render(PoseStack arg, MultiBufferSource.BufferSource arg2, double d, double e, double f, CallbackInfo ci) { + private void render(PoseStack arg, Frustum arg2, MultiBufferSource.BufferSource arg3, double d, double e, double f, boolean bl, CallbackInfo ci) { LightOverlayImpl.renderWorldLast(arg); } } diff --git a/neoforge/src/main/java/me/shedaniel/lightoverlay/neoforge/mixin/MixinLevelRenderer.java b/neoforge/src/main/java/me/shedaniel/lightoverlay/neoforge/mixin/MixinLevelRenderer.java index cb0306f..b03330a 100644 --- a/neoforge/src/main/java/me/shedaniel/lightoverlay/neoforge/mixin/MixinLevelRenderer.java +++ b/neoforge/src/main/java/me/shedaniel/lightoverlay/neoforge/mixin/MixinLevelRenderer.java @@ -11,8 +11,8 @@ @Mixin(LevelRenderer.class) public class MixinLevelRenderer { - @Inject(method = "setupRender", at = @At("HEAD")) - private void setupTerrain(Camera camera, Frustum frustum, boolean bl, boolean bl2, CallbackInfo ci) { + @Inject(method = "cullTerrain", at = @At("HEAD")) + private void setupTerrain(Camera arg, Frustum frustum, boolean bl, CallbackInfo ci) { LightOverlayImpl.renderer.frustum = frustum; } }