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 a44c97d5b..012c8a621 100644 --- a/src/main/java/net/minestom/server/instance/palette/PaletteImpl.java +++ b/src/main/java/net/minestom/server/instance/palette/PaletteImpl.java @@ -111,7 +111,7 @@ final class PaletteImpl implements Palette, Cloneable { return; } // Initialize the section - this.values = values = new long[(size + valuesPerLong - 1) / valuesPerLong]; + this.values = values = new long[valuesLength(bitsPerEntry)]; } // Change to palette value final int sectionIndex = getSectionIndex(x % dimension, y % dimension, z % dimension); @@ -151,7 +151,7 @@ final class PaletteImpl implements Palette, Cloneable { final int valuesPerLong = VALUES_PER_LONG[bitsPerEntry]; long[] values = this.values; if (values.length == 0) { - this.values = values = new long[(size + valuesPerLong - 1) / valuesPerLong]; + this.values = values = new long[valuesLength(bitsPerEntry)]; } long block = 0; for (int i = 0; i < valuesPerLong; i++) @@ -270,12 +270,9 @@ final class PaletteImpl implements Palette, Cloneable { @Override public void write(@NotNull BinaryWriter writer) { writer.writeByte((byte) bitsPerEntry); - // Palette - if (bitsPerEntry < 9) { - // Palette has to exist + if (bitsPerEntry <= maxBitsPerEntry) { // Palette index writer.writeVarIntList(paletteToValueList, BinaryWriter::writeVarInt); } - // Raw writer.writeLongArray(values); } @@ -342,7 +339,7 @@ final class PaletteImpl implements Palette, Cloneable { final int valuesPerLong = VALUES_PER_LONG[bitsPerEntry]; long[] values = this.values; if (values.length == 0) { - this.values = values = new long[(size + valuesPerLong - 1) / valuesPerLong]; + this.values = values = new long[valuesLength(bitsPerEntry)]; } final int magicMask = MAGIC_MASKS[bitsPerEntry]; for (int i = 0; i < values.length; i++) { @@ -401,6 +398,11 @@ final class PaletteImpl implements Palette, Cloneable { return cache; } + int valuesLength(int bitsPerEntry) { + int valuesPerLong = VALUES_PER_LONG[bitsPerEntry]; + return (size + valuesPerLong - 1) / valuesPerLong; + } + static int maxPaletteSize(int bitsPerEntry) { return 1 << bitsPerEntry; }