diff --git a/build.gradle b/build.gradle index ac270fca..807e3777 100644 --- a/build.gradle +++ b/build.gradle @@ -99,6 +99,7 @@ dependencies { modCompileOnly("team.chisel.ctm:CTM:${ctm_version}") modCompileOnly("curse.maven:supermartijncore-454372:4455378") modCompileOnly("curse.maven:valhesiastructures-347488:3476252") + modCompileOnly files("deps/starlight-1.2.jar") } tasks.withType(JavaCompile) { diff --git a/deps/starlight-1.2.jar b/deps/starlight-1.2.jar new file mode 100644 index 00000000..303f24b4 Binary files /dev/null and b/deps/starlight-1.2.jar differ diff --git a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java index 7037ea3b..99654b7d 100644 --- a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java +++ b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java @@ -46,6 +46,7 @@ public class ModernFixEarlyConfig { this.addMixinRule("perf.compress_blockstate", false); this.addMixinRule("bugfix.concurrency", true); this.addMixinRule("bugfix.edge_chunk_not_saved", true); + this.addMixinRule("bugfix.starlight_emptiness", modPresent("starlight")); this.addMixinRule("bugfix.packet_leak", false); this.addMixinRule("perf.dynamic_structure_manager", true); this.addMixinRule("bugfix.mc218112", true); diff --git a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/starlight_emptiness/StarLightEngineMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/starlight_emptiness/StarLightEngineMixin.java new file mode 100644 index 00000000..e20ded13 --- /dev/null +++ b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/starlight_emptiness/StarLightEngineMixin.java @@ -0,0 +1,34 @@ +package org.embeddedt.modernfix.mixin.bugfix.starlight_emptiness; + +import ca.spottedleaf.starlight.common.light.StarLightEngine; +import net.minecraft.world.level.chunk.ChunkAccess; +import net.minecraft.world.level.chunk.LevelChunkSection; +import net.minecraft.world.level.chunk.LightChunkGetter; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(StarLightEngine.class) +public abstract class StarLightEngineMixin { + @Shadow protected abstract LevelChunkSection getChunkSection(int chunkX, int chunkY, int chunkZ); + + @Shadow @Final protected int minSection; + + @Inject(method = "handleEmptySectionChanges(Lnet/minecraft/world/level/chunk/LightChunkGetter;Lnet/minecraft/world/level/chunk/ChunkAccess;[Ljava/lang/Boolean;Z)[Z", + at = @At(value = "INVOKE", target = "Lca/spottedleaf/starlight/common/light/StarLightEngine;setEmptinessMapCache(II[Z)V", + shift = At.Shift.AFTER)) + private void lazyInitMapIfNeeded(LightChunkGetter lightAccess, ChunkAccess chunk, Boolean[] emptinessChanges, boolean unlit, CallbackInfoReturnable cir) { + final int chunkX = chunk.getPos().x; + final int chunkZ = chunk.getPos().z; + for (int sectionIndex = (emptinessChanges.length - 1); sectionIndex >= 0; --sectionIndex) { + if(emptinessChanges[sectionIndex] == null) { + final LevelChunkSection section = this.getChunkSection(chunkX, sectionIndex + this.minSection, chunkZ); + emptinessChanges[sectionIndex] = section == null || section.isEmpty() ? Boolean.TRUE : Boolean.FALSE; + } + } + } +} diff --git a/src/main/resources/modernfix.mixins.json b/src/main/resources/modernfix.mixins.json index 5d575391..3615fb6b 100644 --- a/src/main/resources/modernfix.mixins.json +++ b/src/main/resources/modernfix.mixins.json @@ -7,6 +7,7 @@ "refmap": "modernfix.refmap.json", "mixins": [ "bugfix.edge_chunk_not_saved.ChunkManagerMixin", + "bugfix.starlight_emptiness.StarLightEngineMixin", "perf.dynamic_structure_manager.StructureManagerMixin", "bugfix.tf_cme_on_load.TwilightForestModMixin", "bugfix.refinedstorage.te_bug.ItemExternalStorageProviderMixin",