Instead of using Object's for gameprofiles. Use WrappedGameProfile
This commit is contained in:
		| @@ -2,6 +2,8 @@ package me.libraryaddict.disguise.disguisetypes; | ||||
|  | ||||
| import org.bukkit.entity.Player; | ||||
|  | ||||
| import com.comphenix.protocol.wrappers.WrappedGameProfile; | ||||
|  | ||||
| import me.libraryaddict.disguise.utilities.DisguiseUtilities; | ||||
| import me.libraryaddict.disguise.utilities.LibsProfileLookup; | ||||
| import me.libraryaddict.disguise.utilities.ReflectionManager; | ||||
| @@ -9,7 +11,7 @@ import me.libraryaddict.disguise.utilities.ReflectionManager.LibVersion; | ||||
|  | ||||
| public class PlayerDisguise extends TargetedDisguise { | ||||
|     private LibsProfileLookup currentLookup; | ||||
|     private Object gameProfile; | ||||
|     private WrappedGameProfile gameProfile; | ||||
|     private String playerName; | ||||
|     private String skinToUse; | ||||
|  | ||||
| @@ -53,7 +55,7 @@ public class PlayerDisguise extends TargetedDisguise { | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public Object getGameProfile() { | ||||
|     public WrappedGameProfile getGameProfile() { | ||||
|         if (getSkin() != null) { | ||||
|             if (gameProfile != null) { | ||||
|                 return gameProfile; | ||||
| @@ -79,7 +81,7 @@ public class PlayerDisguise extends TargetedDisguise { | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public void setGameProfile(Object gameProfile) { | ||||
|     public void setGameProfile(WrappedGameProfile gameProfile) { | ||||
|         this.gameProfile = ReflectionManager.getGameProfileWithThisSkin(null, getName(), gameProfile); | ||||
|     } | ||||
|  | ||||
| @@ -97,7 +99,7 @@ public class PlayerDisguise extends TargetedDisguise { | ||||
|                 currentLookup = new LibsProfileLookup() { | ||||
|  | ||||
|                     @Override | ||||
|                     public void onLookup(Object gameProfile) { | ||||
|                     public void onLookup(WrappedGameProfile gameProfile) { | ||||
|                         if (currentLookup == this && gameProfile != null) { | ||||
|                             setGameProfile(gameProfile); | ||||
|                             if (DisguiseUtilities.isDisguiseInUse(PlayerDisguise.this)) { | ||||
| @@ -109,7 +111,7 @@ public class PlayerDisguise extends TargetedDisguise { | ||||
|                         } | ||||
|                     } | ||||
|                 }; | ||||
|                 Object obj = DisguiseUtilities.getProfileFromMojang(this.skinToUse, currentLookup); | ||||
|                 WrappedGameProfile obj = DisguiseUtilities.getProfileFromMojang(this.skinToUse, currentLookup); | ||||
|                 if (obj != null) { | ||||
|                     setGameProfile(obj); | ||||
|                 } | ||||
|   | ||||
| @@ -38,6 +38,7 @@ import com.comphenix.protocol.ProtocolLibrary; | ||||
| import com.comphenix.protocol.ProtocolManager; | ||||
| import com.comphenix.protocol.events.PacketContainer; | ||||
| import com.comphenix.protocol.wrappers.WrappedDataWatcher; | ||||
| import com.comphenix.protocol.wrappers.WrappedGameProfile; | ||||
|  | ||||
| public class DisguiseUtilities { | ||||
|     /** | ||||
| @@ -58,7 +59,7 @@ public class DisguiseUtilities { | ||||
|     /** | ||||
|      * A hashmap storing the uuid and skin of a playername | ||||
|      */ | ||||
|     private static HashMap<String, Object> gameProfiles = new HashMap<String, Object>(); | ||||
|     private static HashMap<String, WrappedGameProfile> gameProfiles = new HashMap<String, WrappedGameProfile>(); | ||||
|     private static LibsDisguises libsDisguises; | ||||
|     private static HashMap<String, ArrayList<Object>> runnables = new HashMap<String, ArrayList<Object>>(); | ||||
|     /** | ||||
| @@ -122,7 +123,7 @@ public class DisguiseUtilities { | ||||
|         runnable.runTaskLater(libsDisguises, 20); | ||||
|     } | ||||
|  | ||||
|     public static void addGameProfile(String string, Object gameProfile) { | ||||
|     public static void addGameProfile(String string, WrappedGameProfile gameProfile) { | ||||
|         getGameProfiles().put(string, gameProfile); | ||||
|         addedByPlugins.add(string); | ||||
|     } | ||||
| @@ -263,7 +264,7 @@ public class DisguiseUtilities { | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|      | ||||
|  | ||||
|     public static TargetedDisguise getDisguise(Player observer, Entity entity) { | ||||
|         UUID entityId = entity.getUniqueId(); | ||||
|         if (futureDisguises.containsKey(entity.getEntityId())) { | ||||
| @@ -297,11 +298,11 @@ public class DisguiseUtilities { | ||||
|         return futureDisguises; | ||||
|     } | ||||
|  | ||||
|     public static Object getGameProfile(String playerName) { | ||||
|     public static WrappedGameProfile getGameProfile(String playerName) { | ||||
|         return gameProfiles.get(playerName); | ||||
|     } | ||||
|  | ||||
|     public static HashMap<String, Object> getGameProfiles() { | ||||
|     public static HashMap<String, WrappedGameProfile> getGameProfiles() { | ||||
|         return gameProfiles; | ||||
|     } | ||||
|  | ||||
| @@ -345,11 +346,11 @@ public class DisguiseUtilities { | ||||
|         return players; | ||||
|     } | ||||
|  | ||||
|     public static Object getProfileFromMojang(final PlayerDisguise disguise) { | ||||
|     public static WrappedGameProfile getProfileFromMojang(final PlayerDisguise disguise) { | ||||
|         return getProfileFromMojang(disguise.getName(), new LibsProfileLookup() { | ||||
|  | ||||
|             @Override | ||||
|             public void onLookup(Object gameProfile) { | ||||
|             public void onLookup(WrappedGameProfile gameProfile) { | ||||
|                 getAddedByPlugins().remove(disguise.getName()); | ||||
|                 if (DisguiseAPI.isDisguiseInUse(disguise)) { | ||||
|                     DisguiseUtilities.refreshTrackers(disguise); | ||||
| @@ -365,11 +366,11 @@ public class DisguiseUtilities { | ||||
|      * Thread safe to use. This returns a GameProfile. And if its GameProfile doesn't have a skin blob. Then it does a lookup | ||||
|      * using schedulers. The runnable is run once the GameProfile has been successfully dealt with | ||||
|      */ | ||||
|     public static Object getProfileFromMojang(String playerName, LibsProfileLookup runnableIfCantReturn) { | ||||
|     public static WrappedGameProfile getProfileFromMojang(String playerName, LibsProfileLookup runnableIfCantReturn) { | ||||
|         return getProfileFromMojang(playerName, (Object) runnableIfCantReturn); | ||||
|     } | ||||
|  | ||||
|     private static Object getProfileFromMojang(final String playerName, final Object runnable) { | ||||
|     private static WrappedGameProfile getProfileFromMojang(final String playerName, final Object runnable) { | ||||
|         if (gameProfiles.containsKey(playerName)) { | ||||
|             if (gameProfiles.get(playerName) != null) { | ||||
|                 return gameProfiles.get(playerName); | ||||
| @@ -378,7 +379,7 @@ public class DisguiseUtilities { | ||||
|             getAddedByPlugins().add(playerName); | ||||
|             Player player = Bukkit.getPlayerExact(playerName); | ||||
|             if (player != null) { | ||||
|                 Object gameProfile = ReflectionManager.getGameProfile(player); | ||||
|                 WrappedGameProfile gameProfile = ReflectionManager.getGameProfile(player); | ||||
|                 if (ReflectionManager.hasSkinBlob(gameProfile)) { | ||||
|                     gameProfiles.put(playerName, gameProfile); | ||||
|                     return gameProfile; | ||||
| @@ -389,7 +390,7 @@ public class DisguiseUtilities { | ||||
|             Bukkit.getScheduler().scheduleAsyncDelayedTask(libsDisguises, new Runnable() { | ||||
|                 public void run() { | ||||
|                     try { | ||||
|                         final Object gameProfile = lookupGameProfile(playerName); | ||||
|                         final WrappedGameProfile gameProfile = lookupGameProfile(playerName); | ||||
|                         Bukkit.getScheduler().scheduleSyncDelayedTask(libsDisguises, new Runnable() { | ||||
|                             public void run() { | ||||
|                                 if (gameProfiles.containsKey(playerName) && gameProfiles.get(playerName) == null) { | ||||
| @@ -430,7 +431,7 @@ public class DisguiseUtilities { | ||||
|      * Thread safe to use. This returns a GameProfile. And if its GameProfile doesn't have a skin blob. Then it does a lookup | ||||
|      * using schedulers. The runnable is run once the GameProfile has been successfully dealt with | ||||
|      */ | ||||
|     public static Object getProfileFromMojang(String playerName, Runnable runnableIfCantReturn) { | ||||
|     public static WrappedGameProfile getProfileFromMojang(String playerName, Runnable runnableIfCantReturn) { | ||||
|         return getProfileFromMojang(playerName, (Object) runnableIfCantReturn); | ||||
|     } | ||||
|  | ||||
| @@ -454,8 +455,8 @@ public class DisguiseUtilities { | ||||
|     /** | ||||
|      * This is called on a thread as it is thread blocking | ||||
|      */ | ||||
|     public static Object lookupGameProfile(String playerName) { | ||||
|         Object gameprofile = ReflectionManager.grabProfileAddUUID(playerName); | ||||
|     public static WrappedGameProfile lookupGameProfile(String playerName) { | ||||
|         WrappedGameProfile gameprofile = ReflectionManager.grabProfileAddUUID(playerName); | ||||
|         return ReflectionManager.getSkullBlob(gameprofile); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,8 @@ | ||||
| package me.libraryaddict.disguise.utilities; | ||||
|  | ||||
| import com.comphenix.protocol.wrappers.WrappedGameProfile; | ||||
|  | ||||
| public interface LibsProfileLookup { | ||||
|     public void onLookup(Object gameProfile); | ||||
|     public void onLookup(WrappedGameProfile gameProfile); | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -3,13 +3,15 @@ package me.libraryaddict.disguise.utilities; | ||||
| import java.lang.reflect.Field; | ||||
| import java.util.UUID; | ||||
|  | ||||
| import com.comphenix.protocol.wrappers.WrappedGameProfile; | ||||
|  | ||||
| import net.minecraft.util.com.mojang.authlib.GameProfile; | ||||
| import net.minecraft.util.com.mojang.authlib.ProfileLookupCallback; | ||||
|  | ||||
| public class LibsProfileLookupCaller implements ProfileLookupCallback { | ||||
|     private GameProfile gameProfile; | ||||
|     private WrappedGameProfile gameProfile; | ||||
|  | ||||
|     public GameProfile getGameProfile() { | ||||
|     public WrappedGameProfile getGameProfile() { | ||||
|         return gameProfile; | ||||
|     } | ||||
|  | ||||
| @@ -27,7 +29,7 @@ public class LibsProfileLookupCaller implements ProfileLookupCallback { | ||||
|  | ||||
|     @Override | ||||
|     public void onProfileLookupSucceeded(GameProfile profile) { | ||||
|         gameProfile = profile; | ||||
|         gameProfile = WrappedGameProfile.fromHandle(profile); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -49,6 +49,7 @@ import com.comphenix.protocol.reflect.StructureModifier; | ||||
| import com.comphenix.protocol.wrappers.WrappedAttribute; | ||||
| import com.comphenix.protocol.wrappers.WrappedAttribute.Builder; | ||||
| import com.comphenix.protocol.wrappers.WrappedDataWatcher; | ||||
| import com.comphenix.protocol.wrappers.WrappedGameProfile; | ||||
| import com.comphenix.protocol.wrappers.WrappedWatchableObject; | ||||
|  | ||||
| public class PacketsManager { | ||||
| @@ -196,7 +197,7 @@ public class PacketsManager { | ||||
|                     stringMods.write(i, ((PlayerDisguise) disguise).getName()); | ||||
|                 } | ||||
|             } else { | ||||
|                 Object gameProfile; | ||||
|                 WrappedGameProfile gameProfile; | ||||
|                 String name = ((PlayerDisguise) disguise).getName(); | ||||
|                 boolean removeName = false; | ||||
|                 if (!DisguiseUtilities.hasGameProfile(name)) { | ||||
| @@ -206,7 +207,7 @@ public class PacketsManager { | ||||
|                 if (removeName) { | ||||
|                     DisguiseUtilities.getAddedByPlugins().remove(name); | ||||
|                 } | ||||
|                 spawnPackets[0].getModifier().write(1, gameProfile); | ||||
|                 spawnPackets[0].getGameProfiles().write(0, gameProfile); | ||||
|             } | ||||
|             StructureModifier<Integer> intMods = spawnPackets[0].getIntegers(); | ||||
|             intMods.write(0, disguisedEntity.getEntityId()); | ||||
|   | ||||
| @@ -14,6 +14,8 @@ import org.bukkit.entity.Entity; | ||||
| import org.bukkit.entity.Player; | ||||
| import org.bukkit.inventory.ItemStack; | ||||
|  | ||||
| import com.comphenix.protocol.wrappers.WrappedGameProfile; | ||||
|  | ||||
| public class ReflectionManager { | ||||
|     public enum LibVersion { | ||||
|         V1_6, V1_7; | ||||
| @@ -90,10 +92,10 @@ public class ReflectionManager { | ||||
|                 Object playerinteractmanager = getNmsClass("PlayerInteractManager").getConstructor(getNmsClass("World")) | ||||
|                         .newInstance(world); | ||||
|                 if (LibVersion.is1_7()) { | ||||
|                     Object gameProfile = getGameProfile(null, "LibsDisguises"); | ||||
|                     WrappedGameProfile gameProfile = getGameProfile(null, "LibsDisguises"); | ||||
|                     entityObject = entityClass.getConstructor(getNmsClass("MinecraftServer"), getNmsClass("WorldServer"), | ||||
|                             gameProfile.getClass(), playerinteractmanager.getClass()).newInstance(minecraftServer, world, | ||||
|                             gameProfile, playerinteractmanager); | ||||
|                             gameProfile.getHandleType(), playerinteractmanager.getClass()).newInstance(minecraftServer, world, | ||||
|                             gameProfile.getHandle(), playerinteractmanager); | ||||
|                 } else { | ||||
|                     entityObject = entityClass.getConstructor(getNmsClass("MinecraftServer"), getNmsClass("World"), String.class, | ||||
|                             playerinteractmanager.getClass()).newInstance(minecraftServer, world, "LibsDisguises", | ||||
| @@ -205,47 +207,26 @@ public class ReflectionManager { | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     public static Object getGameProfile(Player player) { | ||||
|     public static WrappedGameProfile getGameProfile(Player player) { | ||||
|         if (LibVersion.is1_7()) { | ||||
|             try { | ||||
|                 return getNmsClass("EntityHuman").getMethod("getProfile").invoke(getNmsEntity(player)); | ||||
|             } catch (Exception ex) { | ||||
|                 ex.printStackTrace(); | ||||
|             } | ||||
|             return WrappedGameProfile.fromPlayer(player); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     public static Object getGameProfile(UUID uuid, String playerName) { | ||||
|     public static WrappedGameProfile getGameProfile(UUID uuid, String playerName) { | ||||
|         try { | ||||
|             try { | ||||
|                 return Class.forName("net.minecraft.util.com.mojang.authlib.GameProfile") | ||||
|                         .getConstructor(UUID.class, String.class) | ||||
|                         .newInstance(uuid != null ? uuid : UUID.randomUUID(), playerName); | ||||
|             } catch (NoSuchMethodException ex) { | ||||
|                 return Class.forName("net.minecraft.util.com.mojang.authlib.GameProfile") | ||||
|                         .getConstructor(String.class, String.class).newInstance(uuid != null ? uuid.toString() : "", playerName); | ||||
|             } | ||||
|             return new WrappedGameProfile(uuid != null ? uuid : UUID.randomUUID(), playerName); | ||||
|         } catch (Exception ex) { | ||||
|             ex.printStackTrace(); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     public static Object getGameProfileWithThisSkin(UUID uuid, String playerName, Object profileWithSkin) { | ||||
|     public static WrappedGameProfile getGameProfileWithThisSkin(UUID uuid, String playerName, WrappedGameProfile profileWithSkin) { | ||||
|         try { | ||||
|             Object gameProfile; | ||||
|             try { | ||||
|                 gameProfile = Class.forName("net.minecraft.util.com.mojang.authlib.GameProfile") | ||||
|                         .getConstructor(UUID.class, String.class) | ||||
|                         .newInstance(uuid != null ? uuid : UUID.randomUUID(), playerName); | ||||
|             } catch (NoSuchMethodException ex) { | ||||
|                 gameProfile = Class.forName("net.minecraft.util.com.mojang.authlib.GameProfile") | ||||
|                         .getConstructor(String.class, String.class).newInstance(uuid != null ? uuid.toString() : "", playerName); | ||||
|             } | ||||
|             Field properties = gameProfile.getClass().getDeclaredField("properties"); | ||||
|             properties.setAccessible(true); | ||||
|             properties.set(gameProfile, properties.get(profileWithSkin)); | ||||
|             WrappedGameProfile gameProfile = new WrappedGameProfile(uuid != null ? uuid : UUID.randomUUID(), playerName); | ||||
|             gameProfile.getProperties().putAll(profileWithSkin.getProperties()); | ||||
|             return gameProfile; | ||||
|         } catch (Exception ex) { | ||||
|             ex.printStackTrace(); | ||||
| @@ -301,14 +282,15 @@ public class ReflectionManager { | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     public static Object getSkullBlob(Object gameProfile) { | ||||
|     public static WrappedGameProfile getSkullBlob(WrappedGameProfile gameProfile) { | ||||
|         try { | ||||
|             Object minecraftServer = getNmsClass("MinecraftServer").getMethod("getServer").invoke(null); | ||||
|             for (Method method : getNmsClass("MinecraftServer").getMethods()) { | ||||
|                 if (method.getReturnType().getSimpleName().equals("MinecraftSessionService")) { | ||||
|                     Object session = method.invoke(minecraftServer); | ||||
|                     return session.getClass().getMethod("fillProfileProperties", gameProfile.getClass(), boolean.class) | ||||
|                             .invoke(session, gameProfile, true); | ||||
|                     return WrappedGameProfile.fromHandle(session.getClass() | ||||
|                             .getMethod("fillProfileProperties", gameProfile.getHandleType(), boolean.class) | ||||
|                             .invoke(session, gameProfile.getHandle(), true)); | ||||
|                 } | ||||
|             } | ||||
|         } catch (Exception ex) { | ||||
| @@ -335,7 +317,7 @@ public class ReflectionManager { | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     public static Object grabProfileAddUUID(String playername) { | ||||
|     public static WrappedGameProfile grabProfileAddUUID(String playername) { | ||||
|         try { | ||||
|             Object minecraftServer = getNmsClass("MinecraftServer").getMethod("getServer").invoke(null); | ||||
|             for (Method method : getNmsClass("MinecraftServer").getMethods()) { | ||||
| @@ -357,20 +339,8 @@ public class ReflectionManager { | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     public static boolean hasSkinBlob(Object gameprofile) { | ||||
|         try { | ||||
|             Field propField = gameprofile.getClass().getDeclaredField("properties"); | ||||
|             propField.setAccessible(true); | ||||
|             Object propMap = propField.get(gameprofile); | ||||
|             propField = propMap.getClass().getDeclaredField("properties"); | ||||
|             propField.setAccessible(true); | ||||
|             propMap = propField.get(propMap); | ||||
|             return !(Boolean) propMap.getClass().getMethod("isEmpty").invoke(propMap); | ||||
|         } catch (NoSuchFieldException ex) { | ||||
|         } catch (Exception ex) { | ||||
|             ex.printStackTrace(); | ||||
|         } | ||||
|         return true; | ||||
|     public static boolean hasSkinBlob(WrappedGameProfile gameProfile) { | ||||
|         return !gameProfile.getProperties().isEmpty(); | ||||
|     } | ||||
|  | ||||
|     public static void setAllowSleep(Player player) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user