From 50fa13cef0e1cbbd3bc4ea77182eebf97a0c7075 Mon Sep 17 00:00:00 2001 From: mcmonkey4eva Date: Sun, 7 Dec 2014 18:04:13 -0800 Subject: [PATCH] Handle all cases of the packet in NMS.java --- .../java/net/citizensnpcs/EventListen.java | 14 ++++---------- .../npc/entity/HumanController.java | 8 +++----- src/main/java/net/citizensnpcs/util/NMS.java | 19 ++++++++++++++++--- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/main/java/net/citizensnpcs/EventListen.java b/src/main/java/net/citizensnpcs/EventListen.java index 06ef7a630..41c948410 100644 --- a/src/main/java/net/citizensnpcs/EventListen.java +++ b/src/main/java/net/citizensnpcs/EventListen.java @@ -326,8 +326,7 @@ public class EventListen implements Listener { public void run() { if (player.isOnline() && player.isValid() && npc.isSpawned() && npc.getEntity().getType() == EntityType.PLAYER) { - ((CraftPlayer) player).getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo - (EnumPlayerInfoAction.ADD_PLAYER, ((CraftPlayer) npc.getEntity()).getHandle())); + NMS.sendPlayerlistPacket(true, player, npc); ((CraftPlayer) player).getHandle().playerConnection.sendPacket(new PacketPlayOutNamedEntitySpawn (((CraftPlayer) npc.getEntity()).getHandle())); } @@ -338,8 +337,7 @@ public class EventListen implements Listener { public void run() { if (player.isOnline() && player.isValid() && npc.isSpawned() && npc.getEntity().getType() == EntityType.PLAYER) { - ((CraftPlayer) player).getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo - (EnumPlayerInfoAction.REMOVE_PLAYER, ((CraftPlayer) npc.getEntity()).getHandle())); + NMS.sendPlayerlistPacket(false, player, npc); } } }, 61); @@ -347,12 +345,8 @@ public class EventListen implements Listener { @EventHandler public void onPlayerTeleports(PlayerTeleportEvent event) { - if (event.getFrom().getY() > 255 || event.getFrom().getY() < 0 - || event.getTo().getY() > 255 || event.getTo().getY() < 0) { - return; // Don't fire if players go outside the world, as that would be more difficult to handle. - } - Location from = event.getFrom().getBlock().getLocation(); - Location to = event.getTo().getBlock().getLocation(); + Location from = roundLocation(event.getFrom()); + Location to = roundLocation(event.getTo()); if (from.equals(to)) { return; // Don't fire on every movement, just full block+. } diff --git a/src/main/java/net/citizensnpcs/npc/entity/HumanController.java b/src/main/java/net/citizensnpcs/npc/entity/HumanController.java index 5d3ccb54c..9086d0c5d 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/HumanController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/HumanController.java @@ -86,14 +86,13 @@ public class HumanController extends AbstractEntityController { } }, 1); handle.getBukkitEntity().setSleepingIgnored(true); - NMS.sendToOnline(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, handle)); + NMS.sendPlayerlistPacket(true, null, handle.getBukkitEntity()); Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), new Runnable() { @Override public void run() { // Double check that we're still spawned and haven't changed type. if (npc.isSpawned() && npc.getEntity().getType() == EntityType.PLAYER) { - NMS.sendToOnline(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, - ((CraftPlayer) getBukkitEntity()).getHandle())); + NMS.sendPlayerlistPacket(false, null, npc); } } }, 60); @@ -107,8 +106,7 @@ public class HumanController extends AbstractEntityController { @Override public void remove() { - NMS.sendToOnline(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, - ((CraftPlayer) getBukkitEntity()).getHandle())); + NMS.sendPlayerlistPacket(false, null, (CraftPlayer)getBukkitEntity()); super.remove(); } diff --git a/src/main/java/net/citizensnpcs/util/NMS.java b/src/main/java/net/citizensnpcs/util/NMS.java index 4c8db24c7..9f56d0730 100644 --- a/src/main/java/net/citizensnpcs/util/NMS.java +++ b/src/main/java/net/citizensnpcs/util/NMS.java @@ -500,10 +500,23 @@ public class NMS { } } + /** + * Send a PlayerInfo packet (adds or removes the NPC to or from the tab list) to the player. + * @param player The player to send the packet to, or null for all players. + */ public static void sendPlayerlistPacket(boolean showInPlayerlist, Player player, NPC npc) { - ((CraftPlayer)player).getHandle().playerConnection.sendPacket( - new PacketPlayOutPlayerInfo(showInPlayerlist ? EnumPlayerInfoAction.ADD_PLAYER: - EnumPlayerInfoAction.REMOVE_PLAYER, ((CraftPlayer) npc.getEntity()).getHandle())); + sendPlayerlistPacket(showInPlayerlist, player, (CraftPlayer)npc.getEntity()); + } + + public static void sendPlayerlistPacket(boolean showInPlayerlist, Player player, CraftPlayer npc) { + PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo(showInPlayerlist ? EnumPlayerInfoAction.ADD_PLAYER: + EnumPlayerInfoAction.REMOVE_PLAYER, npc.getHandle()); + if (player == null) { + sendToOnline(packet); + } + else { + ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet); + } } public static void updatePathfindingRange(NPC npc, float pathfindingRange) {