From 4f20c7ab67a2f81fa8a74802f9328f2ff92ae9c3 Mon Sep 17 00:00:00 2001 From: BillyGalbreath Date: Wed, 20 Jun 2018 20:30:09 -0500 Subject: [PATCH] Add "getNearbyXXX" methods to Location (#1160) --- ...Add-getNearbyXXX-methods-to-Location.patch | 224 ++++++++++++++++++ 1 file changed, 224 insertions(+) create mode 100644 Spigot-API-Patches/0115-Add-getNearbyXXX-methods-to-Location.patch diff --git a/Spigot-API-Patches/0115-Add-getNearbyXXX-methods-to-Location.patch b/Spigot-API-Patches/0115-Add-getNearbyXXX-methods-to-Location.patch new file mode 100644 index 0000000000..8ef41fc698 --- /dev/null +++ b/Spigot-API-Patches/0115-Add-getNearbyXXX-methods-to-Location.patch @@ -0,0 +1,224 @@ +From 9594f7339a5e2a481ebd29479afbd474209ee66b Mon Sep 17 00:00:00 2001 +From: BillyGalbreath +Date: Mon, 18 Jun 2018 00:41:46 -0500 +Subject: [PATCH] Add "getNearbyXXX" methods to Location + + +diff --git a/src/main/java/org/bukkit/Location.java b/src/main/java/org/bukkit/Location.java +index 916238c4..c1689168 100644 +--- a/src/main/java/org/bukkit/Location.java ++++ b/src/main/java/org/bukkit/Location.java +@@ -8,6 +8,15 @@ import org.bukkit.configuration.serialization.ConfigurationSerializable; + import org.bukkit.util.NumberConversions; + import org.bukkit.util.Vector; + ++// Paper start ++import java.util.Collection; ++import java.util.Collections; ++import java.util.function.Predicate; ++import org.bukkit.entity.Entity; ++import org.bukkit.entity.LivingEntity; ++import org.bukkit.entity.Player; ++// Paper end ++ + /** + * Represents a 3-dimensional position in a world. + *
+@@ -514,6 +523,194 @@ public class Location implements Cloneable, ConfigurationSerializable { + centerLoc.setZ(getBlockZ() + 0.5); + return centerLoc; + } ++ ++ /** ++ * Returns a list of entities within a bounding box centered around a Location. ++ * ++ * Some implementations may impose artificial restrictions on the size of the search bounding box. ++ * ++ * @param x 1/2 the size of the box along x axis ++ * @param y 1/2 the size of the box along y axis ++ * @param z 1/2 the size of the box along z axis ++ * @return the collection of entities near location. This will always be a non-null collection. ++ */ ++ public Collection getNearbyEntities(double x, double y, double z) { ++ if (world == null) { ++ throw new IllegalArgumentException("Location has no world"); ++ } ++ return world.getNearbyEntities(this, x, y, z); ++ } ++ ++ /** ++ * Gets nearby players within the specified radius (bounding box) ++ * @param radius X Radius ++ */ ++ public Collection getNearbyLivingEntities(double radius) { ++ return getNearbyEntitiesByType(org.bukkit.entity.LivingEntity.class, radius, radius, radius); ++ } ++ ++ /** ++ * Gets nearby players within the specified radius (bounding box) ++ * @param xzRadius X/Z Radius ++ * @param yRadius Y Radius ++ */ ++ public Collection getNearbyLivingEntities(double xzRadius, double yRadius) { ++ return getNearbyEntitiesByType(org.bukkit.entity.LivingEntity.class, xzRadius, yRadius, xzRadius); ++ } ++ ++ /** ++ * Gets nearby players within the specified radius (bounding box) ++ * @param xRadius X Radius ++ * @param yRadius Y Radius ++ * @param zRadius Z radius ++ */ ++ public Collection getNearbyLivingEntities(double xRadius, double yRadius, double zRadius) { ++ return getNearbyEntitiesByType(org.bukkit.entity.LivingEntity.class, xRadius, yRadius, zRadius); ++ } ++ ++ /** ++ * Gets nearby players within the specified radius (bounding box) ++ * @param radius X Radius ++ */ ++ public Collection getNearbyLivingEntities(double radius, Predicate predicate) { ++ return getNearbyEntitiesByType(org.bukkit.entity.LivingEntity.class, radius, radius, radius, predicate); ++ } ++ ++ /** ++ * Gets nearby players within the specified radius (bounding box) ++ * @param xzRadius X/Z Radius ++ * @param yRadius Y Radius ++ */ ++ public Collection getNearbyLivingEntities(double xzRadius, double yRadius, Predicate predicate) { ++ return getNearbyEntitiesByType(org.bukkit.entity.LivingEntity.class, xzRadius, yRadius, xzRadius, predicate); ++ } ++ ++ /** ++ * Gets nearby players within the specified radius (bounding box) ++ * @param xRadius X Radius ++ * @param yRadius Y Radius ++ * @param zRadius Z radius ++ */ ++ public Collection getNearbyLivingEntities(double xRadius, double yRadius, double zRadius, Predicate predicate) { ++ return getNearbyEntitiesByType(org.bukkit.entity.LivingEntity.class, xRadius, yRadius, zRadius, predicate); ++ } ++ ++ /** ++ * Gets nearby players within the specified radius (bounding box) ++ * @param radius X/Y/Z Radius ++ */ ++ public Collection getNearbyPlayers(double radius) { ++ return getNearbyEntitiesByType(org.bukkit.entity.Player.class, radius, radius, radius); ++ } ++ ++ /** ++ * Gets nearby players within the specified radius (bounding box) ++ * @param xzRadius X/Z Radius ++ * @param yRadius Y Radius ++ */ ++ public Collection getNearbyPlayers(double xzRadius, double yRadius) { ++ return getNearbyEntitiesByType(org.bukkit.entity.Player.class, xzRadius, yRadius, xzRadius); ++ } ++ ++ /** ++ * Gets nearby players within the specified radius (bounding box) ++ * @param xRadius X Radius ++ * @param yRadius Y Radius ++ * @param zRadius Z Radius ++ */ ++ public Collection getNearbyPlayers(double xRadius, double yRadius, double zRadius) { ++ return getNearbyEntitiesByType(org.bukkit.entity.Player.class, xRadius, yRadius, zRadius); ++ } ++ ++ /** ++ * Gets nearby players within the specified radius (bounding box) ++ * @param radius X/Y/Z Radius ++ */ ++ public Collection getNearbyPlayers(double radius, Predicate predicate) { ++ return getNearbyEntitiesByType(org.bukkit.entity.Player.class, radius, radius, radius, predicate); ++ } ++ ++ /** ++ * Gets nearby players within the specified radius (bounding box) ++ * @param xzRadius X/Z Radius ++ * @param yRadius Y Radius ++ */ ++ public Collection getNearbyPlayers(double xzRadius, double yRadius, Predicate predicate) { ++ return getNearbyEntitiesByType(org.bukkit.entity.Player.class, xzRadius, yRadius, xzRadius, predicate); ++ } ++ ++ /** ++ * Gets nearby players within the specified radius (bounding box) ++ * @param xRadius X Radius ++ * @param yRadius Y Radius ++ * @param zRadius Z Radius ++ */ ++ public Collection getNearbyPlayers(double xRadius, double yRadius, double zRadius, Predicate predicate) { ++ return getNearbyEntitiesByType(org.bukkit.entity.Player.class, xRadius, yRadius, zRadius, predicate); ++ } ++ ++ /** ++ * Gets all nearby entities of the specified type, within the specified radius (bounding box) ++ * @param clazz Type to filter by ++ * @param radius X/Y/Z radius to search within ++ */ ++ public Collection getNearbyEntitiesByType(Class clazz, double radius) { ++ return getNearbyEntitiesByType(clazz, radius, radius, radius, null); ++ } ++ ++ /** ++ * Gets all nearby entities of the specified type, within the specified radius, with x and x radius matching (bounding box) ++ * @param clazz Type to filter by ++ * @param xzRadius X/Z radius to search within ++ * @param yRadius Y radius to search within ++ */ ++ public Collection getNearbyEntitiesByType(Class clazz, double xzRadius, double yRadius) { ++ return getNearbyEntitiesByType(clazz, xzRadius, yRadius, xzRadius, null); ++ } ++ ++ /** ++ * Gets all nearby entities of the specified type, within the specified radius (bounding box) ++ * @param clazz Type to filter by ++ * @param xRadius X Radius ++ * @param yRadius Y Radius ++ * @param zRadius Z Radius ++ */ ++ public Collection getNearbyEntitiesByType(Class clazz, double xRadius, double yRadius, double zRadius) { ++ return getNearbyEntitiesByType(clazz, xRadius, yRadius, zRadius, null); ++ } ++ ++ /** ++ * Gets all nearby entities of the specified type, within the specified radius (bounding box) ++ * @param clazz Type to filter by ++ * @param radius X/Y/Z radius to search within ++ */ ++ public Collection getNearbyEntitiesByType(Class clazz, double radius, Predicate predicate) { ++ return getNearbyEntitiesByType(clazz, radius, radius, radius, predicate); ++ } ++ ++ /** ++ * Gets all nearby entities of the specified type, within the specified radius, with x and x radius matching (bounding box) ++ * @param clazz Type to filter by ++ * @param xzRadius X/Z radius to search within ++ * @param yRadius Y radius to search within ++ */ ++ public Collection getNearbyEntitiesByType(Class clazz, double xzRadius, double yRadius, Predicate predicate) { ++ return getNearbyEntitiesByType(clazz, xzRadius, yRadius, xzRadius, predicate); ++ } ++ ++ /** ++ * Gets all nearby entities of the specified type, within the specified radius (bounding box) ++ * @param clazz Type to filter by ++ * @param xRadius X Radius ++ * @param yRadius Y Radius ++ * @param zRadius Z Radius ++ */ ++ public Collection getNearbyEntitiesByType(Class clazz, double xRadius, double yRadius, double zRadius, Predicate predicate) { ++ if (world == null) { ++ throw new IllegalArgumentException("Location has no world"); ++ } ++ return world.getNearbyEntitiesByType(clazz, this, xRadius, yRadius, zRadius, predicate); ++ } + // Paper end + @Override + public boolean equals(Object obj) { +-- +2.11.0 +