From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jason Penilla <11360596+jpenilla@users.noreply.github.com> Date: Thu, 9 Dec 2021 00:08:11 -0800 Subject: [PATCH] Fix ChunkSnapshot#isSectionEmpty(int) diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java index db344e5b9f96f317a232304587e6b1673fc6067d..ca9282a0e608541837573d155bf9b95a105ba87d 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java @@ -53,6 +53,7 @@ public class CraftChunk implements Chunk { private final int x; private final int z; private static final PalettedContainer 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 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) { @@ -284,6 +285,20 @@ public class CraftChunk implements Chunk { Codec> 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(); data.put("block_states", ChunkSerializer.BLOCK_STATE_CODEC.encodeStart(NbtOps.INSTANCE, cs[i].getStates()).get().left().get());