diff --git a/sources/src/main/java/io/akarin/server/core/AkarinGlobalConfig.java b/sources/src/main/java/io/akarin/server/core/AkarinGlobalConfig.java index 4bf7665eb..86ddae972 100644 --- a/sources/src/main/java/io/akarin/server/core/AkarinGlobalConfig.java +++ b/sources/src/main/java/io/akarin/server/core/AkarinGlobalConfig.java @@ -274,4 +274,9 @@ public class AkarinGlobalConfig { private static void versionUpdateInterval() { versionUpdateInterval = getSeconds(getString("alternative.version-update-interval", "3600s")) * 1000; // 1 hour } + + public static boolean sendLightOnlyChunkSection; + private static void sendLightOnlyChunkSection() { + sendLightOnlyChunkSection = getBoolean("core.send-light-only-chunk-sections", true); + } } diff --git a/sources/src/main/java/io/akarin/server/mixin/core/MixinChunkSection.java b/sources/src/main/java/io/akarin/server/mixin/core/MixinChunkSection.java new file mode 100644 index 000000000..3a10e0fbc --- /dev/null +++ b/sources/src/main/java/io/akarin/server/mixin/core/MixinChunkSection.java @@ -0,0 +1,18 @@ +package io.akarin.server.mixin.core; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + +import io.akarin.server.core.AkarinGlobalConfig; +import net.minecraft.server.ChunkSection; + +@Mixin(value = ChunkSection.class, remap = false) +public abstract class MixinChunkSection { + @Shadow private int nonEmptyBlockCount; + + @Overwrite // PAIL: isEmpty + public boolean a() { + return AkarinGlobalConfig.sendLightOnlyChunkSection ? false : nonEmptyBlockCount == 0; + } +}