Paper experimental fix
This commit is contained in:
		| @@ -86,6 +86,7 @@ public class DisguiseUtilities { | ||||
|     private static long velocityTime; | ||||
|     private static int velocityID; | ||||
|     private static HashMap<UUID, ArrayList<Integer>> disguiseLoading = new HashMap<>(); | ||||
|     private static boolean runningPaper = Bukkit.getServer().getBukkitVersion().contains("Paper"); | ||||
|  | ||||
|     public static void setPlayerVelocity(Player player) { | ||||
|         velocityID = player.getEntityId(); | ||||
| @@ -736,22 +737,6 @@ public class DisguiseUtilities { | ||||
|         }, LibsDisguises.getInstance().getConfig().getBoolean("ContactMojangServers", true)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Pass in a set, check if it's a hashset. If it's not, return false. If you pass in something else, you failed. | ||||
|      * | ||||
|      * @param obj | ||||
|      * @return | ||||
|      */ | ||||
|     private static boolean isHashSet(Object obj) { | ||||
|         if (obj instanceof HashSet) | ||||
|             return true; // It's Spigot/Bukkit | ||||
|  | ||||
|         if (obj instanceof Set) | ||||
|             return false; // It's PaperSpigot/SportsBukkit | ||||
|  | ||||
|         throw new IllegalArgumentException("Object passed was not either a hashset or set!"); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Thread safe to use. This returns a GameProfile. And if its GameProfile doesn't have a skin blob. Then it does | ||||
|      * a lookup | ||||
| @@ -1255,11 +1240,12 @@ public class DisguiseUtilities { | ||||
|             Object entityTrackerEntry = ReflectionManager.getEntityTrackerEntry(player); | ||||
|  | ||||
|             if (entityTrackerEntry != null) { | ||||
|                 Object trackedPlayersObj = ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers") | ||||
|                         .get(entityTrackerEntry); | ||||
|  | ||||
|                 // If the tracker exists. Remove himself from his tracker | ||||
|                 if (isHashSet(trackedPlayersObj)) { | ||||
|                 if (runningPaper) { | ||||
|                     Object trackedPlayersObj = ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers") | ||||
|                             .get(entityTrackerEntry); | ||||
|  | ||||
|                     ((Set<Object>) trackedPlayersObj).remove(ReflectionManager.getNmsEntity(player)); | ||||
|                 } else { | ||||
|                     ((Map<Object, Object>) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayerMap") | ||||
| @@ -1545,12 +1531,12 @@ public class DisguiseUtilities { | ||||
|  | ||||
|             setupSelfDisguiseScoreboard(player); | ||||
|  | ||||
|             // Add himself to his own entity tracker | ||||
|             Object trackedPlayersObj = ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers") | ||||
|                     .get(entityTrackerEntry); | ||||
|  | ||||
|             // Check for code differences in PaperSpigot vs Spigot | ||||
|             if (isHashSet(trackedPlayersObj)) { | ||||
|             if (runningPaper) { | ||||
|                 // Add himself to his own entity tracker | ||||
|                 Object trackedPlayersObj = ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers") | ||||
|                         .get(entityTrackerEntry); | ||||
|  | ||||
|                 ((Set<Object>) trackedPlayersObj).add(ReflectionManager.getNmsEntity(player)); | ||||
|             } else { | ||||
|                 ((Map<Object, Object>) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayerMap") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user