From 6d175c4ff97dbfa8e004963e6a46b2b5d2a4185c Mon Sep 17 00:00:00 2001 From: iam4722202468 Date: Sat, 10 Feb 2024 18:02:02 -0500 Subject: [PATCH] expose internal and external lighting --- .../net/minestom/server/instance/Chunk.java | 5 ++++ .../server/instance/DynamicChunk.java | 7 ++++-- .../server/instance/InstanceContainer.java | 7 +----- .../server/instance/LightingChunk.java | 5 ++++ .../server/instance/light/BlockLight.java | 25 ++++++++++++++++--- 5 files changed, 38 insertions(+), 11 deletions(-) diff --git a/src/main/java/net/minestom/server/instance/Chunk.java b/src/main/java/net/minestom/server/instance/Chunk.java index 6d40477eb..7e41f9406 100644 --- a/src/main/java/net/minestom/server/instance/Chunk.java +++ b/src/main/java/net/minestom/server/instance/Chunk.java @@ -315,4 +315,9 @@ public abstract class Chunk implements Block.Getter, Block.Setter, Biome.Getter, protected void unload() { this.loaded = false; } + + /** + * Invalidate the chunk caches + */ + public abstract void invalidate(); } \ No newline at end of file diff --git a/src/main/java/net/minestom/server/instance/DynamicChunk.java b/src/main/java/net/minestom/server/instance/DynamicChunk.java index baf3f03c3..f8b447dfa 100644 --- a/src/main/java/net/minestom/server/instance/DynamicChunk.java +++ b/src/main/java/net/minestom/server/instance/DynamicChunk.java @@ -6,7 +6,6 @@ import net.minestom.server.MinecraftServer; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; import net.minestom.server.entity.Entity; -import net.minestom.server.entity.Player; import net.minestom.server.entity.pathfinding.PFBlock; import net.minestom.server.instance.block.Block; import net.minestom.server.instance.block.BlockHandler; @@ -24,7 +23,6 @@ import net.minestom.server.utils.ArrayUtils; import net.minestom.server.utils.MathUtils; import net.minestom.server.utils.ObjectPool; import net.minestom.server.utils.chunk.ChunkUtils; -import net.minestom.server.utils.validate.Check; import net.minestom.server.world.biomes.Biome; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -209,6 +207,11 @@ public class DynamicChunk extends Chunk { this.entries.clear(); } + @Override + public void invalidate() { + this.chunkCache.invalidate(); + } + private @NotNull ChunkDataPacket createChunkPacket() { final NBTCompound heightmapsNBT = computeHeightmap(); // Data diff --git a/src/main/java/net/minestom/server/instance/InstanceContainer.java b/src/main/java/net/minestom/server/instance/InstanceContainer.java index 2bd1f2f84..bb3569025 100644 --- a/src/main/java/net/minestom/server/instance/InstanceContainer.java +++ b/src/main/java/net/minestom/server/instance/InstanceContainer.java @@ -358,12 +358,7 @@ public class InstanceContainer extends Instance { if (forkChunk != null) { applyFork(forkChunk, sectionModifier); // Update players - if (forkChunk instanceof LightingChunk lightingChunk) { - lightingChunk.chunkCache.invalidate(); - lightingChunk.lightCache.invalidate(); - } else if (forkChunk instanceof DynamicChunk dynamicChunk) { - dynamicChunk.chunkCache.invalidate(); - } + forkChunk.invalidate(); forkChunk.sendChunk(); } else { final long index = ChunkUtils.getChunkIndex(start); diff --git a/src/main/java/net/minestom/server/instance/LightingChunk.java b/src/main/java/net/minestom/server/instance/LightingChunk.java index 43e66424f..cde5b9c8e 100644 --- a/src/main/java/net/minestom/server/instance/LightingChunk.java +++ b/src/main/java/net/minestom/server/instance/LightingChunk.java @@ -80,6 +80,11 @@ public class LightingChunk extends DynamicChunk { Block.LAVA.namespace() ); + public void invalidate() { + this.lightCache.invalidate(); + this.chunkCache.invalidate(); + } + public LightingChunk(@NotNull Instance instance, int chunkX, int chunkZ) { super(instance, chunkX, chunkZ); } diff --git a/src/main/java/net/minestom/server/instance/light/BlockLight.java b/src/main/java/net/minestom/server/instance/light/BlockLight.java index 02601a0e3..8a1c6ec4a 100644 --- a/src/main/java/net/minestom/server/instance/light/BlockLight.java +++ b/src/main/java/net/minestom/server/instance/light/BlockLight.java @@ -9,13 +9,11 @@ import net.minestom.server.instance.Section; import net.minestom.server.instance.block.Block; import net.minestom.server.instance.block.BlockFace; import net.minestom.server.instance.palette.Palette; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; -import java.util.Arrays; import java.util.HashSet; -import java.util.Map; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import static net.minestom.server.instance.light.LightCompute.*; @@ -36,6 +34,27 @@ final class BlockLight implements Light { this.blockPalette = blockPalette; } + @ApiStatus.Internal + public void setInternalLighting(byte[] content) { + this.content = content; + this.isValidBorders = true; + } + + @ApiStatus.Internal + public void setExternalLighting(byte[] content) { + this.contentPropagation = content; + } + + @ApiStatus.Internal + public byte[] getInternalLighting() { + return content; + } + + @ApiStatus.Internal + public byte[] getExternalLighting() { + return contentPropagation; + } + @Override public Set flip() { if (this.contentPropagationSwap != null)