Add ability for player disguises to copy existing players display name
This commit is contained in:
		| @@ -258,6 +258,9 @@ public class DisguiseConfig { | |||||||
|     @Getter |     @Getter | ||||||
|     @Setter |     @Setter | ||||||
|     private static long lastUpdateRequest; |     private static long lastUpdateRequest; | ||||||
|  |     @Getter | ||||||
|  |     @Setter | ||||||
|  |     private static boolean copyPlayerTeamInfo; | ||||||
|  |  | ||||||
|     public static boolean isArmorstandsName() { |     public static boolean isArmorstandsName() { | ||||||
|         return getPlayerNameType() == PlayerNameType.ARMORSTANDS; |         return getPlayerNameType() == PlayerNameType.ARMORSTANDS; | ||||||
| @@ -678,6 +681,7 @@ public class DisguiseConfig { | |||||||
|         setVelocitySent(config.getBoolean("SendVelocity")); |         setVelocitySent(config.getBoolean("SendVelocity")); | ||||||
|         setViewDisguises(config.getBoolean("ViewSelfDisguises")); |         setViewDisguises(config.getBoolean("ViewSelfDisguises")); | ||||||
|         setWarnScoreboardConflict(config.getBoolean("Scoreboard.WarnConflict")); |         setWarnScoreboardConflict(config.getBoolean("Scoreboard.WarnConflict")); | ||||||
|  |         setCopyPlayerTeamInfo(config.getBoolean("Scoreboard.CopyPlayerTeamInfo")); | ||||||
|         setWitherSkullPacketsEnabled(config.getBoolean("PacketsEnabled.WitherSkull")); |         setWitherSkullPacketsEnabled(config.getBoolean("PacketsEnabled.WitherSkull")); | ||||||
|         setWolfDyeable(config.getBoolean("DyeableWolf")); |         setWolfDyeable(config.getBoolean("DyeableWolf")); | ||||||
|         setTablistRemoveDelay(config.getInt("TablistRemoveDelay")); |         setTablistRemoveDelay(config.getInt("TablistRemoveDelay")); | ||||||
|   | |||||||
| @@ -272,6 +272,12 @@ public class PlayerDisguise extends TargetedDisguise { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         if (DisguiseConfig.isCopyPlayerTeamInfo() && | ||||||
|  |                 (DisguiseConfig.getPlayerNameType() == DisguiseConfig.PlayerNameType.TEAMS || | ||||||
|  |                         DisguiseConfig.getPlayerNameType() == DisguiseConfig.PlayerNameType.ARMORSTANDS)) { | ||||||
|  |             name = DisguiseUtilities.getDisplayName(name); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         if (name.equals(playerName)) { |         if (name.equals(playerName)) { | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
| @@ -337,13 +343,13 @@ public class PlayerDisguise extends TargetedDisguise { | |||||||
|  |  | ||||||
|                 try { |                 try { | ||||||
|                     for (Player player : Bukkit.getOnlinePlayers()) { |                     for (Player player : Bukkit.getOnlinePlayers()) { | ||||||
|                         if (!canSee(player)) |                         if (!canSee(player)) { | ||||||
|                             continue; |                             continue; | ||||||
|  |                         } | ||||||
|  |  | ||||||
|                         ProtocolLibrary.getProtocolManager().sendServerPacket(player, addTab); |                         ProtocolLibrary.getProtocolManager().sendServerPacket(player, addTab); | ||||||
|                     } |                     } | ||||||
|                 } |                 } catch (InvocationTargetException e) { | ||||||
|                 catch (InvocationTargetException e) { |  | ||||||
|                     e.printStackTrace(); |                     e.printStackTrace(); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| @@ -436,8 +442,9 @@ public class PlayerDisguise extends TargetedDisguise { | |||||||
|                 currentLookup = new LibsProfileLookup() { |                 currentLookup = new LibsProfileLookup() { | ||||||
|                     @Override |                     @Override | ||||||
|                     public void onLookup(WrappedGameProfile gameProfile) { |                     public void onLookup(WrappedGameProfile gameProfile) { | ||||||
|                         if (currentLookup != this || gameProfile == null || gameProfile.getProperties().isEmpty()) |                         if (currentLookup != this || gameProfile == null || gameProfile.getProperties().isEmpty()) { | ||||||
|                             return; |                             return; | ||||||
|  |                         } | ||||||
|  |  | ||||||
|                         setSkin(gameProfile); |                         setSkin(gameProfile); | ||||||
|  |  | ||||||
| @@ -485,8 +492,7 @@ public class PlayerDisguise extends TargetedDisguise { | |||||||
|                 string.contains(",\"name\":")) { |                 string.contains(",\"name\":")) { | ||||||
|             try { |             try { | ||||||
|                 return DisguiseUtilities.getGson().fromJson(string, WrappedGameProfile.class); |                 return DisguiseUtilities.getGson().fromJson(string, WrappedGameProfile.class); | ||||||
|             } |             } catch (Exception ex) { | ||||||
|             catch (Exception ex) { |  | ||||||
|                 throw new IllegalStateException( |                 throw new IllegalStateException( | ||||||
|                         "Tried to parse " + string + " to a GameProfile, but it has been formatted incorrectly!"); |                         "Tried to parse " + string + " to a GameProfile, but it has been formatted incorrectly!"); | ||||||
|             } |             } | ||||||
| @@ -505,14 +511,14 @@ public class PlayerDisguise extends TargetedDisguise { | |||||||
|  |  | ||||||
|                 try { |                 try { | ||||||
|                     for (Player player : Bukkit.getOnlinePlayers()) { |                     for (Player player : Bukkit.getOnlinePlayers()) { | ||||||
|                         if (!canSee(player)) |                         if (!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(); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| @@ -604,8 +610,9 @@ public class PlayerDisguise extends TargetedDisguise { | |||||||
|             currentLookup = new LibsProfileLookup() { |             currentLookup = new LibsProfileLookup() { | ||||||
|                 @Override |                 @Override | ||||||
|                 public void onLookup(WrappedGameProfile gameProfile) { |                 public void onLookup(WrappedGameProfile gameProfile) { | ||||||
|                     if (currentLookup != this || gameProfile == null || gameProfile.getProperties().isEmpty()) |                     if (currentLookup != this || gameProfile == null || gameProfile.getProperties().isEmpty()) { | ||||||
|                         return; |                         return; | ||||||
|  |                     } | ||||||
|  |  | ||||||
|                     setSkin(gameProfile); |                     setSkin(gameProfile); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -235,6 +235,38 @@ public class DisguiseUtilities { | |||||||
|         return team.getPrefix() + team.getColor() + player.getName() + team.getSuffix(); |         return team.getPrefix() + team.getColor() + player.getName() + team.getSuffix(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public static String getDisplayName(String playerName) { | ||||||
|  |         if (StringUtils.isEmpty(playerName)) { | ||||||
|  |             return playerName; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         Team team = Bukkit.getScoreboardManager().getMainScoreboard().getEntryTeam(playerName); | ||||||
|  |  | ||||||
|  |         if (team != null && (!StringUtils.isEmpty(team.getPrefix()) || !StringUtils.isEmpty(team.getSuffix()))) { | ||||||
|  |             return team.getPrefix() + team.getColor() + playerName + team.getSuffix(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         Player player = Bukkit.getPlayer(playerName); | ||||||
|  |  | ||||||
|  |         if (player == null) { | ||||||
|  |             return playerName; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         team = Bukkit.getScoreboardManager().getMainScoreboard().getEntryTeam(player.getUniqueId().toString()); | ||||||
|  |  | ||||||
|  |         if (team == null || (StringUtils.isEmpty(team.getPrefix()) && StringUtils.isEmpty(team.getSuffix()))) { | ||||||
|  |             String name = player.getDisplayName(); | ||||||
|  |  | ||||||
|  |             if (name.equals(playerName)) { | ||||||
|  |                 return player.getPlayerListName(); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             return name; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return team.getPrefix() + team.getColor() + player.getName() + team.getSuffix(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     public static void saveViewPreferances() { |     public static void saveViewPreferances() { | ||||||
|         if (!DisguiseConfig.isSaveUserPreferences()) { |         if (!DisguiseConfig.isSaveUserPreferences()) { | ||||||
|             return; |             return; | ||||||
|   | |||||||
| @@ -158,7 +158,6 @@ public class PlayerSkinHandler implements Listener { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         getCache().invalidate(player); |         getCache().invalidate(player); | ||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @EventHandler |     @EventHandler | ||||||
|   | |||||||
| @@ -109,6 +109,9 @@ Scoreboard: | |||||||
|   # Should the scoreboard warn you if it detects a potential conflict? |   # Should the scoreboard warn you if it detects a potential conflict? | ||||||
|   # If self disguises are disabled, or the scoreboard is using IGNORE_SCOREBOARD then this does nothing. |   # If self disguises are disabled, or the scoreboard is using IGNORE_SCOREBOARD then this does nothing. | ||||||
|   WarnConflict: true |   WarnConflict: true | ||||||
|  |   # When disguising as a player, should the prefix/suffix of the player disguise name copy the team info? | ||||||
|  |   # Only takes effect if using PlayerNames TEAMS or ARMORSTANDS | ||||||
|  |   CopyPlayerTeamInfo: true | ||||||
|  |  | ||||||
| # Shall I notify those with the correct permission when there's a LibsDisguises update? | # Shall I notify those with the correct permission when there's a LibsDisguises update? | ||||||
| # Disabling this will also disable notifications when the plugin updated | # Disabling this will also disable notifications when the plugin updated | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user