Skip to content

Commit 80187ef

Browse files
committed
fix: global palette is not really any more
- supersedes #3431
1 parent ef59441 commit 80187ef

11 files changed

Lines changed: 49 additions & 42 deletions

File tree

worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightPlatformAdapter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -431,9 +431,9 @@ public static LevelChunkSection newChunkSection(
431431
try {
432432
int num_palette;
433433
if (get == null) {
434-
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter);
434+
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter, false);
435435
} else {
436-
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter);
436+
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter, false);
437437
}
438438

439439
int bitsPerEntry = MathMan.log2nlz(num_palette - 1);

worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightPlatformAdapter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -431,9 +431,9 @@ public static LevelChunkSection newChunkSection(
431431
try {
432432
int num_palette;
433433
if (get == null) {
434-
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter);
434+
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter, false);
435435
} else {
436-
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter);
436+
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter, false);
437437
}
438438

439439
int bitsPerEntry = MathMan.log2nlz(num_palette - 1);

worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightPlatformAdapter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -425,9 +425,9 @@ public static LevelChunkSection newChunkSection(
425425
try {
426426
int num_palette;
427427
if (get == null) {
428-
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter);
428+
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter, false);
429429
} else {
430-
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter);
430+
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter, false);
431431
}
432432

433433
int bitsPerEntry = MathMan.log2nlz(num_palette - 1);

worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightPlatformAdapter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -415,9 +415,9 @@ public static LevelChunkSection newChunkSection(
415415
try {
416416
int num_palette;
417417
if (get == null) {
418-
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter);
418+
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter, false);
419419
} else {
420-
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter);
420+
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter, false);
421421
}
422422

423423
int bitsPerEntry = MathMan.log2nlz(num_palette - 1);

