mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-29 15:49:00 +01:00
Additional world.getNearbyEntities API's
Provides more methods to get nearby entities, and filter by types and predicates
This commit is contained in:
parent
228f9bab1c
commit
f8d5489645
1 changed files with 235 additions and 0 deletions
|
@ -1,6 +1,9 @@
|
||||||
package org.bukkit;
|
package org.bukkit;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import org.bukkit.generator.ChunkGenerator;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -663,6 +666,238 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
|
||||||
@NotNull
|
@NotNull
|
||||||
public Collection<Entity> getEntitiesByClasses(@NotNull Class<?>... classes);
|
public Collection<Entity> getEntitiesByClasses(@NotNull Class<?>... classes);
|
||||||
|
|
||||||
|
// Paper start - additional getNearbyEntities API
|
||||||
|
/**
|
||||||
|
* Gets nearby LivingEntities within the specified radius (bounding box)
|
||||||
|
* @param loc Center location
|
||||||
|
* @param radius Radius
|
||||||
|
* @return the collection of entities near location. This will always be a non-null collection.
|
||||||
|
*/
|
||||||
|
default @NotNull Collection<LivingEntity> getNearbyLivingEntities(final @NotNull Location loc, final double radius) {
|
||||||
|
return this.getNearbyEntitiesByType(LivingEntity.class, loc, radius, radius, radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets nearby LivingEntities within the specified radius (bounding box)
|
||||||
|
* @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.
|
||||||
|
*/
|
||||||
|
default @NotNull Collection<LivingEntity> getNearbyLivingEntities(final @NotNull Location loc, final double xzRadius, final double yRadius) {
|
||||||
|
return this.getNearbyEntitiesByType(LivingEntity.class, loc, xzRadius, yRadius, xzRadius);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets nearby LivingEntities 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 entities near location. This will always be a non-null collection.
|
||||||
|
*/
|
||||||
|
default @NotNull Collection<LivingEntity> getNearbyLivingEntities(final @NotNull Location loc, final double xRadius, final double yRadius, final double zRadius) {
|
||||||
|
return this.getNearbyEntitiesByType(LivingEntity.class, loc, xRadius, yRadius, zRadius);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets nearby LivingEntities within the specified radius (bounding box)
|
||||||
|
* @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
|
||||||
|
*/
|
||||||
|
default @NotNull Collection<LivingEntity> getNearbyLivingEntities(final @NotNull Location loc, final double radius, final @Nullable Predicate<? super LivingEntity> predicate) {
|
||||||
|
return this.getNearbyEntitiesByType(LivingEntity.class, loc, radius, radius, radius, predicate);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets nearby LivingEntities 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 living entities near location. This will always be a non-null collection
|
||||||
|
*/
|
||||||
|
default @NotNull Collection<LivingEntity> getNearbyLivingEntities(final @NotNull Location loc, final double xzRadius, final double yRadius, final @Nullable Predicate<? super LivingEntity> predicate) {
|
||||||
|
return this.getNearbyEntitiesByType(LivingEntity.class, loc, xzRadius, yRadius, xzRadius, predicate);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets nearby LivingEntities 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 living entities near location. This will always be a non-null collection.
|
||||||
|
*/
|
||||||
|
default @NotNull Collection<LivingEntity> getNearbyLivingEntities(final @NotNull Location loc, final double xRadius, final double yRadius, final double zRadius, final @Nullable Predicate<? super LivingEntity> predicate) {
|
||||||
|
return this.getNearbyEntitiesByType(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.
|
||||||
|
*/
|
||||||
|
default @NotNull Collection<Player> getNearbyPlayers(final @NotNull Location loc, final double radius) {
|
||||||
|
return this.getNearbyEntitiesByType(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.
|
||||||
|
*/
|
||||||
|
default @NotNull Collection<Player> getNearbyPlayers(final @NotNull Location loc, final double xzRadius, final double yRadius) {
|
||||||
|
return this.getNearbyEntitiesByType(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.
|
||||||
|
*/
|
||||||
|
default @NotNull Collection<Player> getNearbyPlayers(final @NotNull Location loc, final double xRadius, final double yRadius, final double zRadius) {
|
||||||
|
return this.getNearbyEntitiesByType(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.
|
||||||
|
*/
|
||||||
|
default @NotNull Collection<Player> getNearbyPlayers(final @NotNull Location loc, final double radius, final @Nullable Predicate<? super Player> predicate) {
|
||||||
|
return this.getNearbyEntitiesByType(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.
|
||||||
|
*/
|
||||||
|
default @NotNull Collection<Player> getNearbyPlayers(final @NotNull Location loc, final double xzRadius, final double yRadius, final @Nullable Predicate<? super Player> predicate) {
|
||||||
|
return this.getNearbyEntitiesByType(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.
|
||||||
|
*/
|
||||||
|
default @NotNull Collection<Player> getNearbyPlayers(final @NotNull Location loc, final double xRadius, final double yRadius, final double zRadius, final @Nullable Predicate<? super Player> predicate) {
|
||||||
|
return this.getNearbyEntitiesByType(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.
|
||||||
|
*/
|
||||||
|
default @NotNull <T extends Entity> Collection<T> getNearbyEntitiesByType(final @Nullable Class<? extends T> clazz, final @NotNull Location loc, final double radius) {
|
||||||
|
return this.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.
|
||||||
|
*/
|
||||||
|
default @NotNull <T extends Entity> Collection<T> getNearbyEntitiesByType(final @Nullable Class<? extends T> clazz, final @NotNull Location loc, final double xzRadius, final double yRadius) {
|
||||||
|
return this.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.
|
||||||
|
*/
|
||||||
|
default @NotNull <T extends Entity> Collection<T> getNearbyEntitiesByType(final @Nullable Class<? extends T> clazz, final @NotNull Location loc, final double xRadius, final double yRadius, final double zRadius) {
|
||||||
|
return this.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.
|
||||||
|
*/
|
||||||
|
default @NotNull <T extends Entity> Collection<T> getNearbyEntitiesByType(final @Nullable Class<? extends T> clazz, final @NotNull Location loc, final double radius, final @Nullable Predicate<? super T> predicate) {
|
||||||
|
return this.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.
|
||||||
|
*/
|
||||||
|
default @NotNull <T extends Entity> Collection<T> getNearbyEntitiesByType(final @Nullable Class<? extends T> clazz, final @NotNull Location loc, final double xzRadius, final double yRadius, final @Nullable Predicate<? super T> predicate) {
|
||||||
|
return this.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.
|
||||||
|
*/
|
||||||
|
default <T extends Entity> @NotNull Collection<T> getNearbyEntitiesByType(@Nullable Class<? extends Entity> clazz, final @NotNull Location loc, final double xRadius, final double yRadius, final double zRadius, final @Nullable Predicate<? super T> predicate) {
|
||||||
|
if (clazz == null) {
|
||||||
|
clazz = Entity.class;
|
||||||
|
}
|
||||||
|
final List<T> nearby = new ArrayList<>();
|
||||||
|
for (final Entity bukkitEntity : this.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 - additional getNearbyEntities API
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a list of all players in this World
|
* Get a list of all players in this World
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue