Fixed setSkin not working properly
This commit is contained in:
		| @@ -1,360 +1,360 @@ | |||||||
| package me.libraryaddict.disguise.disguisetypes; | package me.libraryaddict.disguise.disguisetypes; | ||||||
|  |  | ||||||
| import java.lang.reflect.InvocationTargetException; | import java.lang.reflect.InvocationTargetException; | ||||||
| import java.util.Arrays; | import java.util.Arrays; | ||||||
| import java.util.UUID; | import java.util.UUID; | ||||||
|  |  | ||||||
| import org.apache.commons.lang.Validate; | import org.apache.commons.lang.Validate; | ||||||
| import org.bukkit.Bukkit; | import org.bukkit.Bukkit; | ||||||
| import org.bukkit.entity.Entity; | import org.bukkit.entity.Entity; | ||||||
| import org.bukkit.entity.Player; | import org.bukkit.entity.Player; | ||||||
|  |  | ||||||
| import com.comphenix.protocol.PacketType; | import com.comphenix.protocol.PacketType; | ||||||
| import com.comphenix.protocol.ProtocolLibrary; | import com.comphenix.protocol.ProtocolLibrary; | ||||||
| import com.comphenix.protocol.events.PacketContainer; | import com.comphenix.protocol.events.PacketContainer; | ||||||
| import com.comphenix.protocol.wrappers.EnumWrappers.NativeGameMode; | import com.comphenix.protocol.wrappers.EnumWrappers.NativeGameMode; | ||||||
| import com.comphenix.protocol.wrappers.EnumWrappers.PlayerInfoAction; | import com.comphenix.protocol.wrappers.EnumWrappers.PlayerInfoAction; | ||||||
| import com.comphenix.protocol.wrappers.PlayerInfoData; | import com.comphenix.protocol.wrappers.PlayerInfoData; | ||||||
| import com.comphenix.protocol.wrappers.WrappedChatComponent; | import com.comphenix.protocol.wrappers.WrappedChatComponent; | ||||||
| import com.comphenix.protocol.wrappers.WrappedGameProfile; | import com.comphenix.protocol.wrappers.WrappedGameProfile; | ||||||
|  |  | ||||||
| import me.libraryaddict.disguise.LibsDisguises; | import me.libraryaddict.disguise.LibsDisguises; | ||||||
| import me.libraryaddict.disguise.disguisetypes.watchers.PlayerWatcher; | import me.libraryaddict.disguise.disguisetypes.watchers.PlayerWatcher; | ||||||
| import me.libraryaddict.disguise.utilities.DisguiseUtilities; | import me.libraryaddict.disguise.utilities.DisguiseUtilities; | ||||||
| import me.libraryaddict.disguise.utilities.LibsProfileLookup; | import me.libraryaddict.disguise.utilities.LibsProfileLookup; | ||||||
| import me.libraryaddict.disguise.utilities.ReflectionManager; | import me.libraryaddict.disguise.utilities.ReflectionManager; | ||||||
|  |  | ||||||
| public class PlayerDisguise extends TargetedDisguise { | public class PlayerDisguise extends TargetedDisguise { | ||||||
|     private LibsProfileLookup currentLookup; |     private LibsProfileLookup currentLookup; | ||||||
|     private WrappedGameProfile gameProfile; |     private WrappedGameProfile gameProfile; | ||||||
|     private String playerName; |     private String playerName; | ||||||
|     private String skinToUse; |     private String skinToUse; | ||||||
|     private UUID uuid = UUID.randomUUID(); |     private UUID uuid = UUID.randomUUID(); | ||||||
|  |  | ||||||
|     private PlayerDisguise() { |     private PlayerDisguise() { | ||||||
|         super(DisguiseType.PLAYER); |         super(DisguiseType.PLAYER); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public PlayerDisguise(Player player) { |     public PlayerDisguise(Player player) { | ||||||
|         this(ReflectionManager.getGameProfile(player)); |         this(ReflectionManager.getGameProfile(player)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public PlayerDisguise(Player player, Player skinToUse) { |     public PlayerDisguise(Player player, Player skinToUse) { | ||||||
|         this(ReflectionManager.getGameProfile(player), ReflectionManager.getGameProfile(skinToUse)); |         this(ReflectionManager.getGameProfile(player), ReflectionManager.getGameProfile(skinToUse)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public PlayerDisguise(String name) { |     public PlayerDisguise(String name) { | ||||||
|         this(); |         this(); | ||||||
|  |  | ||||||
|         setName(name); |         setName(name); | ||||||
|         setSkin(name); |         setSkin(name); | ||||||
|  |  | ||||||
|         createDisguise(); |         createDisguise(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public PlayerDisguise(String name, String skinToUse) { |     public PlayerDisguise(String name, String skinToUse) { | ||||||
|         this(); |         this(); | ||||||
|  |  | ||||||
|         setName(name); |         setName(name); | ||||||
|         setSkin(skinToUse); |         setSkin(skinToUse); | ||||||
|  |  | ||||||
|         createDisguise(); |         createDisguise(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public PlayerDisguise(WrappedGameProfile gameProfile) { |     public PlayerDisguise(WrappedGameProfile gameProfile) { | ||||||
|         this(); |         this(); | ||||||
|  |  | ||||||
|         setName(gameProfile.getName()); |         setName(gameProfile.getName()); | ||||||
|  |  | ||||||
|         this.gameProfile = ReflectionManager.getGameProfileWithThisSkin(uuid, gameProfile.getName(), gameProfile); |         this.gameProfile = ReflectionManager.getGameProfileWithThisSkin(uuid, gameProfile.getName(), gameProfile); | ||||||
|  |  | ||||||
|         createDisguise(); |         createDisguise(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public PlayerDisguise(WrappedGameProfile gameProfile, WrappedGameProfile skinToUse) { |     public PlayerDisguise(WrappedGameProfile gameProfile, WrappedGameProfile skinToUse) { | ||||||
|         this(); |         this(); | ||||||
|  |  | ||||||
|         setName(gameProfile.getName()); |         setName(gameProfile.getName()); | ||||||
|  |  | ||||||
|         this.gameProfile = ReflectionManager.getGameProfile(uuid, gameProfile.getName()); |         this.gameProfile = ReflectionManager.getGameProfile(uuid, gameProfile.getName()); | ||||||
|  |  | ||||||
|         setSkin(skinToUse); |         setSkin(skinToUse); | ||||||
|  |  | ||||||
|         createDisguise(); |         createDisguise(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public PlayerDisguise addPlayer(Player player) { |     public PlayerDisguise addPlayer(Player player) { | ||||||
|         return (PlayerDisguise) super.addPlayer(player); |         return (PlayerDisguise) super.addPlayer(player); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public PlayerDisguise addPlayer(String playername) { |     public PlayerDisguise addPlayer(String playername) { | ||||||
|         return (PlayerDisguise) super.addPlayer(playername); |         return (PlayerDisguise) super.addPlayer(playername); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public PlayerDisguise clone() { |     public PlayerDisguise clone() { | ||||||
|         PlayerDisguise disguise = new PlayerDisguise(); |         PlayerDisguise disguise = new PlayerDisguise(); | ||||||
|  |  | ||||||
|         disguise.playerName = getName(); |         disguise.playerName = getName(); | ||||||
|  |  | ||||||
|         if (disguise.currentLookup == null && disguise.gameProfile != null) { |         if (disguise.currentLookup == null && disguise.gameProfile != null) { | ||||||
|             disguise.skinToUse = getSkin(); |             disguise.skinToUse = getSkin(); | ||||||
|             disguise.gameProfile = ReflectionManager.getGameProfileWithThisSkin(disguise.uuid, getGameProfile().getName(), |             disguise.gameProfile = ReflectionManager.getGameProfileWithThisSkin(disguise.uuid, getGameProfile().getName(), | ||||||
|                     getGameProfile()); |                     getGameProfile()); | ||||||
|         } |         } | ||||||
|         else { |         else { | ||||||
|             disguise.setSkin(getSkin()); |             disguise.setSkin(getSkin()); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         disguise.setReplaceSounds(isSoundsReplaced()); |         disguise.setReplaceSounds(isSoundsReplaced()); | ||||||
|         disguise.setViewSelfDisguise(isSelfDisguiseVisible()); |         disguise.setViewSelfDisguise(isSelfDisguiseVisible()); | ||||||
|         disguise.setHearSelfDisguise(isSelfDisguiseSoundsReplaced()); |         disguise.setHearSelfDisguise(isSelfDisguiseSoundsReplaced()); | ||||||
|         disguise.setHideArmorFromSelf(isHidingArmorFromSelf()); |         disguise.setHideArmorFromSelf(isHidingArmorFromSelf()); | ||||||
|         disguise.setHideHeldItemFromSelf(isHidingHeldItemFromSelf()); |         disguise.setHideHeldItemFromSelf(isHidingHeldItemFromSelf()); | ||||||
|         disguise.setVelocitySent(isVelocitySent()); |         disguise.setVelocitySent(isVelocitySent()); | ||||||
|         disguise.setModifyBoundingBox(isModifyBoundingBox()); |         disguise.setModifyBoundingBox(isModifyBoundingBox()); | ||||||
|  |  | ||||||
|         if (getWatcher() != null) { |         if (getWatcher() != null) { | ||||||
|             disguise.setWatcher(getWatcher().clone(disguise)); |             disguise.setWatcher(getWatcher().clone(disguise)); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         disguise.createDisguise(); |         disguise.createDisguise(); | ||||||
|  |  | ||||||
|         return disguise; |         return disguise; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public WrappedGameProfile getGameProfile() { |     public WrappedGameProfile getGameProfile() { | ||||||
|         if (gameProfile == null) { |         if (gameProfile == null) { | ||||||
|             if (getSkin() != null) { |             if (getSkin() != null) { | ||||||
|                 gameProfile = ReflectionManager.getGameProfile(uuid, getName()); |                 gameProfile = ReflectionManager.getGameProfile(uuid, getName()); | ||||||
|             } |             } | ||||||
|             else { |             else { | ||||||
|                 gameProfile = ReflectionManager.getGameProfileWithThisSkin(uuid, getName(), |                 gameProfile = ReflectionManager.getGameProfileWithThisSkin(uuid, getName(), | ||||||
|                         DisguiseUtilities.getProfileFromMojang(this)); |                         DisguiseUtilities.getProfileFromMojang(this)); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return gameProfile; |         return gameProfile; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public String getName() { |     public String getName() { | ||||||
|         return playerName; |         return playerName; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public String getSkin() { |     public String getSkin() { | ||||||
|         return skinToUse; |         return skinToUse; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public PlayerWatcher getWatcher() { |     public PlayerWatcher getWatcher() { | ||||||
|         return (PlayerWatcher) super.getWatcher(); |         return (PlayerWatcher) super.getWatcher(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public boolean isDisplayedInTab() { |     public boolean isDisplayedInTab() { | ||||||
|         return getWatcher().isDisplayedInTab(); |         return getWatcher().isDisplayedInTab(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public boolean isPlayerDisguise() { |     public boolean isPlayerDisguise() { | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public PlayerDisguise removePlayer(Player player) { |     public PlayerDisguise removePlayer(Player player) { | ||||||
|         return (PlayerDisguise) super.removePlayer(player); |         return (PlayerDisguise) super.removePlayer(player); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public PlayerDisguise removePlayer(String playername) { |     public PlayerDisguise removePlayer(String playername) { | ||||||
|         return (PlayerDisguise) super.removePlayer(playername); |         return (PlayerDisguise) super.removePlayer(playername); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public PlayerDisguise setDisguiseTarget(TargetType newTargetType) { |     public PlayerDisguise setDisguiseTarget(TargetType newTargetType) { | ||||||
|         return (PlayerDisguise) super.setDisguiseTarget(newTargetType); |         return (PlayerDisguise) super.setDisguiseTarget(newTargetType); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void setDisplayedInTab(boolean showPlayerInTab) { |     public void setDisplayedInTab(boolean showPlayerInTab) { | ||||||
|         getWatcher().setDisplayedInTab(showPlayerInTab); |         getWatcher().setDisplayedInTab(showPlayerInTab); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public PlayerDisguise setEntity(Entity entity) { |     public PlayerDisguise setEntity(Entity entity) { | ||||||
|         return (PlayerDisguise) super.setEntity(entity); |         return (PlayerDisguise) super.setEntity(entity); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void setGameProfile(WrappedGameProfile gameProfile) { |     public void setGameProfile(WrappedGameProfile gameProfile) { | ||||||
|         this.gameProfile = ReflectionManager.getGameProfileWithThisSkin(uuid, gameProfile.getName(), gameProfile); |         this.gameProfile = ReflectionManager.getGameProfileWithThisSkin(uuid, gameProfile.getName(), gameProfile); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public PlayerDisguise setHearSelfDisguise(boolean hearSelfDisguise) { |     public PlayerDisguise setHearSelfDisguise(boolean hearSelfDisguise) { | ||||||
|         return (PlayerDisguise) super.setHearSelfDisguise(hearSelfDisguise); |         return (PlayerDisguise) super.setHearSelfDisguise(hearSelfDisguise); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public PlayerDisguise setHideArmorFromSelf(boolean hideArmor) { |     public PlayerDisguise setHideArmorFromSelf(boolean hideArmor) { | ||||||
|         return (PlayerDisguise) super.setHideArmorFromSelf(hideArmor); |         return (PlayerDisguise) super.setHideArmorFromSelf(hideArmor); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public PlayerDisguise setHideHeldItemFromSelf(boolean hideHeldItem) { |     public PlayerDisguise setHideHeldItemFromSelf(boolean hideHeldItem) { | ||||||
|         return (PlayerDisguise) super.setHideHeldItemFromSelf(hideHeldItem); |         return (PlayerDisguise) super.setHideHeldItemFromSelf(hideHeldItem); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public PlayerDisguise setKeepDisguiseOnEntityDespawn(boolean keepDisguise) { |     public PlayerDisguise setKeepDisguiseOnEntityDespawn(boolean keepDisguise) { | ||||||
|         return (PlayerDisguise) super.setKeepDisguiseOnEntityDespawn(keepDisguise); |         return (PlayerDisguise) super.setKeepDisguiseOnEntityDespawn(keepDisguise); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public PlayerDisguise setKeepDisguiseOnPlayerDeath(boolean keepDisguise) { |     public PlayerDisguise setKeepDisguiseOnPlayerDeath(boolean keepDisguise) { | ||||||
|         return (PlayerDisguise) super.setKeepDisguiseOnPlayerDeath(keepDisguise); |         return (PlayerDisguise) super.setKeepDisguiseOnPlayerDeath(keepDisguise); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public PlayerDisguise setKeepDisguiseOnPlayerLogout(boolean keepDisguise) { |     public PlayerDisguise setKeepDisguiseOnPlayerLogout(boolean keepDisguise) { | ||||||
|         return (PlayerDisguise) super.setKeepDisguiseOnPlayerLogout(keepDisguise); |         return (PlayerDisguise) super.setKeepDisguiseOnPlayerLogout(keepDisguise); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public PlayerDisguise setModifyBoundingBox(boolean modifyBox) { |     public PlayerDisguise setModifyBoundingBox(boolean modifyBox) { | ||||||
|         return (PlayerDisguise) super.setModifyBoundingBox(modifyBox); |         return (PlayerDisguise) super.setModifyBoundingBox(modifyBox); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void setName(String name) { |     private void setName(String name) { | ||||||
|         if (name.length() > 16) { |         if (name.length() > 16) { | ||||||
|             name = name.substring(0, 16); |             name = name.substring(0, 16); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         playerName = name; |         playerName = name; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public PlayerDisguise setReplaceSounds(boolean areSoundsReplaced) { |     public PlayerDisguise setReplaceSounds(boolean areSoundsReplaced) { | ||||||
|         return (PlayerDisguise) super.setReplaceSounds(areSoundsReplaced); |         return (PlayerDisguise) super.setReplaceSounds(areSoundsReplaced); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public PlayerDisguise setSkin(String newSkin) { |     public PlayerDisguise setSkin(String newSkin) { | ||||||
|         if (newSkin != null && newSkin.length() > 50) { |         if (newSkin != null && newSkin.length() > 50) { | ||||||
|             try { |             try { | ||||||
|                 setSkin(ReflectionManager.parseGameProfile(newSkin)); |                 return setSkin(ReflectionManager.parseGameProfile(newSkin)); | ||||||
|             } |             } | ||||||
|             catch (Exception ex) { |             catch (Exception ex) { | ||||||
|                 throw new IllegalArgumentException( |                 throw new IllegalArgumentException( | ||||||
|                         "The skin is too long to be a playername, but cannot be parsed to a GameProfile!"); |                         "The skin is too long to be a playername, but cannot be parsed to a GameProfile!"); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         skinToUse = newSkin; |         skinToUse = newSkin; | ||||||
|  |  | ||||||
|         if (newSkin == null) { |         if (newSkin == null) { | ||||||
|             currentLookup = null; |             currentLookup = null; | ||||||
|             gameProfile = null; |             gameProfile = null; | ||||||
|         } |         } | ||||||
|         else { |         else { | ||||||
|             if (newSkin.length() > 16) { |             if (newSkin.length() > 16) { | ||||||
|                 skinToUse = newSkin.substring(0, 16); |                 skinToUse = newSkin.substring(0, 16); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             currentLookup = new LibsProfileLookup() { |             currentLookup = new LibsProfileLookup() { | ||||||
|                 @Override |                 @Override | ||||||
|                 public void onLookup(WrappedGameProfile gameProfile) { |                 public void onLookup(WrappedGameProfile gameProfile) { | ||||||
|                     if (currentLookup != this || gameProfile == null) |                     if (currentLookup != this || gameProfile == null) | ||||||
|                         return; |                         return; | ||||||
|  |  | ||||||
|                     setSkin(gameProfile); |                     setSkin(gameProfile); | ||||||
|  |  | ||||||
|                     currentLookup = null; |                     currentLookup = null; | ||||||
|                 } |                 } | ||||||
|             }; |             }; | ||||||
|  |  | ||||||
|             WrappedGameProfile gameProfile = DisguiseUtilities.getProfileFromMojang(this.skinToUse, currentLookup, |             WrappedGameProfile gameProfile = DisguiseUtilities.getProfileFromMojang(this.skinToUse, currentLookup, | ||||||
|                     LibsDisguises.getInstance().getConfig().getBoolean("ContactMojangServers", true)); |                     LibsDisguises.getInstance().getConfig().getBoolean("ContactMojangServers", true)); | ||||||
|  |  | ||||||
|             if (gameProfile != null) { |             if (gameProfile != null) { | ||||||
|                 setSkin(gameProfile); |                 setSkin(gameProfile); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return this; |         return this; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Set the GameProfile, without tampering. |      * Set the GameProfile, without tampering. | ||||||
|      * |      * | ||||||
|      * @param gameProfile |      * @param gameProfile | ||||||
|      *            GameProfile |      *            GameProfile | ||||||
|      * @return |      * @return | ||||||
|      */ |      */ | ||||||
|     public PlayerDisguise setSkin(WrappedGameProfile gameProfile) { |     public PlayerDisguise setSkin(WrappedGameProfile gameProfile) { | ||||||
|         if (gameProfile == null) { |         if (gameProfile == null) { | ||||||
|             this.gameProfile = null; |             this.gameProfile = null; | ||||||
|             this.skinToUse = null; |             this.skinToUse = null; | ||||||
|             return this; |             return this; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         Validate.notEmpty(gameProfile.getName(), "Name must be set"); |         Validate.notEmpty(gameProfile.getName(), "Name must be set"); | ||||||
|  |  | ||||||
|         currentLookup = null; |         currentLookup = null; | ||||||
|  |  | ||||||
|         this.skinToUse = gameProfile.getName(); |         this.skinToUse = gameProfile.getName(); | ||||||
|         this.gameProfile = ReflectionManager.getGameProfileWithThisSkin(uuid, getName(), gameProfile); |         this.gameProfile = ReflectionManager.getGameProfileWithThisSkin(uuid, getName(), gameProfile); | ||||||
|  |  | ||||||
|         if (DisguiseUtilities.isDisguiseInUse(this)) { |         if (DisguiseUtilities.isDisguiseInUse(this)) { | ||||||
|             if (isDisplayedInTab()) { |             if (isDisplayedInTab()) { | ||||||
|                 PacketContainer addTab = new PacketContainer(PacketType.Play.Server.PLAYER_INFO); |                 PacketContainer addTab = new PacketContainer(PacketType.Play.Server.PLAYER_INFO); | ||||||
|                 addTab.getPlayerInfoAction().write(0, PlayerInfoAction.ADD_PLAYER); |                 addTab.getPlayerInfoAction().write(0, PlayerInfoAction.ADD_PLAYER); | ||||||
|                 addTab.getPlayerInfoDataLists().write(0, Arrays.asList(new PlayerInfoData(getGameProfile(), 0, |                 addTab.getPlayerInfoDataLists().write(0, Arrays.asList(new PlayerInfoData(getGameProfile(), 0, | ||||||
|                         NativeGameMode.SURVIVAL, WrappedChatComponent.fromText(getName())))); |                         NativeGameMode.SURVIVAL, WrappedChatComponent.fromText(getName())))); | ||||||
|  |  | ||||||
|                 PacketContainer deleteTab = addTab.shallowClone(); |                 PacketContainer deleteTab = addTab.shallowClone(); | ||||||
|                 deleteTab.getPlayerInfoAction().write(0, PlayerInfoAction.REMOVE_PLAYER); |                 deleteTab.getPlayerInfoAction().write(0, PlayerInfoAction.REMOVE_PLAYER); | ||||||
|  |  | ||||||
|                 try { |                 try { | ||||||
|                     for (Player player : Bukkit.getOnlinePlayers()) { |                     for (Player player : Bukkit.getOnlinePlayers()) { | ||||||
|                         if (!((TargetedDisguise) this).canSee(player)) |                         if (!((TargetedDisguise) this).canSee(player)) | ||||||
|                             continue; |                             continue; | ||||||
|  |  | ||||||
|                         ProtocolLibrary.getProtocolManager().sendServerPacket(player, deleteTab); |                         ProtocolLibrary.getProtocolManager().sendServerPacket(player, deleteTab); | ||||||
|                         ProtocolLibrary.getProtocolManager().sendServerPacket(player, addTab); |                         ProtocolLibrary.getProtocolManager().sendServerPacket(player, addTab); | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|                 catch (InvocationTargetException e) { |                 catch (InvocationTargetException e) { | ||||||
|                     e.printStackTrace(); |                     e.printStackTrace(); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             DisguiseUtilities.refreshTrackers(this); |             DisguiseUtilities.refreshTrackers(this); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return this; |         return this; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public PlayerDisguise setVelocitySent(boolean sendVelocity) { |     public PlayerDisguise setVelocitySent(boolean sendVelocity) { | ||||||
|         return (PlayerDisguise) super.setVelocitySent(sendVelocity); |         return (PlayerDisguise) super.setVelocitySent(sendVelocity); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public PlayerDisguise setViewSelfDisguise(boolean viewSelfDisguise) { |     public PlayerDisguise setViewSelfDisguise(boolean viewSelfDisguise) { | ||||||
|         return (PlayerDisguise) super.setViewSelfDisguise(viewSelfDisguise); |         return (PlayerDisguise) super.setViewSelfDisguise(viewSelfDisguise); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public PlayerDisguise setWatcher(FlagWatcher newWatcher) { |     public PlayerDisguise setWatcher(FlagWatcher newWatcher) { | ||||||
|         return (PlayerDisguise) super.setWatcher(newWatcher); |         return (PlayerDisguise) super.setWatcher(newWatcher); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public PlayerDisguise silentlyAddPlayer(String playername) { |     public PlayerDisguise silentlyAddPlayer(String playername) { | ||||||
|         return (PlayerDisguise) super.silentlyAddPlayer(playername); |         return (PlayerDisguise) super.silentlyAddPlayer(playername); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public PlayerDisguise silentlyRemovePlayer(String playername) { |     public PlayerDisguise silentlyRemovePlayer(String playername) { | ||||||
|         return (PlayerDisguise) super.silentlyRemovePlayer(playername); |         return (PlayerDisguise) super.silentlyRemovePlayer(playername); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user