Fix issue with snapshotted biomes in last commit

This commit is contained in:
Jason Penilla 2021-12-09 04:34:11 -08:00
parent 37bd203f8d
commit 94afe500e2

View File

@ -9,31 +9,18 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
--- a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
@@ -0,0 +0,0 @@ public class CraftChunk implements Chunk {
private final int x;
private final int z;
private static final PalettedContainer<net.minecraft.world.level.block.state.BlockState> emptyBlockIDs = new PalettedContainer<>(net.minecraft.world.level.block.Block.BLOCK_STATE_REGISTRY, Blocks.AIR.defaultBlockState(), PalettedContainer.Strategy.SECTION_STATES, null); // Paper - Anti-Xray - Add preset block states
+ private static final PalettedContainer<net.minecraft.world.level.biome.Biome> EMPTY_BIOMES = new PalettedContainer<>(net.minecraft.server.MinecraftServer.getServer().registryAccess().registryOrThrow(Registry.BIOME_REGISTRY), net.minecraft.server.MinecraftServer.getServer().registryAccess().registryOrThrow(Registry.BIOME_REGISTRY).getOrThrow(Biomes.PLAINS), PalettedContainer.Strategy.SECTION_BIOMES, null); // Paper
private static final byte[] emptyLight = new byte[2048];
public CraftChunk(net.minecraft.world.level.chunk.LevelChunk chunk) {
@@ -0,0 +0,0 @@ public class CraftChunk implements Chunk {
Codec<PalettedContainer<Biome>> biomeCodec = PalettedContainer.codec(iregistry, iregistry.byNameCodec(), PalettedContainer.Strategy.SECTION_BIOMES, iregistry.getOrThrow(Biomes.PLAINS), null); // Paper - Anti-Xray - Add preset biomes
for (int i = 0; i < cs.length; i++) {
+ // Paper start
+ if (cs[i].hasOnlyAir()) {
+ sectionEmpty[i] = true;
+ sectionBlockIDs[i] = emptyBlockIDs;
+ sectionSkyLights[i] = emptyLight;
+ sectionEmitLights[i] = emptyLight;
+ if (biome != null) {
+ biome[i] = EMPTY_BIOMES;
+ }
+ continue;
+ } else {
+ sectionEmpty[i] = false;
+ }
+ // Paper end
CompoundTag data = new CompoundTag();
+ // Paper start
+ sectionEmpty[i] = cs[i].hasOnlyAir();
+ if (!sectionEmpty[i]) {
data.put("block_states", ChunkSerializer.BLOCK_STATE_CODEC.encodeStart(NbtOps.INSTANCE, cs[i].getStates()).get().left().get());
sectionBlockIDs[i] = ChunkSerializer.BLOCK_STATE_CODEC.parse(NbtOps.INSTANCE, data.getCompound("block_states")).get().left().get();
+ } else {
+ sectionBlockIDs[i] = CraftChunk.emptyBlockIDs;
+ }
+ // Paper end
LevelLightEngine lightengine = chunk.level.getLightEngine();
DataLayer skyLightArray = lightengine.getLayerListener(LightLayer.SKY).getDataLayerData(SectionPos.of(x, i, z));