From 40d5e6c023cb002a597c474b8fb3c3f36fa8555a Mon Sep 17 00:00:00 2001 From: Jishuna Date: Tue, 3 Oct 2023 07:26:56 +1100 Subject: [PATCH] #1190: Add Entity#getTrackedBy --- .../craftbukkit/entity/CraftEntity.java | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java index 83f5e00e6..b093c78f8 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -3,6 +3,7 @@ package org.bukkit.craftbukkit.entity; import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.base.Predicates; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import java.util.List; import java.util.Set; @@ -13,6 +14,7 @@ import net.minecraft.network.chat.IChatBaseComponent; import net.minecraft.server.level.EntityPlayer; import net.minecraft.server.level.PlayerChunkMap; import net.minecraft.server.level.WorldServer; +import net.minecraft.server.network.ServerPlayerConnection; import net.minecraft.world.entity.Display; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityAreaEffectCloud; @@ -22,7 +24,6 @@ import net.minecraft.world.entity.EntityFlying; import net.minecraft.world.entity.EntityLightning; import net.minecraft.world.entity.EntityLiving; import net.minecraft.world.entity.EntityTameableAnimal; -import net.minecraft.world.entity.EntityTypes; import net.minecraft.world.entity.GlowSquid; import net.minecraft.world.entity.Interaction; import net.minecraft.world.entity.Marker; @@ -163,7 +164,6 @@ import net.minecraft.world.entity.vehicle.EntityMinecartTNT; import net.minecraft.world.phys.AxisAlignedBB; import org.bukkit.EntityEffect; import org.bukkit.Location; -import org.bukkit.Registry; import org.bukkit.Server; import org.bukkit.Sound; import org.bukkit.World; @@ -177,7 +177,6 @@ import org.bukkit.craftbukkit.persistence.CraftPersistentDataContainer; import org.bukkit.craftbukkit.persistence.CraftPersistentDataTypeRegistry; import org.bukkit.craftbukkit.util.CraftChatMessage; import org.bukkit.craftbukkit.util.CraftLocation; -import org.bukkit.craftbukkit.util.CraftNamespacedKey; import org.bukkit.craftbukkit.util.CraftSpawnCategory; import org.bukkit.craftbukkit.util.CraftVector; import org.bukkit.entity.EntityType; @@ -917,6 +916,23 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { return getHandle().visibleByDefault; } + @Override + public Set getTrackedBy() { + Preconditions.checkState(!entity.generation, "Cannot get tracking players during world generation"); + ImmutableSet.Builder players = ImmutableSet.builder(); + + WorldServer world = ((CraftWorld) getWorld()).getHandle(); + PlayerChunkMap.EntityTracker entityTracker = world.getChunkSource().chunkMap.entityMap.get(getEntityId()); + + if (entityTracker != null) { + for (ServerPlayerConnection connection : entityTracker.seenBy) { + players.add(connection.getPlayer().getBukkitEntity()); + } + } + + return players.build(); + } + @Override public void sendMessage(String message) {