From 698d2f363a1e2e350f4ccc348d2eeec42f8a6816 Mon Sep 17 00:00:00 2001 From: FalsePattern Date: Sat, 9 Nov 2024 21:43:33 +0100 Subject: [PATCH] fix weird black spots in the world --- .../lumi/internal/ArrayHelper.java | 9 ++++++++ .../common/ExtendedBlockStorageMixin.java | 21 ++++--------------- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/falsepattern/lumi/internal/ArrayHelper.java b/src/main/java/com/falsepattern/lumi/internal/ArrayHelper.java index 998daa9..60b0129 100644 --- a/src/main/java/com/falsepattern/lumi/internal/ArrayHelper.java +++ b/src/main/java/com/falsepattern/lumi/internal/ArrayHelper.java @@ -26,8 +26,17 @@ import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import net.minecraft.world.chunk.NibbleArray; public class ArrayHelper { + public static boolean isEmpty(@Nullable NibbleArray arr) { + if (arr == null) { + return true; + } + return isZero(arr.data); + } @Contract(pure = true) public static boolean isZero(byte @NotNull [] arr) { for (int i = 0; i < arr.length; i++) { diff --git a/src/main/java/com/falsepattern/lumi/internal/mixin/mixins/common/ExtendedBlockStorageMixin.java b/src/main/java/com/falsepattern/lumi/internal/mixin/mixins/common/ExtendedBlockStorageMixin.java index 6bc4278..f3b309e 100644 --- a/src/main/java/com/falsepattern/lumi/internal/mixin/mixins/common/ExtendedBlockStorageMixin.java +++ b/src/main/java/com/falsepattern/lumi/internal/mixin/mixins/common/ExtendedBlockStorageMixin.java @@ -24,6 +24,7 @@ package com.falsepattern.lumi.internal.mixin.mixins.common; +import com.falsepattern.lumi.internal.ArrayHelper; import lombok.val; import net.minecraft.world.EnumSkyBlock; import net.minecraft.world.chunk.NibbleArray; @@ -189,26 +190,12 @@ public boolean isEmpty() { return false; if (lumi$isDirty) { - val blockLightEqual = lumi$checkLightArrayEqual(blocklightArray, EnumSkyBlock.Block); - val skyLightEqual = lumi$checkLightArrayEqual(skylightArray, EnumSkyBlock.Sky); - lumi$isTrivial = blockLightEqual && skyLightEqual; + val blockLightEmpty = ArrayHelper.isEmpty(blocklightArray); + val skyLightEmpty = ArrayHelper.isEmpty(skylightArray); + lumi$isTrivial = blockLightEmpty && skyLightEmpty; lumi$isDirty = false; } return lumi$isTrivial; } - - @Unique - private boolean lumi$checkLightArrayEqual(NibbleArray storage, EnumSkyBlock baseLightType) { - if (storage == null) - return true; - - val expectedValue = (byte) baseLightType.defaultLightValue; - val data = storage.data; - for (val value : data) - if (value != expectedValue) - return false; - - return true; - } }