Skip to content

Commit f937268

Browse files
authored
Upstream
2 parents feb4f31 + 9d7bfb0 commit f937268

13 files changed

Lines changed: 133 additions & 59 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
@@ -486,9 +486,9 @@ public static LevelChunkSection newChunkSection(
486486
try {
487487
int num_palette;
488488
if (get == null) {
489-
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter);
489+
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter, false);
490490
} else {
491-
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter);
491+
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter, false);
492492
}
493493

494494
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
@@ -486,9 +486,9 @@ public static LevelChunkSection newChunkSection(
486486
try {
487487
int num_palette;
488488
if (get == null) {
489-
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter);
489+
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter, false);
490490
} else {
491-
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter);
491+
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter, false);
492492
}
493493

494494
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
@@ -481,9 +481,9 @@ public static LevelChunkSection newChunkSection(
481481
try {
482482
int num_palette;
483483
if (get == null) {
484-
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter);
484+
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter, false);
485485
} else {
486-
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter);
486+
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter, false);
487487
}
488488

489489
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
@@ -471,9 +471,9 @@ public static LevelChunkSection newChunkSection(
471471
try {
472472
int num_palette;
473473
if (get == null) {
474-
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter);
474+
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter, false);
475475
} else {
476-
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter);
476+
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter, false);
477477
}
478478

