From 8e061ce9c89f36b254019e95bcd199071f217029 Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Sat, 2 Dec 2023 18:11:57 -0800 Subject: [PATCH] Add Structure check API (#9062) --- .../api/0450-Add-Structure-check-API.patch | 41 +++++++++++++++++++ .../server/1057-Add-Structure-check-API.patch | 23 +++++++++++ 2 files changed, 64 insertions(+) create mode 100644 patches/api/0450-Add-Structure-check-API.patch create mode 100644 patches/server/1057-Add-Structure-check-API.patch diff --git a/patches/api/0450-Add-Structure-check-API.patch b/patches/api/0450-Add-Structure-check-API.patch new file mode 100644 index 000000000..d6d4ff697 --- /dev/null +++ b/patches/api/0450-Add-Structure-check-API.patch @@ -0,0 +1,41 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jake Potrebic +Date: Mon, 27 Mar 2023 10:20:06 -0700 +Subject: [PATCH] Add Structure check API + + +diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java +index f72f0f0f8eee95f95adc969d55ba7de82ee30e2a..567a36a4887da8994c9170e2885aa8cc357efa0c 100644 +--- a/src/main/java/org/bukkit/World.java ++++ b/src/main/java/org/bukkit/World.java +@@ -76,6 +76,30 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient + */ + int getPlayerCount(); + // Paper end ++ // Paper start - structure check API ++ /** ++ * Check if the naturally-generated structure exists at the position. ++ *

++ * Note that if the position is not loaded, this may cause chunk loads/generation ++ * to check if a structure is at that position. Use {@link #isPositionLoaded(io.papermc.paper.math.Position)} ++ * to check if a position is loaded ++ * ++ * @param position the position to check at ++ * @param structure the structure to check for ++ * @return true if that structure exists at the position ++ */ ++ boolean hasStructureAt(io.papermc.paper.math.@NotNull Position position, @NotNull Structure structure); ++ ++ /** ++ * Checks if this position is loaded. ++ * ++ * @param position position to check ++ * @return true if loaded ++ */ ++ default boolean isPositionLoaded(io.papermc.paper.math.@NotNull Position position) { ++ return this.isChunkLoaded(position.blockX() >> 4, position.blockZ() >> 4); ++ } ++ // Paper end + + /** + * Gets the {@link Block} at the given coordinates diff --git a/patches/server/1057-Add-Structure-check-API.patch b/patches/server/1057-Add-Structure-check-API.patch new file mode 100644 index 000000000..e5d4b0637 --- /dev/null +++ b/patches/server/1057-Add-Structure-check-API.patch @@ -0,0 +1,23 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jake Potrebic +Date: Mon, 27 Mar 2023 10:20:00 -0700 +Subject: [PATCH] Add Structure check API + + +diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +index f19f2199cac5a7eb275f40cc23472416a40ec0da..90c76ddcb8af13409490b8976263d27a71954668 100644 +--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java ++++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +@@ -230,6 +230,12 @@ public class CraftWorld extends CraftRegionAccessor implements World { + }; + } + // Paper end ++ // Paper start - structure check API ++ @Override ++ public boolean hasStructureAt(final io.papermc.paper.math.Position position, final Structure structure) { ++ return this.world.structureManager().getStructureWithPieceAt(io.papermc.paper.util.MCUtil.toBlockPos(position), net.minecraft.resources.ResourceKey.create(net.minecraft.core.registries.Registries.STRUCTURE, CraftNamespacedKey.toMinecraft(structure.getKey()))).isValid(); ++ } ++ // Paper end + + private static final Random rand = new Random(); +