diff --git a/src/main/java/net/citizensnpcs/npc/CitizensNPC.java b/src/main/java/net/citizensnpcs/npc/CitizensNPC.java index 5e3d1e1b3..830f6c550 100644 --- a/src/main/java/net/citizensnpcs/npc/CitizensNPC.java +++ b/src/main/java/net/citizensnpcs/npc/CitizensNPC.java @@ -31,6 +31,7 @@ import org.bukkit.craftbukkit.v1_7_R1.entity.CraftEntity; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; import org.bukkit.metadata.FixedMetadataValue; @@ -217,7 +218,8 @@ public class CitizensNPC extends AbstractNPC { navigator.run(); if (!getNavigator().isNavigating() && getEntity().getWorld().getTime() % 30 == 0) { - NMS.sendPacketNearby(getStoredLocation(), + Player player = getEntity() instanceof Player ? (Player) getEntity() : null; + NMS.sendPacketNearby(player, getStoredLocation(), new PacketPlayOutEntityTeleport(NMS.getHandle(getEntity()))); } diff --git a/src/main/java/net/citizensnpcs/npc/entity/EntityHumanNPC.java b/src/main/java/net/citizensnpcs/npc/entity/EntityHumanNPC.java index 9be2a2c29..c24520d99 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/EntityHumanNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/EntityHumanNPC.java @@ -277,7 +277,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder { packets[5] = new PacketPlayOutPlayerInfo(getBukkitEntity().getPlayerListName(), !removeFromPlayerList, removeFromPlayerList ? 9999 : ping); } - NMS.sendPacketsNearby(current, packets); + NMS.sendPacketsNearby(getBukkitEntity(), current, packets); packetUpdateCount = 0; } } diff --git a/src/main/java/net/citizensnpcs/util/NMS.java b/src/main/java/net/citizensnpcs/util/NMS.java index cec7778bf..bb72c9f42 100644 --- a/src/main/java/net/citizensnpcs/util/NMS.java +++ b/src/main/java/net/citizensnpcs/util/NMS.java @@ -342,19 +342,19 @@ public class NMS { ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet); } - public static void sendPacketNearby(Location location, Packet packet) { - NMS.sendPacketsNearby(location, Arrays.asList(packet), 64); + public static void sendPacketNearby(Player from, Location location, Packet packet) { + NMS.sendPacketsNearby(from, location, Arrays.asList(packet), 64); } - public static void sendPacketsNearby(Location location, Collection packets) { - NMS.sendPacketsNearby(location, packets, 64); + public static void sendPacketsNearby(Player from, Location location, Collection packets) { + NMS.sendPacketsNearby(from, location, packets, 64); } - public static void sendPacketsNearby(Location location, Collection packets, double radius) { + public static void sendPacketsNearby(Player from, Location location, Collection packets, double radius) { radius *= radius; final org.bukkit.World world = location.getWorld(); for (Player ply : Bukkit.getServer().getOnlinePlayers()) { - if (ply == null || world != ply.getWorld()) { + if (ply == null || world != ply.getWorld() || (from != null && ply.canSee(from))) { continue; } if (location.distanceSquared(ply.getLocation(PACKET_CACHE_LOCATION)) > radius) { @@ -366,8 +366,8 @@ public class NMS { } } - public static void sendPacketsNearby(Location location, Packet... packets) { - NMS.sendPacketsNearby(location, Arrays.asList(packets), 64); + public static void sendPacketsNearby(Player from, Location location, Packet... packets) { + NMS.sendPacketsNearby(from, location, Arrays.asList(packets), 64); } public static void sendToOnline(Packet... packets) { diff --git a/src/main/java/net/citizensnpcs/util/PlayerAnimation.java b/src/main/java/net/citizensnpcs/util/PlayerAnimation.java index 71bc52a85..7108dc3a6 100644 --- a/src/main/java/net/citizensnpcs/util/PlayerAnimation.java +++ b/src/main/java/net/citizensnpcs/util/PlayerAnimation.java @@ -119,6 +119,7 @@ public enum PlayerAnimation { } protected void sendPacketNearby(Packet packet, EntityPlayer player, int radius) { - NMS.sendPacketsNearby(player.getBukkitEntity().getLocation(), Arrays.asList(packet), radius); + NMS.sendPacketsNearby(player.getBukkitEntity(), player.getBukkitEntity().getLocation(), Arrays.asList(packet), + radius); } }