From e89edfefe71a0f521573a59dc9e1b73646930320 Mon Sep 17 00:00:00 2001 From: michiel1106 Date: Fri, 24 Oct 2025 22:29:55 +0200 Subject: [PATCH 01/13] Initial updates + some other small immediate fixes --- build.gradle | 2 +- .../lightoverlay/common/LightOverlayTicker.java | 2 +- .../fabric/mixin/MixinClientConnection.java | 4 ++-- fabric/src/main/resources/fabric.mod.json | 2 +- gradle.properties | 16 ++++++++-------- gradle/wrapper/gradle-wrapper.properties | 2 +- .../neoforge/mixin/MixinClientConnection.java | 4 ++-- .../neoforge/mixin/MixinDebugRenderer.java | 3 ++- 8 files changed, 18 insertions(+), 17 deletions(-) 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/LightOverlayTicker.java b/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayTicker.java index a1e3136..e95a82d 100644 --- a/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayTicker.java +++ b/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayTicker.java @@ -119,7 +119,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; 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/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 2f6d551..41976dd 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.6 <=1.21.8", "java": ">=17", "architectury": ">=13-", "cloth-config2": ">=15-" diff --git a/gradle.properties b/gradle.properties index 674759d..c5832c6 100755 --- a/gradle.properties +++ b/gradle.properties @@ -2,16 +2,16 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false mod_version=12.0.0 -minecraft_version=1.21 +minecraft_version=1.21.6 -architectury_version=13.0.6 +architectury_version=17.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.128.2+1.21.6 +cloth_config_version=19.0.147 +modmenu_version=15.0.0 # 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.6.20-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/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..239e9db 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, CallbackInfo ci) { LightOverlayImpl.renderWorldLast(arg); } } From abbc6fd61d20c7d05bc70786e9c901463c2c1a8e Mon Sep 17 00:00:00 2001 From: michiel1106 Date: Fri, 24 Oct 2025 22:41:16 +0200 Subject: [PATCH 02/13] Shader fixed --- .../common/LightOverlayRenderer.java | 29 +++++++------------ 1 file changed, 11 insertions(+), 18 deletions(-) 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..4e71c56 100644 --- a/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayRenderer.java +++ b/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayRenderer.java @@ -8,10 +8,7 @@ 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 net.minecraft.client.renderer.culling.Frustum; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -29,20 +26,16 @@ import java.util.function.Function; public class LightOverlayRenderer implements Consumer { - private static final Function LINE = Util.memoize( - double_ -> RenderType.create( - "light_overlay_lines", - DefaultVertexFormat.POSITION_COLOR, - VertexFormat.Mode.DEBUG_LINES, - 256, - 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 static final Function LINE = Util.memoize((width) -> { + RenderType.CompositeState compositeState = RenderType.CompositeState.builder() + .setLineState(new RenderStateShard.LineStateShard(OptionalDouble.of(width))) + .setLayeringState(RenderStateShard.VIEW_OFFSET_Z_LAYERING) + .setOutputState(RenderStateShard.ITEM_ENTITY_TARGET) + .createCompositeState(false); + + return RenderType.create("light_overlay_lines", 1536, RenderPipelines.LINES, compositeState); + }); private final Minecraft minecraft = Minecraft.getInstance(); public Frustum frustum; From f1d33f513c848f814eb065d488fab46f4ce3e625 Mon Sep 17 00:00:00 2001 From: michiel1106 Date: Fri, 24 Oct 2025 22:51:48 +0200 Subject: [PATCH 03/13] Another shader fix --- .../lightoverlay/common/LightOverlayRenderer.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) 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 4e71c56..e157a73 100644 --- a/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayRenderer.java +++ b/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayRenderer.java @@ -67,7 +67,9 @@ public void accept(PoseStack poses) { } private void renderLevels(PoseStack poses, Camera camera, BlockPos playerPos, int playerPosX, int playerPosY, int playerPosZ, int chunkRange, CollisionContext collisionContext) { - RenderSystem.depthMask(true); + // Depth mask seems to be entirely removed from about 1.21.6 and onwards so im hoping that it doesnt affect the result. + + // RenderSystem.depthMask(true); BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); BlockPos.MutableBlockPos downMutable = new BlockPos.MutableBlockPos(); MultiBufferSource.BufferSource source = Minecraft.getInstance().renderBuffers().bufferSource(); @@ -86,7 +88,7 @@ private void renderLevels(PoseStack poses, Camera camera, BlockPos playerPos, in } } } - RenderSystem.enableDepthTest(); + // RenderSystem.enableDepthTest(); } public void renderLevel(PoseStack poses, MultiBufferSource.BufferSource source, Camera camera, Level world, BlockPos pos, BlockPos down, byte level, CollisionContext collisionContext) { @@ -154,10 +156,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) { From ecb1c63fb59138183798a4cdce90d0c46bb5cb2f Mon Sep 17 00:00:00 2001 From: michiel1106 Date: Fri, 24 Oct 2025 23:08:39 +0200 Subject: [PATCH 04/13] Final port. Everything seems to work. --- .../lightoverlay/common/LightOverlayRenderer.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) 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 e157a73..e43ed54 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; @@ -9,6 +10,7 @@ import net.minecraft.client.gui.Font; import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.renderer.*; +import static net.minecraft.client.renderer.RenderPipelines.LINES_SNIPPET; import net.minecraft.client.renderer.culling.Frustum; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -26,6 +28,7 @@ import java.util.function.Function; public class LightOverlayRenderer implements Consumer { + private static final RenderPipeline LINES_RENDER_PIPELINE = RenderPipeline.builder(LINES_SNIPPET).withLocation("pipeline/lines").withDepthTestFunction(DepthTestFunction.LEQUAL_DEPTH_TEST).build(); private static final Function LINE = Util.memoize((width) -> { RenderType.CompositeState compositeState = RenderType.CompositeState.builder() @@ -34,7 +37,7 @@ public class LightOverlayRenderer implements Consumer { .setOutputState(RenderStateShard.ITEM_ENTITY_TARGET) .createCompositeState(false); - return RenderType.create("light_overlay_lines", 1536, RenderPipelines.LINES, compositeState); + return RenderType.create("light_overlay_lines", 1536, LINES_RENDER_PIPELINE, compositeState); }); private final Minecraft minecraft = Minecraft.getInstance(); @@ -67,9 +70,6 @@ public void accept(PoseStack poses) { } private void renderLevels(PoseStack poses, Camera camera, BlockPos playerPos, int playerPosX, int playerPosY, int playerPosZ, int chunkRange, CollisionContext collisionContext) { - // Depth mask seems to be entirely removed from about 1.21.6 and onwards so im hoping that it doesnt affect the result. - - // RenderSystem.depthMask(true); BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); BlockPos.MutableBlockPos downMutable = new BlockPos.MutableBlockPos(); MultiBufferSource.BufferSource source = Minecraft.getInstance().renderBuffers().bufferSource(); @@ -88,7 +88,6 @@ 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) { From 7efe3c8e505541f05884270c980522e3974e5f07 Mon Sep 17 00:00:00 2001 From: michiel1106 Date: Fri, 24 Oct 2025 23:18:49 +0200 Subject: [PATCH 05/13] Should probably use proper RenderStates instead of just choosing whatever --- .../shedaniel/lightoverlay/common/LightOverlayRenderer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 e43ed54..c688595 100644 --- a/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayRenderer.java +++ b/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayRenderer.java @@ -33,8 +33,8 @@ public class LightOverlayRenderer implements Consumer { private static final Function LINE = Util.memoize((width) -> { RenderType.CompositeState compositeState = RenderType.CompositeState.builder() .setLineState(new RenderStateShard.LineStateShard(OptionalDouble.of(width))) - .setLayeringState(RenderStateShard.VIEW_OFFSET_Z_LAYERING) - .setOutputState(RenderStateShard.ITEM_ENTITY_TARGET) + .setLayeringState(RenderStateShard.NO_LAYERING) + .setOutputState(RenderStateShard.MAIN_TARGET) .createCompositeState(false); return RenderType.create("light_overlay_lines", 1536, LINES_RENDER_PIPELINE, compositeState); From a3f65ad59324a8133a0678a756b9ecf38c7c9758 Mon Sep 17 00:00:00 2001 From: michiel1106 Date: Sat, 25 Oct 2025 01:00:35 +0200 Subject: [PATCH 06/13] redid shader again. made it use withCull instead of the depth thing --- .../common/LightOverlayRenderer.java | 38 +++++++++++-------- .../neoforge/LightOverlayImpl.java | 5 +++ 2 files changed, 27 insertions(+), 16 deletions(-) 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 c688595..bc67814 100644 --- a/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayRenderer.java +++ b/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayRenderer.java @@ -11,6 +11,7 @@ import net.minecraft.client.player.LocalPlayer; 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; @@ -28,17 +29,22 @@ import java.util.function.Function; public class LightOverlayRenderer implements Consumer { - private static final RenderPipeline LINES_RENDER_PIPELINE = RenderPipeline.builder(LINES_SNIPPET).withLocation("pipeline/lines").withDepthTestFunction(DepthTestFunction.LEQUAL_DEPTH_TEST).build(); - - private static final Function LINE = Util.memoize((width) -> { - RenderType.CompositeState compositeState = RenderType.CompositeState.builder() - .setLineState(new RenderStateShard.LineStateShard(OptionalDouble.of(width))) - .setLayeringState(RenderStateShard.NO_LAYERING) - .setOutputState(RenderStateShard.MAIN_TARGET) - .createCompositeState(false); - - return RenderType.create("light_overlay_lines", 1536, LINES_RENDER_PIPELINE, compositeState); - }); + 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", + 256, + LINE_PIPELINE, + RenderType.CompositeState.builder() + .setLineState(new RenderStateShard.LineStateShard(OptionalDouble.of(double_))) + .createCompositeState(false) + ) + ); private final Minecraft minecraft = Minecraft.getInstance(); public Frustum frustum; @@ -51,13 +57,13 @@ public LightOverlayRenderer(LightOverlayTicker ticker) { @Override public void accept(PoseStack poses) { if (LightOverlay.enabled) { - LocalPlayer playerEntity = minecraft.player; + LocalPlayer playerEntity = Minecraft.getInstance().player; BlockPos playerPos = new BlockPos(playerEntity.getBlockX(), playerEntity.getBlockY(), playerEntity.getBlockZ()); int playerPosX = playerPos.getX() >> 4; int playerPosY = playerPos.getY() >> 5; int playerPosZ = playerPos.getZ() >> 4; CollisionContext collisionContext = CollisionContext.of(playerEntity); - Camera camera = minecraft.gameRenderer.getMainCamera(); + Camera camera = Minecraft.getInstance().gameRenderer.getMainCamera(); int chunkRange = LightOverlay.getChunkRange(); if (LightOverlay.showNumber) { @@ -83,7 +89,7 @@ private void renderLevels(PoseStack poses, Camera camera, BlockPos playerPos, in if (mutable.closerThan(playerPos, LightOverlay.reach)) { if (isFrustumVisible(mutable.getX(), mutable.getY(), mutable.getZ(), mutable.getX() + 1, mutable.getX() + 1, mutable.getX() + 1)) { downMutable.set(mutable.getX(), mutable.getY() - 1, mutable.getZ()); - renderLevel(poses, source, camera, minecraft.level, mutable, downMutable, objectEntry.getByteValue(), collisionContext); + renderLevel(poses, source, camera, Minecraft.getInstance().level, mutable, downMutable, objectEntry.getByteValue(), collisionContext); } } } @@ -92,7 +98,7 @@ private void renderLevels(PoseStack poses, Camera camera, BlockPos playerPos, in public void renderLevel(PoseStack poses, MultiBufferSource.BufferSource source, Camera camera, Level world, BlockPos pos, BlockPos down, byte level, CollisionContext collisionContext) { String text = String.valueOf(level); - Font font = minecraft.font; + Font font = Minecraft.getInstance().font; double cameraX = camera.getPosition().x; double cameraY = camera.getPosition().y; VoxelShape upperOutlineShape = world.getBlockState(down).getShape(world, down, collisionContext); @@ -132,7 +138,7 @@ private void renderCrosses(PoseStack poses, Camera camera, BlockPos playerPos, i case LightOverlay.CROSS_YELLOW -> LightOverlay.yellowColor; default -> LightOverlay.secondaryColor; }; - renderCross(poses.last().pose(), buffer, camera, minecraft.level, mutable, color, collisionContext); + renderCross(poses.last().pose(), buffer, camera, Minecraft.getInstance().level, mutable, color, collisionContext); } } } 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; From 3f8b7d5576be66ca4052f88b7e2aa9d0e8d2c658 Mon Sep 17 00:00:00 2001 From: michiel1106 Date: Sat, 25 Oct 2025 19:24:06 +0200 Subject: [PATCH 07/13] Reverted failed idea for a fix for neoforge crashing --- .../common/LightOverlayRenderer.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) 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 bc67814..569b0a8 100644 --- a/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayRenderer.java +++ b/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayRenderer.java @@ -57,13 +57,13 @@ public LightOverlayRenderer(LightOverlayTicker ticker) { @Override public void accept(PoseStack poses) { if (LightOverlay.enabled) { - LocalPlayer playerEntity = Minecraft.getInstance().player; + LocalPlayer playerEntity = minecraft.player; BlockPos playerPos = new BlockPos(playerEntity.getBlockX(), playerEntity.getBlockY(), playerEntity.getBlockZ()); int playerPosX = playerPos.getX() >> 4; int playerPosY = playerPos.getY() >> 5; int playerPosZ = playerPos.getZ() >> 4; CollisionContext collisionContext = CollisionContext.of(playerEntity); - Camera camera = Minecraft.getInstance().gameRenderer.getMainCamera(); + Camera camera = minecraft.gameRenderer.getMainCamera(); int chunkRange = LightOverlay.getChunkRange(); if (LightOverlay.showNumber) { @@ -71,14 +71,14 @@ 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) { 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)) { @@ -89,7 +89,7 @@ private void renderLevels(PoseStack poses, Camera camera, BlockPos playerPos, in if (mutable.closerThan(playerPos, LightOverlay.reach)) { if (isFrustumVisible(mutable.getX(), mutable.getY(), mutable.getZ(), mutable.getX() + 1, mutable.getX() + 1, mutable.getX() + 1)) { downMutable.set(mutable.getX(), mutable.getY() - 1, mutable.getZ()); - renderLevel(poses, source, camera, Minecraft.getInstance().level, mutable, downMutable, objectEntry.getByteValue(), collisionContext); + renderLevel(poses, source, camera, minecraft.level, mutable, downMutable, objectEntry.getByteValue(), collisionContext); } } } @@ -98,7 +98,7 @@ private void renderLevels(PoseStack poses, Camera camera, BlockPos playerPos, in public void renderLevel(PoseStack poses, MultiBufferSource.BufferSource source, Camera camera, Level world, BlockPos pos, BlockPos down, byte level, CollisionContext collisionContext) { String text = String.valueOf(level); - Font font = Minecraft.getInstance().font; + Font font = minecraft.font; double cameraX = camera.getPosition().x; double cameraY = camera.getPosition().y; VoxelShape upperOutlineShape = world.getBlockState(down).getShape(world, down, collisionContext); @@ -118,7 +118,7 @@ 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(); + MultiBufferSource.BufferSource source = minecraft.renderBuffers().bufferSource(); VertexConsumer buffer = source.getBuffer(LINE.apply((double) LightOverlay.lineWidth)); BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); @@ -138,7 +138,7 @@ private void renderCrosses(PoseStack poses, Camera camera, BlockPos playerPos, i case LightOverlay.CROSS_YELLOW -> LightOverlay.yellowColor; default -> LightOverlay.secondaryColor; }; - renderCross(poses.last().pose(), buffer, camera, Minecraft.getInstance().level, mutable, color, collisionContext); + renderCross(poses.last().pose(), buffer, camera, minecraft.level, mutable, color, collisionContext); } } } From b82fdddc1b83f3c1de53a5c06a6cddcd256df3b7 Mon Sep 17 00:00:00 2001 From: michiel1106 Date: Sat, 25 Oct 2025 19:43:34 +0200 Subject: [PATCH 08/13] Fixed neoforge not working. Wonky client being null or something. --- .../shedaniel/lightoverlay/common/LightOverlayRenderer.java | 6 +++++- .../shedaniel/lightoverlay/common/LightOverlayTicker.java | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) 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 569b0a8..4570e49 100644 --- a/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayRenderer.java +++ b/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayRenderer.java @@ -46,7 +46,7 @@ public class LightOverlayRenderer implements Consumer { ) ); - private final Minecraft minecraft = Minecraft.getInstance(); + public Frustum frustum; public LightOverlayTicker ticker; @@ -56,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()); @@ -76,6 +77,7 @@ public void accept(PoseStack poses) { } private void renderLevels(PoseStack poses, Camera camera, BlockPos playerPos, int playerPosX, int playerPosY, int playerPosZ, int chunkRange, CollisionContext collisionContext) { + Minecraft minecraft = Minecraft.getInstance(); BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); BlockPos.MutableBlockPos downMutable = new BlockPos.MutableBlockPos(); MultiBufferSource.BufferSource source = minecraft.renderBuffers().bufferSource(); @@ -97,6 +99,7 @@ private void renderLevels(PoseStack poses, Camera camera, BlockPos playerPos, in } 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,6 +121,7 @@ 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) { + 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(); 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 e95a82d..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 -> { @@ -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)) { From 240ede0b4102b5ed1f2e952085653e41ab1cddba Mon Sep 17 00:00:00 2001 From: michiel1106 Date: Sun, 26 Oct 2025 10:18:18 +0100 Subject: [PATCH 09/13] initial 1.21.9 branch --- fabric/src/main/resources/fabric.mod.json | 2 +- gradle.properties | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 41976dd..2fb2418 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.6 <=1.21.8", + "minecraft": ">=1.21.9 <=1.21.10", "java": ">=17", "architectury": ">=13-", "cloth-config2": ">=15-" diff --git a/gradle.properties b/gradle.properties index c5832c6..cef5ce3 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.6 +mod_version=13.0.0 +minecraft_version=1.21.9 -architectury_version=17.0.6 +architectury_version=18.0.5 # fabric fabric_loader_version=0.17.3 -fabric_api_version=0.128.2+1.21.6 -cloth_config_version=19.0.147 -modmenu_version=15.0.0 +fabric_api_version=0.134.0+1.21.9 +cloth_config_version=20.0.148 +modmenu_version=16.0.0-rc.1 # forge forge_version=56.0.9 -neoforge_version=21.6.20-beta \ No newline at end of file +neoforge_version=21.9.16-beta \ No newline at end of file From 5b9d05c872b92f900e0c7885c04400d59933d28e Mon Sep 17 00:00:00 2001 From: michiel1106 Date: Sun, 26 Oct 2025 11:58:53 +0100 Subject: [PATCH 10/13] Initial port. Removed world render events as they dont exist anymore. --- .../lightoverlay/common/LightOverlay.java | 2 +- .../lightoverlay/fabric/LightOverlayImpl.java | 11 +++++++---- .../fabric/mixin/MixinDebugRenderer.java | 18 ++++++++++++++++++ .../fabric/mixin/MixinLevelRenderer.java | 17 +++++++++++++++++ .../main/resources/lightoverlay.mixins.json | 4 +++- .../neoforge/mixin/MixinDebugRenderer.java | 2 +- .../neoforge/mixin/MixinLevelRenderer.java | 4 ++-- 7 files changed, 49 insertions(+), 9 deletions(-) create mode 100644 fabric/src/main/java/me/shedaniel/lightoverlay/fabric/mixin/MixinDebugRenderer.java create mode 100644 fabric/src/main/java/me/shedaniel/lightoverlay/fabric/mixin/MixinLevelRenderer.java 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..d242c6a 100644 --- a/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlay.java +++ b/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlay.java @@ -198,7 +198,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/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/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/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/neoforge/src/main/java/me/shedaniel/lightoverlay/neoforge/mixin/MixinDebugRenderer.java b/neoforge/src/main/java/me/shedaniel/lightoverlay/neoforge/mixin/MixinDebugRenderer.java index 239e9db..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 @@ -13,7 +13,7 @@ @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, 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; } } From 5c8733f26e3b7f97e5924fd5820128ae04098240 Mon Sep 17 00:00:00 2001 From: michiel1106 Date: Wed, 29 Oct 2025 09:06:27 +0100 Subject: [PATCH 11/13] 1.21.10 port --- .../common/DebugEntryLightOverlay.java | 22 +++++++++++++++++++ .../lightoverlay/common/LightOverlay.java | 14 ++---------- fabric/src/main/resources/fabric.mod.json | 2 +- gradle.properties | 8 +++---- 4 files changed, 29 insertions(+), 17 deletions(-) create mode 100644 common/src/main/java/me/shedaniel/lightoverlay/common/DebugEntryLightOverlay.java 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 d242c6a..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); } diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 2fb2418..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.9 <=1.21.10", + "minecraft": "1.21.10", "java": ">=17", "architectury": ">=13-", "cloth-config2": ">=15-" diff --git a/gradle.properties b/gradle.properties index cef5ce3..60a8ef5 100755 --- a/gradle.properties +++ b/gradle.properties @@ -2,16 +2,16 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false mod_version=13.0.0 -minecraft_version=1.21.9 +minecraft_version=1.21.10 -architectury_version=18.0.5 +architectury_version=18.0.6 # fabric fabric_loader_version=0.17.3 -fabric_api_version=0.134.0+1.21.9 +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=56.0.9 -neoforge_version=21.9.16-beta \ No newline at end of file +neoforge_version=21.10.38-beta \ No newline at end of file From 68348c14fb54c57a45cdcb506fd8ef6992e9fe84 Mon Sep 17 00:00:00 2001 From: michiel1106 Date: Sun, 22 Feb 2026 00:53:04 +0100 Subject: [PATCH 12/13] 1.21.11 port --- build.gradle | 2 +- .../lightoverlay/common/LightOverlay.java | 10 +-- .../common/LightOverlayRenderer.java | 81 +++++++------------ .../fabric/mixin/MixinDebugRenderer.java | 9 ++- fabric/src/main/resources/fabric.mod.json | 2 +- gradle.properties | 16 ++-- 6 files changed, 50 insertions(+), 70 deletions(-) diff --git a/build.gradle b/build.gradle index a96ae93..8fae14c 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.11-SNAPSHOT" apply false + id "dev.architectury.loom" version "1.13-SNAPSHOT" apply false } architectury { 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 9a3692d..1e9e2f3 100644 --- a/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlay.java +++ b/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlay.java @@ -9,7 +9,7 @@ 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.resources.*; import net.minecraft.util.Mth; import java.io.File; @@ -46,11 +46,11 @@ public static void register() { configFile = new File(Platform.getConfigFolder().toFile(), "lightoverlay.properties"); loadConfig(configFile); - enableOverlay = createKeyBinding(ResourceLocation.fromNamespaceAndPath("lightoverlay", "enable_overlay"), InputConstants.Type.KEYSYM, 296, "key.lightoverlay.category"); + enableOverlay = createKeyBinding(Identifier.fromNamespaceAndPath("lightoverlay", "enable_overlay"), InputConstants.Type.KEYSYM, 296, "key.lightoverlay.category"); KeyMappingRegistry.register(enableOverlay); registerDebugRenderer(renderer); - DebugScreenEntries.register(ResourceLocation.fromNamespaceAndPath("lightoverlay", "debug"), new DebugEntryLightOverlay()); + DebugScreenEntries.register(Identifier.fromNamespaceAndPath("lightoverlay", "debug"), new DebugEntryLightOverlay()); ClientTickEvent.CLIENT_POST.register(ticker::tick); } @@ -187,8 +187,8 @@ public static void saveConfig(File file) throws IOException { fos.close(); } - private static KeyMapping createKeyBinding(ResourceLocation id, InputConstants.Type type, int code, String category) { - return new KeyMapping("key." + id.getNamespace() + "." + id.getPath(), type, code, KeyMapping.Category.register(ResourceLocation.fromNamespaceAndPath("lightoverlay", category))); + private static KeyMapping createKeyBinding(Identifier id, InputConstants.Type type, int code, String category) { + return new KeyMapping("key." + id.getNamespace() + "." + id.getPath(), type, code, KeyMapping.Category.register(Identifier.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 4570e49..a8a0e67 100644 --- a/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayRenderer.java +++ b/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayRenderer.java @@ -4,7 +4,6 @@ import com.mojang.blaze3d.platform.*; import com.mojang.blaze3d.vertex.*; import it.unimi.dsi.fastutil.longs.Long2ByteMap; -import net.minecraft.Util; import net.minecraft.client.Camera; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; @@ -13,11 +12,13 @@ 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.client.renderer.rendertype.*; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.util.Mth; +import net.minecraft.gizmos.*; +import net.minecraft.util.*; import net.minecraft.world.level.Level; -import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import org.joml.Matrix4f; @@ -36,15 +37,14 @@ public class LightOverlayRenderer implements Consumer { .withCull(false) .withVertexFormat(DefaultVertexFormat.POSITION_COLOR, VertexFormat.Mode.DEBUG_LINES) .build(); - private static final Function LINE = Util.memoize( + private static final Function LINE = Util.memoize( double_ -> RenderType.create("light_overlay_lines", - 256, - LINE_PIPELINE, - RenderType.CompositeState.builder() - .setLineState(new RenderStateShard.LineStateShard(OptionalDouble.of(double_))) - .createCompositeState(false) + RenderSetup.builder(LINE_PIPELINE).createRenderSetup() ) ); + + + public Frustum frustum; @@ -68,15 +68,15 @@ public void accept(PoseStack poses) { int chunkRange = LightOverlay.getChunkRange(); if (LightOverlay.showNumber) { - renderLevels(poses, camera, playerPos, playerPosX, playerPosY, playerPosZ, chunkRange, collisionContext); + renderLevels(playerPos, playerPosX, playerPosY, playerPosZ, chunkRange); } else { - renderCrosses(poses, camera, playerPos, playerPosX, playerPosY, playerPosZ, chunkRange, collisionContext); + renderCrosses(playerPos, playerPosX, playerPosY, playerPosZ, chunkRange, collisionContext); } minecraft.renderBuffers().bufferSource().endLastBatch(); } } - private void renderLevels(PoseStack poses, Camera camera, BlockPos playerPos, int playerPosX, int playerPosY, int playerPosZ, int chunkRange, CollisionContext collisionContext) { + private void renderLevels(BlockPos playerPos, int playerPosX, int playerPosY, int playerPosZ, int chunkRange) { Minecraft minecraft = Minecraft.getInstance(); BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); BlockPos.MutableBlockPos downMutable = new BlockPos.MutableBlockPos(); @@ -91,36 +91,20 @@ private void renderLevels(PoseStack poses, Camera camera, BlockPos playerPos, in if (mutable.closerThan(playerPos, LightOverlay.reach)) { if (isFrustumVisible(mutable.getX(), mutable.getY(), mutable.getZ(), mutable.getX() + 1, mutable.getX() + 1, mutable.getX() + 1)) { downMutable.set(mutable.getX(), mutable.getY() - 1, mutable.getZ()); - renderLevel(poses, source, camera, minecraft.level, mutable, downMutable, objectEntry.getByteValue(), collisionContext); + renderLevel(downMutable, objectEntry.getByteValue()); } } } } } - - public void renderLevel(PoseStack poses, MultiBufferSource.BufferSource source, Camera camera, Level world, BlockPos pos, BlockPos down, byte level, CollisionContext collisionContext) { - Minecraft minecraft = Minecraft.getInstance(); + + public void renderLevel(BlockPos down, byte level) { String text = String.valueOf(level); - Font font = minecraft.font; - double cameraX = camera.getPosition().x; - double cameraY = camera.getPosition().y; - VoxelShape upperOutlineShape = world.getBlockState(down).getShape(world, down, collisionContext); - if (!upperOutlineShape.isEmpty()) - cameraY += 1 - upperOutlineShape.max(Direction.Axis.Y); - double cameraZ = camera.getPosition().z; - poses.pushPose(); - poses.translate(pos.getX() + 0.5 - cameraX, pos.getY() - cameraY + 0.005, pos.getZ() + 0.5 - cameraZ); - poses.mulPose(new Quaternionf().fromAxisAngleDeg(1, 0, 0, 90)); -// poses.glNormal3f(0.0F, 1.0F, 0.0F); - float size = 0.07F; - poses.scale(-size, -size, size); - float float_3 = (float) (-font.width(text)) / 2.0F + 0.4f; - font.drawInBatch(text, float_3, -3.5f, level > LightOverlay.higherCrossLevel ? 0xff042404 : (LightOverlay.lowerCrossLevel >= 0 && level > LightOverlay.lowerCrossLevel ? 0xff0066ff : 0xff731111), - false, poses.last().pose(), source, Font.DisplayMode.SEE_THROUGH, 0, 15728880); - poses.popPose(); + int color = level > LightOverlay.higherCrossLevel ? 0xff042404 : (LightOverlay.lowerCrossLevel >= 0 && level > LightOverlay.lowerCrossLevel ? 0xff0066ff : 0xff731111); + Gizmos.billboardText(text, Vec3.atLowerCornerWithOffset(down, 0.5, 1.3 + 1 * 0.2, 0.5), TextGizmo.Style.forColorAndCentered(color).withScale(1)); } - private void renderCrosses(PoseStack poses, Camera camera, BlockPos playerPos, int playerPosX, int playerPosY, int playerPosZ, int chunkRange, CollisionContext collisionContext) { + private void renderCrosses(BlockPos playerPos, int playerPosX, int playerPosY, int playerPosZ, int chunkRange, CollisionContext collisionContext) { Minecraft minecraft = Minecraft.getInstance(); MultiBufferSource.BufferSource source = minecraft.renderBuffers().bufferSource(); VertexConsumer buffer = source.getBuffer(LINE.apply((double) LightOverlay.lineWidth)); @@ -142,33 +126,26 @@ private void renderCrosses(PoseStack poses, Camera camera, BlockPos playerPos, i case LightOverlay.CROSS_YELLOW -> LightOverlay.yellowColor; default -> LightOverlay.secondaryColor; }; - renderCross(poses.last().pose(), buffer, camera, minecraft.level, mutable, color, collisionContext); + renderCross(minecraft.level, mutable, color, collisionContext); } } } } } - - public void renderCross(Matrix4f pose, VertexConsumer builder, Camera camera, Level world, BlockPos pos, int color, CollisionContext collisionContext) { - float cameraX = (float) camera.getPosition().x; - float cameraY = (float) camera.getPosition().y - .005f; + + public void renderCross(Level world, BlockPos pos, int color, CollisionContext collisionContext) { float blockOffset = 0; VoxelShape upperOutlineShape = world.getBlockState(pos).getShape(world, pos, collisionContext); if (!upperOutlineShape.isEmpty()) { - blockOffset += upperOutlineShape.max(Direction.Axis.Y); + blockOffset += (float) upperOutlineShape.max(Direction.Axis.Y); } - float cameraZ = (float) camera.getPosition().z; - - int red = (color >> 16) & 255; - int green = (color >> 8) & 255; - int blue = color & 255; - 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).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); + color |= 0xFF000000; + + float x = pos.getX()/* - cameraX*/; + float y = pos.getY()/* - cameraY*/ + blockOffset; + float z = pos.getZ()/* - cameraZ*/; + Gizmos.line(new Vec3(x + .01f, y, z + .01f),new Vec3(x + .99f, y, z + .99f),color,LightOverlay.lineWidth); + Gizmos.line(new Vec3(x + .99f, y, z + .01f),new Vec3(x + .01f, y, z + .99f),color,LightOverlay.lineWidth); } public boolean isFrustumVisible(double minX, double minY, double minZ, double maxX, double maxY, double maxZ) { 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 index 152f9bc..710a205 100644 --- a/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/mixin/MixinDebugRenderer.java +++ b/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/mixin/MixinDebugRenderer.java @@ -2,17 +2,20 @@ import com.mojang.blaze3d.vertex.*; import me.shedaniel.lightoverlay.fabric.*; +import net.minecraft.client.*; import net.minecraft.client.renderer.*; import net.minecraft.client.renderer.culling.*; import net.minecraft.client.renderer.debug.*; +import net.minecraft.client.renderer.rendertype.*; 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); + @Inject(method = "emitGizmos", at = @At("HEAD")) + private void render(Frustum frustum, double d, double e, double f, float g, CallbackInfo ci) { + LightOverlayImpl.renderWorldLast(null); + } } diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 8e5f22a..a1d6d9b 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.10", + "minecraft": "1.21.11", "java": ">=17", "architectury": ">=13-", "cloth-config2": ">=15-" diff --git a/gradle.properties b/gradle.properties index 60a8ef5..76170d0 100755 --- a/gradle.properties +++ b/gradle.properties @@ -1,17 +1,17 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false -mod_version=13.0.0 -minecraft_version=1.21.10 +mod_version=14.0.0 +minecraft_version=1.21.11 -architectury_version=18.0.6 +architectury_version=19.0.1 # fabric -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 +fabric_loader_version=0.18.4 +fabric_api_version=0.141.3+1.21.11 +cloth_config_version=21.11.153 +modmenu_version=17.0.0-beta.2 # forge forge_version=56.0.9 -neoforge_version=21.10.38-beta \ No newline at end of file +neoforge_version=21.11.38-beta \ No newline at end of file From d98afd4d6d87be51e775bfe2d34549e3658d6ab0 Mon Sep 17 00:00:00 2001 From: michiel1106 Date: Sun, 22 Feb 2026 00:56:49 +0100 Subject: [PATCH 13/13] 1.21.11 port --- .../lightoverlay/neoforge/mixin/MixinDebugRenderer.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 c93e1fa..bbf031c 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 @@ -12,8 +12,8 @@ @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); + @Inject(method = "emitGizmos", at = @At("HEAD")) + private void render(Frustum arg, double d, double e, double f, float g, CallbackInfo ci) { + LightOverlayImpl.renderWorldLast(null); } }