mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-15 07:01:36 +08:00
5c7081fecc
* Updated Upstream (Bukkit/CraftBukkit) Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 45690fe9 SPIGOT-5047: Correct slot types for 1.14 inventories CraftBukkit Changes:4090d01f
SPIGOT-5047: Correct slot types for 1.14 inventoriese8c08362
SPIGOT-5046: World#getLoadedChunks returning inaccessible cached chunks.d445af3b
SPIGOT-5067: Add item meta for 1.14 spawn eggs * Bring Chunk load checks in-line with spigot As of the last upstream merge spigot now checks ticket level status when returning loaded chunks for a world from api. Now our checks will respect that decision. * Fix spawn ticket levels Vanilla would keep the inner chunks of spawn available for ticking, however my changes made all chunks non-ticking. Resolve by changing ticket levels for spawn chunks inside the border to respect this behavior. * Make World#getChunkIfLoadedImmediately return only entity ticking chunks Mojang appears to be using chunks with level > 33 (non-ticking chunks) as cached chunks and not actually loaded chunks. * Bring all loaded checks in line with spigot Loaded chunks must be at least border chunks, or level <= 33
296 lines
14 KiB
Diff
296 lines
14 KiB
Diff
From b6d5548e3c0283d1890cd693fa897857dbd51753 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
|
|
index 2fe46faf0..e1e674bab 100644
|
|
--- 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;
|
|
@@ -497,6 +500,256 @@ public interface World extends PluginMessageRecipient, Metadatable {
|
|
@NotNull
|
|
public Collection<Entity> getEntitiesByClasses(@NotNull Class<?>... classes);
|
|
|
|
+ // Paper start
|
|
+ /**
|
|
+ * Gets nearby players 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.
|
|
+ */
|
|
+ @NotNull
|
|
+ public default Collection<LivingEntity> getNearbyLivingEntities(@NotNull Location loc, double radius) {
|
|
+ return getNearbyEntitiesByType(org.bukkit.entity.LivingEntity.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 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);
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * 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 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);
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets nearby players 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
|
|
+ */
|
|
+ @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);
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * 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 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);
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * 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 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
|
|
*
|
|
diff --git a/src/main/java/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java b/src/main/java/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java
|
|
index 6c09ea6c6..76c4a1a6e 100644
|
|
--- a/src/main/java/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java
|
|
+++ b/src/main/java/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java
|
|
@@ -42,8 +42,7 @@ public class AsyncPlayerPreLoginEvent extends Event {
|
|
return profile;
|
|
}
|
|
|
|
- /**
|
|
- * Changes the PlayerProfile the player will login as
|
|
+ /* * Changes the PlayerProfile the player will login as
|
|
* @param profile The profile to use
|
|
*/
|
|
public void setPlayerProfile(@NotNull PlayerProfile profile) {
|
|
--
|
|
2.21.0
|
|
|