Add valuesLength

This commit is contained in:
themode 2022-01-19 04:13:01 +01:00
parent 9165a4d2b3
commit 5efa6d7980

View File

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