2021-06-11 12:02:28 +00:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Aikar <aikar@aikar.co>
|
|
|
|
Date: Mon, 30 Apr 2018 17:55:28 -0400
|
|
|
|
Subject: [PATCH] Additional world.getNearbyEntities API's
|
|
|
|
|
|
|
|
Provides more methods to get nearby entities, and filter by types and predicates
|
|
|
|
|
|
|
|
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
|
2023-05-12 11:10:08 +00:00
|
|
|
index 4270367085a83c368f96c8eab669f1bdc0e74f4d..ee06fdba69313e5352e5d1dca381c8131112fc3a 100644
|
2021-06-11 12:02:28 +00:00
|
|
|
--- a/src/main/java/org/bukkit/World.java
|
|
|
|
+++ b/src/main/java/org/bukkit/World.java
|
|
|
|
@@ -1,6 +1,9 @@
|
|
|
|
package org.bukkit;
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
+import org.bukkit.generator.ChunkGenerator;
|
|
|
|
+
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
import java.util.Collection;
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.List;
|
2023-05-12 11:10:08 +00:00
|
|
|
@@ -623,6 +626,256 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
|
2021-06-11 12:02:28 +00:00
|
|
|
@NotNull
|
|
|
|
public Collection<Entity> getEntitiesByClasses(@NotNull Class<?>... classes);
|
|
|
|
|
|
|
|
+ // Paper start
|
|
|
|
+ /**
|
2021-12-27 23:45:36 +00:00
|
|
|
+ * Gets nearby LivingEntities within the specified radius (bounding box)
|
2021-06-11 12:02:28 +00:00
|
|
|
+ * @param loc Center location
|
|
|
|
+ * @param radius Radius
|
|
|
|
+ * @return the collection of entities near location. This will always be a non-null collection.
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ public default Collection<LivingEntity> getNearbyLivingEntities(@NotNull Location loc, double radius) {
|
|
|
|
+ return getNearbyEntitiesByType(org.bukkit.entity.LivingEntity.class, loc, radius, radius, radius);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
2021-12-27 23:45:36 +00:00
|
|
|
+ * Gets nearby LivingEntities within the specified radius (bounding box)
|
2021-06-11 12:02:28 +00:00
|
|
|
+ * @param loc Center location
|
|
|
|
+ * @param xzRadius X/Z Radius
|
|
|
|
+ * @param yRadius Y Radius
|
|
|
|
+ * @return the collection of entities near location. This will always be a non-null collection.
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ public default Collection<LivingEntity> getNearbyLivingEntities(@NotNull Location loc, double xzRadius, double yRadius) {
|
|
|
|
+ return getNearbyEntitiesByType(org.bukkit.entity.LivingEntity.class, loc, xzRadius, yRadius, xzRadius);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
2021-12-27 23:45:36 +00:00
|
|
|
+ * Gets nearby LivingEntities within the specified radius (bounding box)
|
2021-06-11 12:02:28 +00:00
|
|
|
+ * @param loc Center location
|
|
|
|
+ * @param xRadius X Radius
|
|
|
|
+ * @param yRadius Y Radius
|
|
|
|
+ * @param zRadius Z radius
|
|
|
|
+ * @return the collection of entities near location. This will always be a non-null collection.
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ public default Collection<LivingEntity> getNearbyLivingEntities(@NotNull Location loc, double xRadius, double yRadius, double zRadius) {
|
|
|
|
+ return getNearbyEntitiesByType(org.bukkit.entity.LivingEntity.class, loc, xRadius, yRadius, zRadius);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
2021-12-27 23:45:36 +00:00
|
|
|
+ * Gets nearby LivingEntities within the specified radius (bounding box)
|
2021-06-11 12:02:28 +00:00
|
|
|
+ * @param loc Center location
|
|
|
|
+ * @param radius X Radius
|
|
|
|
+ * @param predicate a predicate used to filter results
|
|
|
|
+ * @return the collection of living entities near location. This will always be a non-null collection
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ public default Collection<LivingEntity> getNearbyLivingEntities(@NotNull Location loc, double radius, @Nullable Predicate<LivingEntity> predicate) {
|
|
|
|
+ return getNearbyEntitiesByType(org.bukkit.entity.LivingEntity.class, loc, radius, radius, radius, predicate);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
2021-12-27 23:45:36 +00:00
|
|
|
+ * Gets nearby LivingEntities within the specified radius (bounding box)
|
2021-06-11 12:02:28 +00:00
|
|
|
+ * @param loc Center location
|
|
|
|
+ * @param xzRadius X/Z Radius
|
|
|
|
+ * @param yRadius Y Radius
|
|
|
|
+ * @param predicate a predicate used to filter results
|
|
|
|
+ * @return the collection of living entities near location. This will always be a non-null collection
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ public default Collection<LivingEntity> getNearbyLivingEntities(@NotNull Location loc, double xzRadius, double yRadius, @Nullable Predicate<LivingEntity> predicate) {
|
|
|
|
+ return getNearbyEntitiesByType(org.bukkit.entity.LivingEntity.class, loc, xzRadius, yRadius, xzRadius, predicate);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
2021-12-27 23:45:36 +00:00
|
|
|
+ * Gets nearby LivingEntities within the specified radius (bounding box)
|
2021-06-11 12:02:28 +00:00
|
|
|
+ * @param loc Center location
|
|
|
|
+ * @param xRadius X Radius
|
|
|
|
+ * @param yRadius Y Radius
|
|
|
|
+ * @param zRadius Z radius
|
|
|
|
+ * @param predicate a predicate used to filter results
|
|
|
|
+ * @return the collection of living entities near location. This will always be a non-null collection.
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ public default Collection<LivingEntity> getNearbyLivingEntities(@NotNull Location loc, double xRadius, double yRadius, double zRadius, @Nullable Predicate<LivingEntity> predicate) {
|
|
|
|
+ return getNearbyEntitiesByType(org.bukkit.entity.LivingEntity.class, loc, xRadius, yRadius, zRadius, predicate);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Gets nearby players within the specified radius (bounding box)
|
|
|
|
+ * @param loc Center location
|
|
|
|
+ * @param radius X/Y/Z Radius
|
|
|
|
+ * @return the collection of living entities near location. This will always be a non-null collection.
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ public default Collection<Player> getNearbyPlayers(@NotNull Location loc, double radius) {
|
|
|
|
+ return getNearbyEntitiesByType(org.bukkit.entity.Player.class, loc, radius, radius, radius);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Gets nearby players within the specified radius (bounding box)
|
|
|
|
+ * @param loc Center location
|
|
|
|
+ * @param xzRadius X/Z Radius
|
|
|
|
+ * @param yRadius Y Radius
|
|
|
|
+ * @return the collection of living entities near location. This will always be a non-null collection.
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ public default Collection<Player> getNearbyPlayers(@NotNull Location loc, double xzRadius, double yRadius) {
|
|
|
|
+ return getNearbyEntitiesByType(org.bukkit.entity.Player.class, loc, xzRadius, yRadius, xzRadius);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Gets nearby players within the specified radius (bounding box)
|
|
|
|
+ * @param loc Center location
|
|
|
|
+ * @param xRadius X Radius
|
|
|
|
+ * @param yRadius Y Radius
|
|
|
|
+ * @param zRadius Z Radius
|
|
|
|
+ * @return the collection of players near location. This will always be a non-null collection.
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ public default Collection<Player> getNearbyPlayers(@NotNull Location loc, double xRadius, double yRadius, double zRadius) {
|
|
|
|
+ return getNearbyEntitiesByType(org.bukkit.entity.Player.class, loc, xRadius, yRadius, zRadius);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Gets nearby players within the specified radius (bounding box)
|
|
|
|
+ * @param loc Center location
|
|
|
|
+ * @param radius X/Y/Z Radius
|
|
|
|
+ * @param predicate a predicate used to filter results
|
|
|
|
+ * @return the collection of players near location. This will always be a non-null collection.
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ public default Collection<Player> getNearbyPlayers(@NotNull Location loc, double radius, @Nullable Predicate<Player> predicate) {
|
|
|
|
+ return getNearbyEntitiesByType(org.bukkit.entity.Player.class, loc, radius, radius, radius, predicate);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Gets nearby players within the specified radius (bounding box)
|
|
|
|
+ * @param loc Center location
|
|
|
|
+ * @param xzRadius X/Z Radius
|
|
|
|
+ * @param yRadius Y Radius
|
|
|
|
+ * @param predicate a predicate used to filter results
|
|
|
|
+ * @return the collection of players near location. This will always be a non-null collection.
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ public default Collection<Player> getNearbyPlayers(@NotNull Location loc, double xzRadius, double yRadius, @Nullable Predicate<Player> predicate) {
|
|
|
|
+ return getNearbyEntitiesByType(org.bukkit.entity.Player.class, loc, xzRadius, yRadius, xzRadius, predicate);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Gets nearby players within the specified radius (bounding box)
|
|
|
|
+ * @param loc Center location
|
|
|
|
+ * @param xRadius X Radius
|
|
|
|
+ * @param yRadius Y Radius
|
|
|
|
+ * @param zRadius Z Radius
|
|
|
|
+ * @param predicate a predicate used to filter results
|
|
|
|
+ * @return the collection of players near location. This will always be a non-null collection.
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ public default Collection<Player> getNearbyPlayers(@NotNull Location loc, double xRadius, double yRadius, double zRadius, @Nullable Predicate<Player> predicate) {
|
|
|
|
+ return getNearbyEntitiesByType(org.bukkit.entity.Player.class, loc, 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 loc Center location
|
|
|
|
+ * @param radius X/Y/Z radius to search within
|
|
|
|
+ * @param <T> the entity type
|
|
|
|
+ * @return the collection of entities near location. This will always be a non-null collection.
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ public default <T extends Entity> Collection<T> getNearbyEntitiesByType(@Nullable Class<? extends T> clazz, @NotNull Location loc, double radius) {
|
|
|
|
+ return getNearbyEntitiesByType(clazz, loc, 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 loc Center location
|
|
|
|
+ * @param xzRadius X/Z radius to search within
|
|
|
|
+ * @param yRadius Y radius to search within
|
|
|
|
+ * @param <T> the entity type
|
|
|
|
+ * @return the collection of entities near location. This will always be a non-null collection.
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ public default <T extends Entity> Collection<T> getNearbyEntitiesByType(@Nullable Class<? extends T> clazz, @NotNull Location loc, double xzRadius, double yRadius) {
|
|
|
|
+ return getNearbyEntitiesByType(clazz, loc, 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 loc Center location
|
|
|
|
+ * @param xRadius X Radius
|
|
|
|
+ * @param yRadius Y Radius
|
|
|
|
+ * @param zRadius Z Radius
|
|
|
|
+ * @param <T> the entity type
|
|
|
|
+ * @return the collection of entities near location. This will always be a non-null collection.
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ public default <T extends Entity> Collection<T> getNearbyEntitiesByType(@Nullable Class<? extends T> clazz, @NotNull Location loc, double xRadius, double yRadius, double zRadius) {
|
|
|
|
+ return getNearbyEntitiesByType(clazz, loc, 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 loc Center location
|
|
|
|
+ * @param radius X/Y/Z radius to search within
|
|
|
|
+ * @param predicate a predicate used to filter results
|
|
|
|
+ * @param <T> the entity type
|
|
|
|
+ * @return the collection of entities near location. This will always be a non-null collection.
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ public default <T extends Entity> Collection<T> getNearbyEntitiesByType(@Nullable Class<? extends T> clazz, @NotNull Location loc, double radius, @Nullable Predicate<T> predicate) {
|
|
|
|
+ return getNearbyEntitiesByType(clazz, loc, 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 loc Center location
|
|
|
|
+ * @param xzRadius X/Z radius to search within
|
|
|
|
+ * @param yRadius Y radius to search within
|
|
|
|
+ * @param predicate a predicate used to filter results
|
|
|
|
+ * @param <T> the entity type
|
|
|
|
+ * @return the collection of entities near location. This will always be a non-null collection.
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ public default <T extends Entity> Collection<T> getNearbyEntitiesByType(@Nullable Class<? extends T> clazz, @NotNull Location loc, double xzRadius, double yRadius, @Nullable Predicate<T> predicate) {
|
|
|
|
+ return getNearbyEntitiesByType(clazz, loc, 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 loc Center location
|
|
|
|
+ * @param xRadius X Radius
|
|
|
|
+ * @param yRadius Y Radius
|
|
|
|
+ * @param zRadius Z Radius
|
|
|
|
+ * @param predicate a predicate used to filter results
|
|
|
|
+ * @param <T> the entity type
|
|
|
|
+ * @return the collection of entities near location. This will always be a non-null collection.
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ public default <T extends Entity> Collection<T> getNearbyEntitiesByType(@Nullable Class<? extends Entity> clazz, @NotNull Location loc, double xRadius, double yRadius, double zRadius, @Nullable Predicate<T> predicate) {
|
|
|
|
+ if (clazz == null) {
|
|
|
|
+ clazz = Entity.class;
|
|
|
|
+ }
|
|
|
|
+ List<T> nearby = new ArrayList<>();
|
|
|
|
+ for (Entity bukkitEntity : getNearbyEntities(loc, xRadius, yRadius, zRadius)) {
|
|
|
|
+ //noinspection unchecked
|
|
|
|
+ if (clazz.isAssignableFrom(bukkitEntity.getClass()) && (predicate == null || predicate.test((T) bukkitEntity))) {
|
|
|
|
+ //noinspection unchecked
|
|
|
|
+ nearby.add((T) bukkitEntity);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return nearby;
|
|
|
|
+ }
|
|
|
|
+ // Paper end
|
|
|
|
+
|
|
|
|
/**
|
|
|
|
* Get a list of all players in this World
|
|
|
|
*
|