From 1b889688a5861b7770970b75c6b7183ba7f22164 Mon Sep 17 00:00:00 2001 From: TonytheMacaroni Date: Mon, 14 Apr 2025 04:12:48 -0400 Subject: [PATCH] Add Entity#isTrackedBy (#12332) --- .../src/main/java/org/bukkit/entity/Entity.java | 9 +++++++++ .../org/bukkit/craftbukkit/entity/CraftEntity.java | 12 ++++++++++++ 2 files changed, 21 insertions(+) diff --git a/paper-api/src/main/java/org/bukkit/entity/Entity.java b/paper-api/src/main/java/org/bukkit/entity/Entity.java index 5a3a538c56..bb6c6b3477 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Entity.java +++ b/paper-api/src/main/java/org/bukkit/entity/Entity.java @@ -698,6 +698,15 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent @NotNull Set getTrackedBy(); + /** + * Checks to see if a player is currently tracking this entity. + * + * @param player the player to check + * @return if the player is currently tracking this entity + * @see #getTrackedBy() + */ + boolean isTrackedBy(@NotNull Player player); + /** * Sets whether the entity has a team colored (default: white) glow. * diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java index 9c249638eb..c8caeba773 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -725,6 +725,18 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { return players.build(); } + @Override + public boolean isTrackedBy(final Player player) { + Preconditions.checkState(!this.entity.generation, "Cannot check tracking players during world generation"); + Preconditions.checkArgument(player != null, "Player cannot be null"); + + ServerLevel world = ((CraftWorld) this.getWorld()).getHandle(); + ChunkMap.TrackedEntity entityTracker = world.getChunkSource().chunkMap.entityMap.get(this.getEntityId()); + if (entityTracker == null) return false; + + return entityTracker.seenBy.contains(((CraftPlayer) player).getHandle().connection); + } + @Override public void sendMessage(String message) {