From 384f31d81895b70ea28c8f8ffa0f0163f3327ed2 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 28 Jan 2023 11:49:46 +1100 Subject: [PATCH] SPIGOT-7214: Add CraftChunk and CraftChunkSnapshot contains biome method --- .../java/org/bukkit/craftbukkit/CraftChunk.java | 15 +++++++++++++++ .../bukkit/craftbukkit/CraftChunkSnapshot.java | 14 ++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java index 43515bd64..f1fde234b 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java @@ -40,6 +40,7 @@ import net.minecraft.world.level.lighting.LightEngine; import org.bukkit.Chunk; import org.bukkit.ChunkSnapshot; import org.bukkit.World; +import org.bukkit.block.Biome; import org.bukkit.block.Block; import org.bukkit.block.BlockState; import org.bukkit.block.data.BlockData; @@ -281,6 +282,20 @@ public class CraftChunk implements Chunk { return false; } + @Override + public boolean contains(Biome biome) { + Preconditions.checkArgument(biome != null, "Biome cannot be null"); + + Predicate> nms = Predicates.equalTo(CraftBlock.biomeToBiomeBase(getHandle().biomeRegistry, biome)); + for (ChunkSection section : getHandle().getSections()) { + if (section != null && section.getBiomes().maybeHas(nms)) { + return true; + } + } + + return false; + } + @Override public ChunkSnapshot getChunkSnapshot() { return getChunkSnapshot(true, false, false); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunkSnapshot.java b/src/main/java/org/bukkit/craftbukkit/CraftChunkSnapshot.java index 09d117778..fdd31a962 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftChunkSnapshot.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftChunkSnapshot.java @@ -81,6 +81,20 @@ public class CraftChunkSnapshot implements ChunkSnapshot { return false; } + @Override + public boolean contains(Biome biome) { + Preconditions.checkArgument(biome != null, "Biome cannot be null"); + + Predicate> nms = Predicates.equalTo(CraftBlock.biomeToBiomeBase(this.biomeRegistry, biome)); + for (PalettedContainerRO> palette : this.biome) { + if (palette.maybeHas(nms)) { + return true; + } + } + + return false; + } + @Override public Material getBlockType(int x, int y, int z) { validateChunkCoordinates(x, y, z);