mirror of
https://github.com/Minestom/Minestom.git
synced 2024-11-08 03:40:27 +01:00
Fix Palette
This commit is contained in:
parent
375722be3b
commit
a24cb665a9
@ -24,6 +24,7 @@ final class PaletteImpl implements Palette, Cloneable {
|
|||||||
|
|
||||||
// Specific to this palette type
|
// Specific to this palette type
|
||||||
private final int dimension;
|
private final int dimension;
|
||||||
|
private final int dimensionBitCount;
|
||||||
private final int size;
|
private final int size;
|
||||||
private final int maxBitsPerEntry;
|
private final int maxBitsPerEntry;
|
||||||
private final int bitsIncrement;
|
private final int bitsIncrement;
|
||||||
@ -42,8 +43,7 @@ final class PaletteImpl implements Palette, Cloneable {
|
|||||||
private Int2IntOpenHashMap valueToPaletteMap;
|
private Int2IntOpenHashMap valueToPaletteMap;
|
||||||
|
|
||||||
PaletteImpl(int dimension, int maxBitsPerEntry, int bitsPerEntry, int bitsIncrement) {
|
PaletteImpl(int dimension, int maxBitsPerEntry, int bitsPerEntry, int bitsIncrement) {
|
||||||
if (dimension < 1 || dimension % 2 != 0)
|
this.dimensionBitCount = validateDimension(dimension);
|
||||||
throw new IllegalArgumentException("Dimension must be positive and power of 2");
|
|
||||||
|
|
||||||
this.dimension = dimension;
|
this.dimension = dimension;
|
||||||
this.size = dimension * dimension * dimension;
|
this.size = dimension * dimension * dimension;
|
||||||
@ -215,8 +215,8 @@ final class PaletteImpl implements Palette, Cloneable {
|
|||||||
newBitsPerEntry = fixBitsPerEntry(newBitsPerEntry);
|
newBitsPerEntry = fixBitsPerEntry(newBitsPerEntry);
|
||||||
PaletteImpl palette = new PaletteImpl(dimension, maxBitsPerEntry, newBitsPerEntry, bitsIncrement);
|
PaletteImpl palette = new PaletteImpl(dimension, maxBitsPerEntry, newBitsPerEntry, bitsIncrement);
|
||||||
for (int y = 0; y < dimension; y++) {
|
for (int y = 0; y < dimension; y++) {
|
||||||
for (int x = 0; x < dimension; x++) {
|
for (int z = 0; z < dimension; z++) {
|
||||||
for (int z = 0; z < dimension; z++) {
|
for (int x = 0; x < dimension; x++) {
|
||||||
palette.set(x, y, z, get(x, y, z));
|
palette.set(x, y, z, get(x, y, z));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -250,10 +250,24 @@ final class PaletteImpl implements Palette, Cloneable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int getSectionIndex(int x, int y, int z) {
|
int getSectionIndex(int x, int y, int z) {
|
||||||
return y << (dimension / 2) | z << (dimension / 4) | x;
|
return y << (dimensionBitCount << 1) | z << dimensionBitCount | x;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int maxPaletteSize(int bitsPerEntry) {
|
static int maxPaletteSize(int bitsPerEntry) {
|
||||||
return 1 << bitsPerEntry;
|
return 1 << bitsPerEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static int validateDimension(int dimension) {
|
||||||
|
if(dimension <= 0) {
|
||||||
|
throw new IllegalArgumentException("Dimension must be greater 0");
|
||||||
|
}
|
||||||
|
|
||||||
|
double log2 = Math.log(dimension) / Math.log(2);
|
||||||
|
|
||||||
|
if ((int) Math.ceil(log2) != (int)Math.floor(log2)) {
|
||||||
|
throw new IllegalArgumentException("Dimension must be a power of 2");
|
||||||
|
}
|
||||||
|
|
||||||
|
return (int) log2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user