Send destroy packet as well. Can't trust mojang to properly send their packets
This commit is contained in:
		| @@ -530,9 +530,11 @@ public class DisguiseUtilities { | ||||
|     public static void refreshTracker(final TargetedDisguise disguise, String player) { | ||||
|         if (disguise.getEntity() != null && disguise.getEntity().isValid()) { | ||||
|             try { | ||||
|                 PacketContainer destroyPacket = getDestroyPacket(disguise.getEntity().getEntityId()); | ||||
|                 if (disguise.isDisguiseInUse() && disguise.getEntity() instanceof Player | ||||
|                         && ((Player) disguise.getEntity()).getName().equalsIgnoreCase(player)) { | ||||
|                     removeSelfDisguise((Player) disguise.getEntity()); | ||||
|                     ProtocolLibrary.getProtocolManager().sendServerPacket((Player) disguise.getEntity(), destroyPacket); | ||||
|                     Bukkit.getScheduler().scheduleSyncDelayedTask(libsDisguises, new Runnable() { | ||||
|                         public void run() { | ||||
|                             try { | ||||
| @@ -554,8 +556,10 @@ public class DisguiseUtilities { | ||||
|                                 ReflectionManager.getNmsClass("EntityPlayer")); | ||||
|                         HashSet cloned = (HashSet) trackedPlayers.clone(); | ||||
|                         for (final Object p : cloned) { | ||||
|                             if (player.equalsIgnoreCase(((Player) ReflectionManager.getBukkitEntity(p)).getName())) { | ||||
|                             Player pl = (Player) ReflectionManager.getBukkitEntity(p); | ||||
|                             if (player.equalsIgnoreCase((pl).getName())) { | ||||
|                                 clear.invoke(entityTrackerEntry, p); | ||||
|                                 ProtocolLibrary.getProtocolManager().sendServerPacket(pl, destroyPacket); | ||||
|                                 Bukkit.getScheduler().scheduleSyncDelayedTask(libsDisguises, new Runnable() { | ||||
|                                     public void run() { | ||||
|                                         try { | ||||
| @@ -582,6 +586,7 @@ public class DisguiseUtilities { | ||||
|     public static void refreshTrackers(Entity entity) { | ||||
|         if (entity.isValid()) { | ||||
|             try { | ||||
|                 PacketContainer destroyPacket = getDestroyPacket(entity.getEntityId()); | ||||
|                 final Object entityTrackerEntry = ReflectionManager.getEntityTrackerEntry(entity); | ||||
|                 if (entityTrackerEntry != null) { | ||||
|                     HashSet trackedPlayers = (HashSet) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers").get( | ||||
| @@ -595,6 +600,7 @@ public class DisguiseUtilities { | ||||
|                         Player player = (Player) ReflectionManager.getBukkitEntity(p); | ||||
|                         if (player != entity) { | ||||
|                             clear.invoke(entityTrackerEntry, p); | ||||
|                             ProtocolLibrary.getProtocolManager().sendServerPacket(player, destroyPacket); | ||||
|                             Bukkit.getScheduler().scheduleSyncDelayedTask(libsDisguises, new Runnable() { | ||||
|                                 public void run() { | ||||
|                                     try { | ||||
| @@ -618,9 +624,11 @@ public class DisguiseUtilities { | ||||
|      */ | ||||
|     public static void refreshTrackers(final TargetedDisguise disguise) { | ||||
|         if (disguise.getEntity().isValid()) { | ||||
|             PacketContainer destroyPacket = getDestroyPacket(disguise.getEntity().getEntityId()); | ||||
|             try { | ||||
|                 if (selfDisguised.contains(disguise.getEntity().getUniqueId()) && disguise.isDisguiseInUse()) { | ||||
|                     removeSelfDisguise((Player) disguise.getEntity()); | ||||
|                     ProtocolLibrary.getProtocolManager().sendServerPacket((Player) disguise.getEntity(), destroyPacket); | ||||
|                     Bukkit.getScheduler().scheduleSyncDelayedTask(libsDisguises, new Runnable() { | ||||
|                         public void run() { | ||||
|                             try { | ||||
| @@ -644,6 +652,7 @@ public class DisguiseUtilities { | ||||
|                         Player player = (Player) ReflectionManager.getBukkitEntity(p); | ||||
|                         if (disguise.getEntity() != player && disguise.canSee(player.getName())) { | ||||
|                             clear.invoke(entityTrackerEntry, p); | ||||
|                             ProtocolLibrary.getProtocolManager().sendServerPacket(player, destroyPacket); | ||||
|                             Bukkit.getScheduler().scheduleSyncDelayedTask(libsDisguises, new Runnable() { | ||||
|                                 public void run() { | ||||
|                                     try { | ||||
| @@ -662,6 +671,12 @@ public class DisguiseUtilities { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static PacketContainer getDestroyPacket(int... ids) { | ||||
|         PacketContainer destroyPacket = new PacketContainer(PacketType.Play.Server.ENTITY_DESTROY); | ||||
|         destroyPacket.getIntegerArrays().write(0, ids); | ||||
|         return destroyPacket; | ||||
|     } | ||||
|  | ||||
|     public static boolean removeDisguise(TargetedDisguise disguise) { | ||||
|         UUID entityId = disguise.getEntity().getUniqueId(); | ||||
|         if (getDisguises().containsKey(entityId) && getDisguises().get(entityId).remove(disguise)) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user