From 3a2a5dcc05011d1d2b4711e89736d173821220ba Mon Sep 17 00:00:00 2001 From: Spottedleaf Date: Mon, 16 Oct 2023 06:55:59 -0700 Subject: [PATCH] Remove unused skyLightSources There is no point in initialising the sources in Starlight, as we do not use them. Additionally, they are not saved to disk so we do not need them. Maintaining and initialising them is not a negligible cost, which is why they are being removed. --- .../starlight/chunk/ChunkAccessMixin.java | 37 +++++++++++++++++++ .../starlight/chunk/LevelChunkMixin.java | 19 ++++++++++ .../starlight/chunk/ProtoChunkMixin.java | 19 ++++++++++ 3 files changed, 75 insertions(+) diff --git a/src/main/java/ca/spottedleaf/moonrise/mixin/starlight/chunk/ChunkAccessMixin.java b/src/main/java/ca/spottedleaf/moonrise/mixin/starlight/chunk/ChunkAccessMixin.java index b8d3317..50f9d28 100644 --- a/src/main/java/ca/spottedleaf/moonrise/mixin/starlight/chunk/ChunkAccessMixin.java +++ b/src/main/java/ca/spottedleaf/moonrise/mixin/starlight/chunk/ChunkAccessMixin.java @@ -3,12 +3,22 @@ package ca.spottedleaf.moonrise.mixin.starlight.chunk; import ca.spottedleaf.moonrise.patches.starlight.chunk.StarlightChunk; import ca.spottedleaf.moonrise.patches.starlight.light.SWMRNibbleArray; import net.minecraft.world.level.chunk.ChunkAccess; +import net.minecraft.world.level.lighting.ChunkSkyLightSources; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ChunkAccess.class) public abstract class ChunkAccessMixin implements StarlightChunk { + @Shadow + protected ChunkSkyLightSources skyLightSources; + + @Unique private volatile SWMRNibbleArray[] blockNibbles; @@ -60,4 +70,31 @@ public abstract class ChunkAccessMixin implements StarlightChunk { public void setBlockEmptinessMap(final boolean[] emptinessMap) { this.blockEmptinessMap = emptinessMap; } + + /** + * @reason Remove unused skylight sources + * @author Spottedleaf + */ + @Inject( + method = "", + at = @At( + value = "RETURN" + ) + ) + private void nullSources(final CallbackInfo ci) { + this.skyLightSources = null; + } + + /** + * @reason Remove unused skylight sources + * @author Spottedleaf + */ + @Redirect( + method = "initializeLightSources", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/level/lighting/ChunkSkyLightSources;fillFrom(Lnet/minecraft/world/level/chunk/ChunkAccess;)V" + ) + ) + private void skipInit(final ChunkSkyLightSources instance, final ChunkAccess chunkAccess) {} } \ No newline at end of file diff --git a/src/main/java/ca/spottedleaf/moonrise/mixin/starlight/chunk/LevelChunkMixin.java b/src/main/java/ca/spottedleaf/moonrise/mixin/starlight/chunk/LevelChunkMixin.java index 5e1597e..ef3232e 100644 --- a/src/main/java/ca/spottedleaf/moonrise/mixin/starlight/chunk/LevelChunkMixin.java +++ b/src/main/java/ca/spottedleaf/moonrise/mixin/starlight/chunk/LevelChunkMixin.java @@ -3,6 +3,7 @@ package ca.spottedleaf.moonrise.mixin.starlight.chunk; import ca.spottedleaf.moonrise.patches.starlight.chunk.StarlightChunk; import ca.spottedleaf.moonrise.patches.starlight.light.StarLightEngine; import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Level; import net.minecraft.world.level.chunk.LevelChunk; @@ -10,10 +11,12 @@ import net.minecraft.world.level.chunk.LevelChunkSection; import net.minecraft.world.level.chunk.ProtoChunk; import net.minecraft.world.level.chunk.UpgradeData; import net.minecraft.world.level.levelgen.blending.BlendingData; +import net.minecraft.world.level.lighting.ChunkSkyLightSources; import net.minecraft.world.ticks.LevelChunkTicks; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(LevelChunk.class) @@ -46,4 +49,20 @@ public abstract class LevelChunkMixin implements StarlightChunk { this.setBlockNibbles(StarLightEngine.getFilledEmptyLight(level)); this.setSkyNibbles(StarLightEngine.getFilledEmptyLight(level)); } + + /** + * @reason Remove unused skylight sources + * @author Spottedleaf + */ + @Redirect( + method = "setBlockState", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/level/lighting/ChunkSkyLightSources;update(Lnet/minecraft/world/level/BlockGetter;III)Z" + ) + ) + private boolean skipLightSources(final ChunkSkyLightSources instance, final BlockGetter blockGetter, + final int x, final int y, final int z) { + return false; + } } diff --git a/src/main/java/ca/spottedleaf/moonrise/mixin/starlight/chunk/ProtoChunkMixin.java b/src/main/java/ca/spottedleaf/moonrise/mixin/starlight/chunk/ProtoChunkMixin.java index 9126b62..25785bf 100644 --- a/src/main/java/ca/spottedleaf/moonrise/mixin/starlight/chunk/ProtoChunkMixin.java +++ b/src/main/java/ca/spottedleaf/moonrise/mixin/starlight/chunk/ProtoChunkMixin.java @@ -3,6 +3,7 @@ package ca.spottedleaf.moonrise.mixin.starlight.chunk; import ca.spottedleaf.moonrise.patches.starlight.chunk.StarlightChunk; import ca.spottedleaf.moonrise.patches.starlight.light.StarLightEngine; import net.minecraft.core.Registry; +import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.chunk.ImposterProtoChunk; @@ -10,10 +11,12 @@ import net.minecraft.world.level.chunk.LevelChunkSection; import net.minecraft.world.level.chunk.ProtoChunk; import net.minecraft.world.level.chunk.UpgradeData; import net.minecraft.world.level.levelgen.blending.BlendingData; +import net.minecraft.world.level.lighting.ChunkSkyLightSources; import net.minecraft.world.ticks.ProtoChunkTicks; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ProtoChunk.class) @@ -34,4 +37,20 @@ public abstract class ProtoChunkMixin implements StarlightChunk { this.setBlockNibbles(StarLightEngine.getFilledEmptyLight(levelHeightAccessor)); this.setSkyNibbles(StarLightEngine.getFilledEmptyLight(levelHeightAccessor)); } + + /** + * @reason Remove unused skylight sources + * @author Spottedleaf + */ + @Redirect( + method = "setBlockState", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/level/lighting/ChunkSkyLightSources;update(Lnet/minecraft/world/level/BlockGetter;III)Z" + ) + ) + private boolean skipLightSources(final ChunkSkyLightSources instance, final BlockGetter blockGetter, + final int x, final int y, final int z) { + return false; + } }