479479
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
@@ -416,6 +416,7 @@ protected <T extends Future<T>> T internalCall(
416416
new char[4096],
417417
adapter,
418418
serverLevel.registryAccess(),
419+
serverLevel.palettedContainerFactory().blockStatesStrategy(),
419420
biomeData
420421
);
421422
if (PaperweightPlatformAdapter.setSectionAtomic(
@@ -491,6 +492,7 @@ protected <T extends Future<T>> T internalCall(
491492
setArr,
492493
adapter,
493494
serverLevel.registryAccess(),
495+
serverLevel.palettedContainerFactory().blockStatesStrategy(),
494496
biomeData
495497
);
496498
if (PaperweightPlatformAdapter.setSectionAtomic(
@@ -555,6 +557,7 @@ protected <T extends Future<T>> T internalCall(
555557
setArr,
556558
adapter,
557559
serverLevel.registryAccess(),
560+
serverLevel.palettedContainerFactory().blockStatesStrategy(),
558561
biomeData != null ? biomeData : (PalettedContainer<Holder<Biome>>) existingSection.getBiomes()
559562
);
560563
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: 24 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import com.sk89q.worldedit.internal.util.LogManagerCompat;
2020
import com.sk89q.worldedit.world.biome.BiomeType;
2121
import com.sk89q.worldedit.world.biome.BiomeTypes;
22-
import com.sk89q.worldedit.world.block.BlockState;
2322
import com.sk89q.worldedit.world.block.BlockTypesCache;
2423
import io.papermc.lib.PaperLib;
2524
import net.minecraft.core.BlockPos;
@@ -34,13 +33,13 @@
3433
import net.minecraft.server.level.ChunkMap;
3534
import net.minecraft.server.level.ServerLevel;
3635
import net.minecraft.server.level.ServerPlayer;
36+
import net.minecraft.util.Mth;
3737
import net.minecraft.util.ProblemReporter;
3838
import net.minecraft.util.ThreadingDetector;
3939
import net.minecraft.world.entity.Entity;
4040
import net.minecraft.world.level.ChunkPos;
4141
import net.minecraft.world.level.LevelAccessor;
4242
import net.minecraft.world.level.biome.Biome;
43-
import net.minecraft.world.level.block.Block;
4443
import net.minecraft.world.level.block.Blocks;
4544
import net.minecraft.world.level.block.entity.BlockEntity;
4645
import net.minecraft.world.level.chunk.LevelChunk;
@@ -457,9 +456,10 @@ public static LevelChunkSection newChunkSection(
457456
final char[] blocks,
458457
CachedBukkitAdapter adapter,
459458
RegistryAccess registryAccess,
459+
Strategy<net.minecraft.world.level.block.state.BlockState> strategy,
460460
@Nullable PalettedContainer<Holder<Biome>> biomes
461461
) {
462-
return newChunkSection(layer, null, blocks, adapter, registryAccess, biomes);
462+
return newChunkSection(layer, null, blocks, adapter, registryAccess, strategy, biomes);
463463
}
464464

465465
public static LevelChunkSection newChunkSection(
@@ -468,6 +468,7 @@ public static LevelChunkSection newChunkSection(
468468
char[] set,
469469
CachedBukkitAdapter adapter,
470470
RegistryAccess registryAccess,
471+
Strategy<net.minecraft.world.level.block.state.BlockState> strategy,
471472
@Nullable PalettedContainer<Holder<Biome>> biomes
472473
) {
473474
if (set == null) {
@@ -480,47 +481,36 @@ public static LevelChunkSection newChunkSection(
480481
try {
481482
int num_palette;
482483
if (get == null) {
483-
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter);
484+
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter, true);
484485
} else {
485-
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter);
486+
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter, true);
486487
}
487488

488-
int bitsPerEntry = MathMan.log2nlz(num_palette - 1);
489-
if (bitsPerEntry > 0 && bitsPerEntry < 5) {
490-
bitsPerEntry = 4;
491-
} else if (bitsPerEntry > 8) {
492-
bitsPerEntry = MathMan.log2nlz(Block.BLOCK_STATE_REGISTRY.size() - 1);
493-
}
494-
495-
int bitsPerEntryNonZero = Math.max(bitsPerEntry, 1); // We do want to use zero sometimes
496-
final int blockBitArrayEnd = MathMan.longArrayLength(bitsPerEntryNonZero, 4096);
497-
498-
if (num_palette == 1) {
499-
for (int i = 0; i < blockBitArrayEnd; i++) {
500-
blockStates[i] = 0;
501-
}
489+
boolean singleValue = num_palette == 1;
490+
LongStream bits;
491+
if (singleValue) {
492+
bits = null;
502493
} else {
503-
final BitArrayUnstretched bitArray = new BitArrayUnstretched(bitsPerEntryNonZero, 4096, blockStates);
494+
int bitsPerEntry = Mth.ceillog2(num_palette);
495+
if (bitsPerEntry < 4) {
496+
bitsPerEntry = 4;
497+
}
498+
final int blockBitArrayEnd = MathMan.longArrayLength(bitsPerEntry, 4096);
499+
final BitArrayUnstretched bitArray = new BitArrayUnstretched(bitsPerEntry, 4096, blockStates);
500+
504501
bitArray.fromRaw(blocksCopy);
502+
bits = Arrays.stream(blockStates, 0, blockBitArrayEnd);
505503
}
506504

507-
final long[] bits = Arrays.copyOfRange(blockStates, 0, blockBitArrayEnd);
508-
List<net.minecraft.world.level.block.state.BlockState> palette;
509-
if (bitsPerEntry < 9) {
510-
palette = new ArrayList<>();
511-
for (int i = 0; i < num_palette; i++) {
512-
int ordinal = paletteToBlock[i];
513-
blockToPalette[ordinal] = Integer.MAX_VALUE;
514-
final BlockState state = BlockTypesCache.states[ordinal];
515-
palette.add(((PaperweightBlockMaterial) state.getMaterial()).getState());
516-
}
517-
} else {
518-
palette = List.of();
505+
List<net.minecraft.world.level.block.state.BlockState> palette = new ArrayList<>();
506+
for (int i = 0; i < num_palette; i++) {
507+
int ordinal = paletteToBlock[i];
508+
PaperweightBlockMaterial material = (PaperweightBlockMaterial) BlockTypesCache.states[ordinal].getMaterial();
509+
palette.add(material.getState());
519510
}
520511

521512
// Create palette with data
522-
var strategy = Strategy.createForBlockStates(Block.BLOCK_STATE_REGISTRY);
523-
var packedData = new PalettedContainerRO.PackedData<>(palette, Optional.of(LongStream.of(bits)), bitsPerEntry);
513+
var packedData = new PalettedContainerRO.PackedData<>(palette, Optional.ofNullable(bits));
524514
DataResult<PalettedContainer<net.minecraft.world.level.block.state.BlockState>> result;
525515
if (PaperLib.isPaper()) {
526516
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
@@ -457,9 +457,9 @@ public static LevelChunkSection newChunkSection(
457457
try {
458458
int num_palette;
459459
if (get == null) {
460-
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter);
460+
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter, false);
461461
} else {
462-
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter);
462+
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter, false);
463463
}
464464

465465
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
@@ -456,9 +456,9 @@ public static LevelChunkSection newChunkSection(
456456
try {
457457
int num_palette;
458458
if (get == null) {
459-
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter);
459+
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter, false);
460460
} else {
461-
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter);
461+
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter, false);
462462
}
463463

464464
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
@@ -485,9 +485,9 @@ public static LevelChunkSection newChunkSection(
485485
try {
486486
int num_palette;
487487
if (get == null) {
488-
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter);
488+
num_palette = createPalette(blockToPalette, paletteToBlock, blocksCopy, set, adapter, false);
489489
} else {
490-
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter);
490+
num_palette = createPalette(layer, blockToPalette, paletteToBlock, blocksCopy, get, set, adapter, false);
491491
}
492492

493493
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/PaperweightGetBlocks.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,7 @@ protected <T extends Future<T>> T internalCall(
421421
new char[4096],
422422
adapter,
423423
serverLevel.registryAccess(),
424+
serverLevel.palettedContainerFactory().blockStatesStrategy(),
424425
biomeData
425426
);
426427
if (PaperweightPlatformAdapter.setSectionAtomic(
@@ -496,6 +497,7 @@ protected <T extends Future<T>> T internalCall(
496497
setArr,
497498
adapter,
498499
serverLevel.registryAccess(),
500+
serverLevel.palettedContainerFactory().blockStatesStrategy(),
499501
biomeData
500502
);
501503
if (PaperweightPlatformAdapter.setSectionAtomic(
@@ -560,6 +562,7 @@ protected <T extends Future<T>> T internalCall(
560562
setArr,
561563
adapter,
562564
serverLevel.registryAccess(),
565+
serverLevel.palettedContainerFactory().blockStatesStrategy(),
563566
biomeData != null ? biomeData : (PalettedContainer<Holder<Biome>>) existingSection.getBiomes()
564567
);
565568
if (!PaperweightPlatformAdapter.setSectionAtomic(

0 commit comments

Comments
 (0)