From 00e5e6b2ccd1ea9ef0bd58f9f6eb25542a7d1dea Mon Sep 17 00:00:00 2001 From: TheMode Date: Sat, 6 Nov 2021 06:12:33 +0100 Subject: [PATCH] Improve palette interface Signed-off-by: TheMode --- .../server/instance/DynamicChunk.java | 2 +- .../server/instance/palette/Palette.java | 22 ++++++++++++++----- .../server/instance/palette/PaletteImpl.java | 8 +++---- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/main/java/net/minestom/server/instance/DynamicChunk.java b/src/main/java/net/minestom/server/instance/DynamicChunk.java index d8e226c3d..e12a0940a 100644 --- a/src/main/java/net/minestom/server/instance/DynamicChunk.java +++ b/src/main/java/net/minestom/server/instance/DynamicChunk.java @@ -177,7 +177,7 @@ public class DynamicChunk extends Chunk { for (int i = 0; i < 16; i++) { // TODO: variable section count final Section section = Objects.requireNonNullElseGet(sectionMap.get(i), Section::new); final Palette blockPalette = section.blockPalette(); - writer.writeShort((short) blockPalette.count()); + writer.writeShort((short) blockPalette.size()); blockPalette.write(writer); // Blocks section.biomePalette().write(writer); // Biomes } diff --git a/src/main/java/net/minestom/server/instance/palette/Palette.java b/src/main/java/net/minestom/server/instance/palette/Palette.java index 24eb09e7d..a0df1edaf 100644 --- a/src/main/java/net/minestom/server/instance/palette/Palette.java +++ b/src/main/java/net/minestom/server/instance/palette/Palette.java @@ -8,7 +8,7 @@ import org.jetbrains.annotations.NotNull; *

* 0 is the default value. */ -public interface Palette extends Writeable { +public sealed interface Palette extends Writeable permits PaletteImpl { static Palette blocks() { return new PaletteImpl(16 * 16 * 16, 8, 8, 2); } @@ -21,21 +21,31 @@ public interface Palette extends Writeable { void set(int x, int y, int z, int value); - int count(); + /** + * Returns the number of entries in this palette. + */ + int size(); /** * Returns the number of bits used per entry. */ int bitsPerEntry(); + /** + * Returns the payload of this palette. + *

+ * The size of each element is defined by {@link #bitsPerEntry()}. + * + * @return the palette payload + */ + long[] data(); + int maxBitsPerEntry(); /** - * Returns the number of entries in this palette. + * Returns the maximum number of entries in this palette. */ - int size(); - - long[] data(); + int maxSize(); @NotNull Palette clone(); } diff --git a/src/main/java/net/minestom/server/instance/palette/PaletteImpl.java b/src/main/java/net/minestom/server/instance/palette/PaletteImpl.java index a5bc2e2b0..459419da6 100644 --- a/src/main/java/net/minestom/server/instance/palette/PaletteImpl.java +++ b/src/main/java/net/minestom/server/instance/palette/PaletteImpl.java @@ -9,9 +9,9 @@ import org.jetbrains.annotations.NotNull; import static net.minestom.server.instance.Chunk.CHUNK_SECTION_SIZE; final class PaletteImpl implements Palette { - // Magic values generated with "Integer.MAX_VALUE >> (31 - bitsPerIndex)" for bitsPerIndex between 4 and 15 + // Magic values generated with "Integer.MAX_VALUE >> (31 - bitsPerIndex)" for bitsPerIndex between 1 and 16 private static final int[] MAGIC_MASKS = - {0, 0, 0, 0, + {0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767}; @@ -104,7 +104,7 @@ final class PaletteImpl implements Palette { } @Override - public int count() { + public int size() { return count; } @@ -119,7 +119,7 @@ final class PaletteImpl implements Palette { } @Override - public int size() { + public int maxSize() { return size; }