From 94afe500e2e54bfdc24b2b46abf76c90eb06ab93 Mon Sep 17 00:00:00 2001
From: Jason Penilla <11360596+jpenilla@users.noreply.github.com>
Date: Thu, 9 Dec 2021 04:34:11 -0800
Subject: [PATCH] Fix issue with snapshotted biomes in last commit

---
 ...Fix-ChunkSnapshot-isSectionEmpty-int.patch | 35 ++++++-------------
 1 file changed, 11 insertions(+), 24 deletions(-)

diff --git a/patches/server/Fix-ChunkSnapshot-isSectionEmpty-int.patch b/patches/server/Fix-ChunkSnapshot-isSectionEmpty-int.patch
index 35e7f0e5b4..951a2fb7ed 100644
--- a/patches/server/Fix-ChunkSnapshot-isSectionEmpty-int.patch
+++ b/patches/server/Fix-ChunkSnapshot-isSectionEmpty-int.patch
@@ -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));