worldedit-bukkit/adapters/adapter-1_21_11/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_11/PaperweightGetBlocks.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,7 @@ protected <T extends Future<T>> T internalCall(
409409
new char[4096],
410410
adapter,
411411
serverLevel.registryAccess(),
412+
serverLevel.palettedContainerFactory().blockStatesStrategy(),
412413
biomeData
413414
);
414415
if (PaperweightPlatformAdapter.setSectionAtomic(
@@ -484,6 +485,7 @@ protected <T extends Future<T>> T internalCall(
484485
setArr,
485486
adapter,
486487
serverLevel.registryAccess(),
488+
serverLevel.palettedContainerFactory().blockStatesStrategy(),
487489
biomeData
488490
);
489491
if (PaperweightPlatformAdapter.setSectionAtomic(
@@ -548,6 +550,7 @@ protected <T extends Future<T>> T internalCall(
548550
setArr,
549551
adapter,
550552
serverLevel.registryAccess(),
553+
serverLevel.palettedContainerFactory().blockStatesStrategy(),
551554
biomeData != null ? biomeData : (PalettedContainer<Holder<Biome>>) existingSection.getBiomes()
552555
);
553556
if (!PaperweightPlatformAdapter.setSectionAtomic(

worldedit-bukkit/adapters/adapter-1_21_11/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_11/PaperweightPlatformAdapter.java

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import com.sk89q.worldedit.internal.util.LogManagerCompat;
1919
import com.sk89q.worldedit.world.biome.BiomeType;
2020
import com.sk89q.worldedit.world.biome.BiomeTypes;
21-
import com.sk89q.worldedit.world.block.BlockState;
2221
import com.sk89q.worldedit.world.block.BlockTypesCache;
2322
import io.papermc.lib.PaperLib;
2423
import net.minecraft.core.BlockPos;
@@ -33,13 +32,13 @@
3332
import net.minecraft.server.level.ChunkMap;
3433
import net.minecraft.server.level.ServerLevel;
3534
import net.minecraft.server.level.ServerPlayer;
35+
import net.minecraft.util.Mth;
3636
import net.minecraft.util.ProblemReporter;
3737
import net.minecraft.util.ThreadingDetector;
3838
import net.minecraft.world.entity.Entity;
3939
import net.minecraft.world.level.ChunkPos;
4040
import net.minecraft.world.level.LevelAccessor;
4141
import net.minecraft.world.level.biome.Biome;
42-
import net.minecraft.world.level.block.Block;
4342
import net.minecraft.world.level.block.Blocks;
4443
import net.minecraft.world.level.block.entity.BlockEntity;
4544
import net.minecraft.world.level.chunk.LevelChunk;
@@ -402,9 +401,10 @@ public static LevelChunkSection newChunkSection(
402401
final char[] blocks,
403402
CachedBukkitAdapter adapter,
404403
RegistryAccess registryAccess,
404+
Strategy<net.minecraft.world.level.block.state.BlockState> strategy,
405405
@Nullable PalettedContainer<Holder<Biome>> biomes
406406
) {
407-
return newChunkSection(layer, null, blocks, adapter, registryAccess, biomes);
407+
return newChunkSection(layer, null, blocks, adapter, registryAccess, strategy, biomes);
408408
}
409409

410410
public static LevelChunkSection newChunkSection(
@@ -413,6 +413,7 @@ public static LevelChunkSection newChunkSection(
413413
char[] set,
414414
CachedBukkitAdapter adapter,
415415
RegistryAccess registryAccess,
416+
Strategy<net.minecraft.world.level.block.state.BlockState> strategy,
416417
@Nullable PalettedContainer<Holder<Biome>> biomes
417418
) {
418419
if (set == null) {
@@ -425,17 +426,12 @@ public static LevelChunkSection newChunkSection(
425426
try {
426427
int num_palette;
427428
if (get == null) {
428-
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter);
429+
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter, true);
429430
} else {
430-
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter);
431+
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter, true);
431432
}
432433

433-
int bitsPerEntry = MathMan.log2nlz(num_palette - 1);
434-
if (bitsPerEntry > 0 && bitsPerEntry < 5) {
435-
bitsPerEntry = 4;
436-
} else if (bitsPerEntry > 8) {
437-
bitsPerEntry = MathMan.log2nlz(Block.BLOCK_STATE_REGISTRY.size() - 1);
438-
}
434+
int bitsPerEntry = Mth.ceillog2(num_palette);
439435

440436
int bitsPerEntryNonZero = Math.max(bitsPerEntry, 1); // We do want to use zero sometimes
441437
final int blockBitArrayEnd = MathMan.longArrayLength(bitsPerEntryNonZero, 4096);
@@ -451,21 +447,19 @@ public static LevelChunkSection newChunkSection(
451447

452448
final long[] bits = Arrays.copyOfRange(blockStates, 0, blockBitArrayEnd);
453449
List<net.minecraft.world.level.block.state.BlockState> palette;
454-
if (bitsPerEntry < 9) {
450+
if (bitsPerEntry == 0) {
451+
palette = List.of();
452+
} else {
455453
palette = new ArrayList<>();
456454
for (int i = 0; i < num_palette; i++) {
457455
int ordinal = paletteToBlock[i];
458-
blockToPalette[ordinal] = Integer.MAX_VALUE;
459-
final BlockState state = BlockTypesCache.states[ordinal];
460-
palette.add(((PaperweightBlockMaterial) state.getMaterial()).getState());
456+
PaperweightBlockMaterial material = (PaperweightBlockMaterial)BlockTypesCache.states[ordinal].getMaterial();
457+
palette.add(material.getState());
461458
}
462-
} else {
463-
palette = List.of();
464459
}
465460

466461
// Create palette with data
467-
var strategy = Strategy.createForBlockStates(Block.BLOCK_STATE_REGISTRY);
468-
var packedData = new PalettedContainerRO.PackedData<>(palette, Optional.of(LongStream.of(bits)), bitsPerEntry);
462+
var packedData = new PalettedContainerRO.PackedData<>(palette, Optional.of(LongStream.of(bits)));
469463
DataResult<PalettedContainer<net.minecraft.world.level.block.state.BlockState>> result;
470464
if (PaperLib.isPaper()) {
471465
result = PalettedContainer.unpack(strategy, packedData, Blocks.AIR.defaultBlockState(), null);

worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightPlatformAdapter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -401,9 +401,9 @@ public static LevelChunkSection newChunkSection(
401401
try {
402402
int num_palette;
403403
if (get == null) {
404-
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter);
404+
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter, false);
405405
} else {
406-
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter);
406+
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter, false);
407407
}
408408

409409
int bitsPerEntry = MathMan.log2nlz(num_palette - 1);

worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightPlatformAdapter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -400,9 +400,9 @@ public static LevelChunkSection newChunkSection(
400400
try {
401401
int num_palette;
402402
if (get == null) {
403-
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter);
403+
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter, false);
404404
} else {
405-
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter);
405+
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter, false);
406406
}
407407

408408
int bitsPerEntry = MathMan.log2nlz(num_palette - 1);

worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightPlatformAdapter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -429,9 +429,9 @@ public static LevelChunkSection newChunkSection(
429429
try {
430430
int num_palette;
431431
if (get == null) {
432-
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter);
432+
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter, false);
433433
} else {
434-
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter);
434+
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter, false);
435435
}
436436

437437
int bitsPerEntry = MathMan.log2nlz(num_palette - 1);

worldedit-bukkit/adapters/adapter-1_21_9/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_9/PaperweightPlatformAdapter.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.fastasyncworldedit.bukkit.adapter.CachedBukkitAdapter;
66
import com.fastasyncworldedit.bukkit.adapter.DelegateSemaphore;
77
import com.fastasyncworldedit.bukkit.adapter.NMSAdapter;
8+
import com.fastasyncworldedit.bukkit.util.MinecraftVersion;
89
import com.fastasyncworldedit.core.Fawe;
910
import com.fastasyncworldedit.core.FaweCache;
1011
import com.fastasyncworldedit.core.math.BitArrayUnstretched;
@@ -106,11 +107,13 @@ public final class PaperweightPlatformAdapter extends NMSAdapter {
106107
private static final Field fieldRemove;
107108

108109
private static final Logger LOGGER = LogManagerCompat.getLogger();
110+
private static final boolean GLOBAL_KINDA_DOES_NOT_EXIST = MinecraftVersion.getCurrent().getRelease() == 10;
109111

110112
private static Field SERVER_LEVEL_ENTITY_MANAGER;
111113

112114
static final MethodHandle PALETTED_CONTAINER_GET;
113115

116+
114117
static {
115118
final MethodHandles.Lookup lookup = MethodHandles.lookup();
116119
try {
@@ -436,9 +439,11 @@ public static LevelChunkSection newChunkSection(
436439
try {
437440
int num_palette;
438441
if (get == null) {
439-
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter);
442+
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter, GLOBAL_KINDA_DOES_NOT_EXIST);
440443
} else {
441-
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter);
444+
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter,
445+
GLOBAL_KINDA_DOES_NOT_EXIST
446+
);
442447
}
443448

444449
int bitsPerEntry = MathMan.log2nlz(num_palette - 1);
@@ -476,7 +481,9 @@ public static LevelChunkSection newChunkSection(
476481

477482
// Create palette with data
478483
var strategy = Strategy.createForBlockStates(Block.BLOCK_STATE_REGISTRY);
479-
var packedData = new PalettedContainerRO.PackedData<>(palette, Optional.of(LongStream.of(bits)), bitsPerEntry);
484+
var packedData = GLOBAL_KINDA_DOES_NOT_EXIST ?
485+
new PalettedContainerRO.PackedData<>(palette, Optional.of(LongStream.of(bits))) :
486+
new PalettedContainerRO.PackedData<>(palette, Optional.of(LongStream.of(bits)), bitsPerEntry);
480487
DataResult<PalettedContainer<net.minecraft.world.level.block.state.BlockState>> result;
481488
if (PaperLib.isPaper()) {
482489
result = PalettedContainer.unpack(strategy, packedData, Blocks.AIR.defaultBlockState(), null);

0 commit comments

Comments
 (0)