From ccc99709dbae2916a641131278fab17482f53e95 Mon Sep 17 00:00:00 2001 From: techno-sam <77073745+techno-sam@users.noreply.github.com> Date: Tue, 2 Sep 2025 10:15:33 +0200 Subject: [PATCH] fix sky decrease propagation --- .../mixin/ChunkSkyLightProviderMixin.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/ChunkSkyLightProviderMixin.java b/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/ChunkSkyLightProviderMixin.java index eddb2b1..3ba5c94 100644 --- a/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/ChunkSkyLightProviderMixin.java +++ b/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/ChunkSkyLightProviderMixin.java @@ -93,6 +93,39 @@ public abstract class ChunkSkyLightProviderMixin original, @Local(name = "k", ordinal = 2) int k) { + // k is the old light level at blockPos + BlockState state = getStateForLighting(scratchPos.set(blockPos)); + int luminance = CrystallineBlocks.getSkyLightLevel(state); + + if (luminance < k) { + original.call(instance, blockPos, flags); + } + + if (luminance > 0) { + enqueueIncrease(blockPos, QueueEntry.increaseLightFromEmission(luminance, isTrivialForLighting(state))); + } + } + + @WrapOperation(method = "propagateDecrease", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/chunk/light/ChunkSkyLightProvider;propagateFromEmptySections(JLnet/minecraft/util/math/Direction;IZI)V")) + private void decreaseTakesLightIntoAccount2(ChunkSkyLightProvider instance, long blockPos, Direction direction, + int lightLevel, boolean shouldIncrease, int emptySections, + Operation original, @Local(name = "k", ordinal = 2) int k) { + // k is the old light level at blockPos + BlockState state = getStateForLighting(scratchPos.set(blockPos)); + int luminance = CrystallineBlocks.getSkyLightLevel(state); + + if (luminance < k) { + original.call(instance, blockPos, direction, lightLevel, shouldIncrease, emptySections); + } + + if (luminance > 0) { + original.call(instance, blockPos, direction, luminance, true, emptySections); + } + } + @Inject(method = "propagateLight", at = @At("RETURN")) private void propagateCrystallineSkyLight(ChunkPos chunkPos, CallbackInfo ci) { LightSourceView lightSourceView = this.chunkProvider.getChunk(chunkPos.x, chunkPos.z);