Introduce setGlowColor and no longer have a self disguise scoreboard, instead all non-player disguises have their own uuid which is added to a scoreboard team. Downside is you can now tell if someone isn't disguised cos they can be pushed around. Might be worth doing both?
This commit is contained in:
		| @@ -37,9 +37,6 @@ import java.util.Map.Entry; | ||||
| import java.util.concurrent.TimeUnit; | ||||
|  | ||||
| public class DisguiseConfig { | ||||
|     @Getter | ||||
|     @Setter | ||||
|     private static DisguisePushing pushingOption = DisguisePushing.MODIFY_SCOREBOARD; | ||||
|     @Getter | ||||
|     @Setter | ||||
|     private static HashMap<DisguisePerm, String> customDisguises = new HashMap<>(); | ||||
| @@ -675,19 +672,6 @@ public class DisguiseConfig { | ||||
|             DisguiseUtilities.getLogger().warning("Cannot parse '" + config.getString("UpdatesBranch") + "' to a valid option for UpdatesBranch"); | ||||
|         } | ||||
|  | ||||
|         try { | ||||
|             String option = config.getString("SelfDisguisesScoreboard", DisguisePushing.MODIFY_SCOREBOARD.name()).toUpperCase(Locale.ENGLISH); | ||||
|  | ||||
|             if (!option.endsWith("_SCOREBOARD")) { | ||||
|                 option += "_SCOREBOARD"; | ||||
|             } | ||||
|  | ||||
|             pushingOption = DisguisePushing.valueOf(option); | ||||
|         } catch (Exception ex) { | ||||
|             DisguiseUtilities.getLogger() | ||||
|                     .warning("Cannot parse '" + config.getString("SelfDisguisesScoreboard") + "' to a valid option for SelfDisguisesScoreboard"); | ||||
|         } | ||||
|  | ||||
|         PermissionDefault commandVisibility = PermissionDefault.getByName(config.getString("Permissions.SeeCommands")); | ||||
|  | ||||
|         if (commandVisibility == null) { | ||||
|   | ||||
| @@ -121,11 +121,11 @@ public class LDScoreboard implements LDCommand { | ||||
|         } | ||||
|  | ||||
|         List<PacketListener> listeners = ProtocolLibrary.getProtocolManager().getPacketListeners().stream() | ||||
|                 .filter(listener -> listener.getPlugin() != LibsDisguises.getInstance() && listener.getSendingWhitelist().getTypes().contains(PacketType.Play.Server.SCOREBOARD_TEAM)).collect(Collectors.toList()); | ||||
|                 .filter(listener -> listener.getPlugin() != LibsDisguises.getInstance() && | ||||
|                         listener.getSendingWhitelist().getTypes().contains(PacketType.Play.Server.SCOREBOARD_TEAM)).collect(Collectors.toList()); | ||||
|  | ||||
|         if (!listeners.isEmpty()) { | ||||
|             ComponentBuilder builder = | ||||
|                     new ComponentBuilder(""); | ||||
|             ComponentBuilder builder = new ComponentBuilder(""); | ||||
|             builder.append("The following plugins are listening for scoreboard teams using ProtocolLib, and could be modifying collisions: "); | ||||
|             builder.color(net.md_5.bungee.api.ChatColor.BLUE); | ||||
|  | ||||
| @@ -160,9 +160,8 @@ public class LDScoreboard implements LDCommand { | ||||
|  | ||||
|         LibsMsg.LIBS_SCOREBOARD_IGNORE_TEST.send(sender); | ||||
|  | ||||
|         if (DisguiseConfig.getPushingOption() == DisguiseConfig.DisguisePushing.IGNORE_SCOREBOARD) { | ||||
|             LibsMsg.LIBS_SCOREBOARD_DISABLED.send(sender); | ||||
|         } | ||||
|         sender.sendMessage(ChatColor.RED + | ||||
|                 "This command is somewhat outdated and needs to be changed, pushing is now disabled on the entities themselves and not players"); | ||||
|  | ||||
|         Player player; | ||||
|  | ||||
| @@ -200,18 +199,7 @@ public class LDScoreboard implements LDCommand { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         if (team.getOption(Team.Option.COLLISION_RULE) != Team.OptionStatus.NEVER && | ||||
|                 team.getOption(Team.Option.COLLISION_RULE) != Team.OptionStatus.FOR_OTHER_TEAMS) { | ||||
|             LibsMsg.LIBS_SCOREBOARD_NO_TEAM_PUSH.send(sender, team.getName()); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         LibsMsg.LIBS_SCOREBOARD_SUCCESS.send(sender, team.getName()); | ||||
|  | ||||
|         if (Bukkit.getPluginManager().getPlugin("TAB") != null) { | ||||
|             LibsMsg.PLUGIN_TAB_DETECTED.send(sender); | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|   | ||||
| @@ -96,12 +96,22 @@ public abstract class Disguise { | ||||
|     @Getter | ||||
|     @Setter | ||||
|     private String soundGroup; | ||||
|     private UUID uuid = ReflectionManager.getRandomUUID(); | ||||
|  | ||||
|     public Disguise(DisguiseType disguiseType) { | ||||
|         this.disguiseType = disguiseType; | ||||
|         this.disguiseName = disguiseType.toReadable(); | ||||
|     } | ||||
|  | ||||
|     public UUID getUUID() { | ||||
|         // Partial fix for disguises serialized in older versions | ||||
|         if (this.uuid == null) { | ||||
|             this.uuid = ReflectionManager.getRandomUUID(); | ||||
|         } | ||||
|  | ||||
|         return uuid; | ||||
|     } | ||||
|  | ||||
|     public int getMultiNameLength() { | ||||
|         return multiName.length; | ||||
|     } | ||||
| @@ -939,6 +949,10 @@ public abstract class Disguise { | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         if (!isPlayerDisguise()) { | ||||
|             DisguiseUtilities.setGlowColor(this, null); | ||||
|         } | ||||
|  | ||||
|         // If this disguise is active | ||||
|         // Remove the disguise from the current disguises. | ||||
|         if (DisguiseUtilities.removeDisguise((TargetedDisguise) this) && !disguiseBeingReplaced) { | ||||
| @@ -1163,6 +1177,10 @@ public abstract class Disguise { | ||||
|         // Stick the disguise in the disguises bin | ||||
|         DisguiseUtilities.addDisguise(entity.getEntityId(), (TargetedDisguise) this); | ||||
|  | ||||
|         if (!isPlayerDisguise()) { | ||||
|             DisguiseUtilities.setGlowColor(this, getWatcher().getGlowColor()); | ||||
|         } | ||||
|  | ||||
|         if (isSelfDisguiseVisible() && getEntity() instanceof Player) { | ||||
|             DisguiseUtilities.removeSelfDisguise(this); | ||||
|         } | ||||
|   | ||||
| @@ -59,7 +59,7 @@ public class FlagWatcher { | ||||
|     private transient boolean previouslySneaking; | ||||
|     @Getter | ||||
|     private boolean upsideDown; | ||||
|     private ChatColor glowColor; | ||||
|     private ChatColor glowColor = ChatColor.WHITE; | ||||
|     @Getter | ||||
|     private Float pitchLock; | ||||
|     @Getter | ||||
| @@ -708,7 +708,7 @@ public class FlagWatcher { | ||||
|     } | ||||
|  | ||||
|     public void setGlowColor(ChatColor glowColor) { | ||||
|         if (getGlowColor() == glowColor) { | ||||
|         if (getGlowColor() == glowColor || glowColor == null || !glowColor.isColor()) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
| @@ -721,7 +721,7 @@ public class FlagWatcher { | ||||
|         if (getDisguise().isPlayerDisguise()) { | ||||
|             DisguiseUtilities.updateExtendedName((PlayerDisguise) getDisguise()); | ||||
|         } else { | ||||
|             // TODO | ||||
|             DisguiseUtilities.setGlowColor(getDisguise(), getGlowColor()); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -31,7 +31,6 @@ public class PlayerDisguise extends TargetedDisguise { | ||||
|      * Has someone set name visible explicitly? | ||||
|      */ | ||||
|     private boolean explicitNameVisible = false; | ||||
|     private final UUID uuid = ReflectionManager.getRandomUUID(); | ||||
|     private transient DisguiseUtilities.DScoreTeam scoreboardName; | ||||
|     @Getter | ||||
|     private boolean deadmau5Ears; | ||||
| @@ -77,7 +76,7 @@ public class PlayerDisguise extends TargetedDisguise { | ||||
|  | ||||
|         setName(gameProfile.getName()); | ||||
|  | ||||
|         this.gameProfile = ReflectionManager.getGameProfileWithThisSkin(uuid, gameProfile.getName(), gameProfile); | ||||
|         this.gameProfile = ReflectionManager.getGameProfileWithThisSkin(getUUID(), gameProfile.getName(), gameProfile); | ||||
|  | ||||
|         createDisguise(); | ||||
|     } | ||||
| @@ -87,7 +86,7 @@ public class PlayerDisguise extends TargetedDisguise { | ||||
|  | ||||
|         setName(gameProfile.getName()); | ||||
|  | ||||
|         this.gameProfile = ReflectionManager.getGameProfile(uuid, gameProfile.getName()); | ||||
|         this.gameProfile = ReflectionManager.getGameProfile(getUUID(), gameProfile.getName()); | ||||
|  | ||||
|         setSkin(skinToUse); | ||||
|  | ||||
| @@ -152,9 +151,6 @@ public class PlayerDisguise extends TargetedDisguise { | ||||
|                 isDeadmau5Ears() ? "deadmau5" : hasScoreboardName() ? getScoreboardName().getPlayer() : getName().isEmpty() ? "§r" : getName(); | ||||
|     } | ||||
|  | ||||
|     public UUID getUUID() { | ||||
|         return uuid; | ||||
|     } | ||||
|  | ||||
|     public boolean isNameVisible() { | ||||
|         return nameVisible; | ||||
| @@ -250,7 +246,7 @@ public class PlayerDisguise extends TargetedDisguise { | ||||
|  | ||||
|         if (currentLookup == null && gameProfile != null) { | ||||
|             disguise.skinToUse = getSkin(); | ||||
|             disguise.gameProfile = ReflectionManager.getGameProfileWithThisSkin(disguise.uuid, getGameProfile().getName(), getGameProfile()); | ||||
|             disguise.gameProfile = ReflectionManager.getGameProfileWithThisSkin(disguise.getUUID(), getGameProfile().getName(), getGameProfile()); | ||||
|         } else { | ||||
|             disguise.setSkin(getSkin()); | ||||
|         } | ||||
| @@ -269,9 +265,9 @@ public class PlayerDisguise extends TargetedDisguise { | ||||
|     public WrappedGameProfile getGameProfile() { | ||||
|         if (gameProfile == null) { | ||||
|             if (getSkin() != null) { | ||||
|                 gameProfile = ReflectionManager.getGameProfile(uuid, getProfileName()); | ||||
|                 gameProfile = ReflectionManager.getGameProfile(getUUID(), getProfileName()); | ||||
|             } else { | ||||
|                 gameProfile = ReflectionManager.getGameProfileWithThisSkin(uuid, getProfileName(), DisguiseUtilities.getProfileFromMojang(this)); | ||||
|                 gameProfile = ReflectionManager.getGameProfileWithThisSkin(getUUID(), getProfileName(), DisguiseUtilities.getProfileFromMojang(this)); | ||||
|             } | ||||
|         } | ||||
|  | ||||
| @@ -279,7 +275,7 @@ public class PlayerDisguise extends TargetedDisguise { | ||||
|     } | ||||
|  | ||||
|     public void setGameProfile(WrappedGameProfile gameProfile) { | ||||
|         this.gameProfile = ReflectionManager.getGameProfileWithThisSkin(uuid, gameProfile.getName(), gameProfile); | ||||
|         this.gameProfile = ReflectionManager.getGameProfileWithThisSkin(getUUID(), gameProfile.getName(), gameProfile); | ||||
|     } | ||||
|  | ||||
|     public String getName() { | ||||
| @@ -390,7 +386,7 @@ public class PlayerDisguise extends TargetedDisguise { | ||||
|             playerName = name; | ||||
|  | ||||
|             if (gameProfile != null) { | ||||
|                 gameProfile = ReflectionManager.getGameProfileWithThisSkin(uuid, getProfileName(), getGameProfile()); | ||||
|                 gameProfile = ReflectionManager.getGameProfileWithThisSkin(getUUID(), getProfileName(), getGameProfile()); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| @@ -410,7 +406,7 @@ public class PlayerDisguise extends TargetedDisguise { | ||||
|             } | ||||
|  | ||||
|             if (gameProfile != null) { | ||||
|                 gameProfile = ReflectionManager.getGameProfileWithThisSkin(uuid, getProfileName(), getGameProfile()); | ||||
|                 gameProfile = ReflectionManager.getGameProfileWithThisSkin(getUUID(), getProfileName(), getGameProfile()); | ||||
|             } | ||||
|  | ||||
|             if (!startDisguise()) { | ||||
| @@ -500,7 +496,7 @@ public class PlayerDisguise extends TargetedDisguise { | ||||
|         currentLookup = null; | ||||
|  | ||||
|         this.skinToUse = gameProfile.getName(); | ||||
|         this.gameProfile = ReflectionManager.getGameProfileWithThisSkin(uuid, getProfileName(), gameProfile); | ||||
|         this.gameProfile = ReflectionManager.getGameProfileWithThisSkin(getUUID(), getProfileName(), gameProfile); | ||||
|  | ||||
|         refreshDisguise(); | ||||
|  | ||||
|   | ||||
| @@ -119,13 +119,9 @@ public class DisguiseUtilities { | ||||
|                 team.setOption(Option.NAME_TAG_VISIBILITY, nameVisible ? OptionStatus.ALWAYS : OptionStatus.NEVER); | ||||
|             } | ||||
|  | ||||
|             ChatColor color = disguise.getWatcher().getGlowColor(); | ||||
|             team.setOption(Option.COLLISION_RULE, OptionStatus.NEVER); | ||||
|  | ||||
|             if (color == null) { | ||||
|                 color = ChatColor.WHITE; | ||||
|             } | ||||
|  | ||||
|             team.setColor(color); | ||||
|             team.setColor(disguise.getWatcher().getGlowColor()); | ||||
|  | ||||
|             if (NmsVersion.v1_13.isSupported()) { | ||||
|                 team.setPrefix("Colorize"); | ||||
| @@ -164,8 +160,6 @@ public class DisguiseUtilities { | ||||
|     private static final HashMap<String, ArrayList<Object>> runnables = new HashMap<>(); | ||||
|     @Getter | ||||
|     private static final HashSet<UUID> selfDisguised = new HashSet<>(); | ||||
|     private static final HashMap<UUID, String> preDisguiseTeam = new HashMap<>(); | ||||
|     private static final HashMap<UUID, String> disguiseTeam = new HashMap<>(); | ||||
|     private static final File profileCache = new File("plugins/LibsDisguises/SavedSkins"); | ||||
|     private static final File savedDisguises = new File("plugins/LibsDisguises/SavedDisguises"); | ||||
|     @Getter | ||||
| @@ -1321,6 +1315,7 @@ public class DisguiseUtilities { | ||||
|  | ||||
|             registerAllExtendedNames(board); | ||||
|             registerNoName(board); | ||||
|             registerColors(board); | ||||
|         } | ||||
|  | ||||
|         if (NmsVersion.v1_13.isSupported()) { | ||||
| @@ -1708,8 +1703,6 @@ public class DisguiseUtilities { | ||||
|             ex.printStackTrace(); | ||||
|         } | ||||
|  | ||||
|         removeSelfDisguiseScoreboard(player); | ||||
|  | ||||
|         // player.spigot().setCollidesWithEntities(true); | ||||
|         // Finish up | ||||
|         // Remove the fake entity ID from the disguise bin | ||||
| @@ -1878,6 +1871,61 @@ public class DisguiseUtilities { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void setGlowColor(UUID uuid, ChatColor color) { | ||||
|         String name = color == null ? "" : getTeamName(color); | ||||
|  | ||||
|         for (Scoreboard scoreboard : getAllScoreboards()) { | ||||
|             Team team = scoreboard.getEntryTeam(uuid.toString()); | ||||
|  | ||||
|             if (team != null) { | ||||
|                 if (!team.getName().startsWith("LD_Color_") || name.equals(team.getName())) { | ||||
|                     continue; | ||||
|                 } | ||||
|  | ||||
|                 team.removeEntry(uuid.toString()); | ||||
|             } | ||||
|  | ||||
|             if (color == null) { | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
|             team = scoreboard.getTeam(name); | ||||
|  | ||||
|             if (team == null) { | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
|             team.addEntry(uuid.toString()); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void setGlowColor(Disguise disguise, ChatColor color) { | ||||
|         setGlowColor(disguise.getUUID(), color); | ||||
|     } | ||||
|  | ||||
|     public static String getTeamName(ChatColor color) { | ||||
|         return "LD_Color_" + color.getChar(); | ||||
|     } | ||||
|  | ||||
|     public static void registerColors(Scoreboard scoreboard) { | ||||
|         for (ChatColor color : ChatColor.values()) { | ||||
|             if (!color.isColor()) { | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
|             String name = getTeamName(color); | ||||
|  | ||||
|             Team team = scoreboard.getTeam(name); | ||||
|  | ||||
|             if (team == null) { | ||||
|                 team = scoreboard.registerNewTeam(name); | ||||
|             } | ||||
|  | ||||
|             team.setColor(color); | ||||
|             team.setOption(Option.COLLISION_RULE, OptionStatus.NEVER); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static String[] getExtendedNameSplit(String playerName, String name) { | ||||
|         if (name.length() <= 16 && !DisguiseConfig.isScoreboardNames()) { | ||||
|             throw new IllegalStateException("This can only be used for names longer than 16 characters!"); | ||||
| @@ -2017,144 +2065,6 @@ public class DisguiseUtilities { | ||||
|         return board.getEntryTeam(name) == null && Bukkit.getPlayerExact(name) == null; | ||||
|     } | ||||
|  | ||||
|     public static void removeSelfDisguiseScoreboard(Player player) { | ||||
|         String originalTeam = preDisguiseTeam.remove(player.getUniqueId()); | ||||
|         String teamDisguise = disguiseTeam.remove(player.getUniqueId()); | ||||
|  | ||||
|         if (teamDisguise == null || DisguiseConfig.getPushingOption() == DisguisePushing.IGNORE_SCOREBOARD) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         // Code replace them back onto their original scoreboard team | ||||
|         Scoreboard scoreboard = player.getScoreboard(); | ||||
|         Team team = originalTeam == null ? null : scoreboard.getTeam(originalTeam); | ||||
|         Team ldTeam = null; | ||||
|  | ||||
|         for (Team t : scoreboard.getTeams()) { | ||||
|             if (!t.hasEntry(player.getName())) { | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
|             ldTeam = t; | ||||
|             break; | ||||
|         } | ||||
|  | ||||
|         if (DisguiseConfig.isWarnScoreboardConflict()) { | ||||
|             if (ldTeam == null || !ldTeam.getName().equals(teamDisguise)) { | ||||
|                 getLogger().warning("Scoreboard conflict, the self disguise player was not on the expected team!"); | ||||
|             } else { | ||||
|                 OptionStatus collisions = ldTeam.getOption(Option.COLLISION_RULE); | ||||
|  | ||||
|                 if (collisions != OptionStatus.NEVER && collisions != OptionStatus.FOR_OTHER_TEAMS) { | ||||
|                     getLogger().warning("Scoreboard conflict, the collisions for a self disguise player team has been " + "unexpectedly modifed!"); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         if (ldTeam != null) { | ||||
|             if (!ldTeam.getName().equals("LD_Pushing") && !ldTeam.getName().endsWith("_LDP")) { | ||||
|                 // Its not a team assigned by Lib's Disguises | ||||
|                 ldTeam = null; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         if (team != null) { | ||||
|             team.addEntry(player.getName()); | ||||
|         } else if (ldTeam != null) { | ||||
|             ldTeam.removeEntry(player.getName()); | ||||
|         } | ||||
|  | ||||
|         if (ldTeam != null && ldTeam.getEntries().isEmpty()) { | ||||
|             ldTeam.unregister(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void setupSelfDisguiseScoreboard(Player player) { | ||||
|         // They're already in a disguise team | ||||
|         if (disguiseTeam.containsKey(player.getUniqueId())) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         if ((LibsPremium.getPluginInformation() != null && LibsPremium.getPluginInformation().isPremium() && !LibsPremium.getPluginInformation().isLegit()) || | ||||
|                 (LibsPremium.getPaidInformation() != null && !LibsPremium.getPaidInformation().isLegit())) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         DisguisePushing pOption = DisguiseConfig.getPushingOption(); | ||||
|  | ||||
|         if (pOption == DisguisePushing.IGNORE_SCOREBOARD) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         // Code to stop player pushing | ||||
|         Scoreboard scoreboard = player.getScoreboard(); | ||||
|         Team prevTeam = null; | ||||
|         Team ldTeam = null; | ||||
|         String ldTeamName = "LD_Pushing"; | ||||
|  | ||||
|         for (Team t : scoreboard.getTeams()) { | ||||
|             if (!t.hasEntry(player.getName())) { | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
|             prevTeam = t; | ||||
|             break; | ||||
|         } | ||||
|  | ||||
|         // If the player is in a team already and the team isn't one controlled by Lib's Disguises | ||||
|         if (prevTeam != null && !(prevTeam.getName().equals("LD_Pushing") || prevTeam.getName().endsWith("_LDP"))) { | ||||
|             // If we're creating a scoreboard | ||||
|             if (pOption == DisguisePushing.CREATE_SCOREBOARD) { | ||||
|                 // Remember his old team so we can give him it back later | ||||
|                 preDisguiseTeam.put(player.getUniqueId(), prevTeam.getName()); | ||||
|             } else { | ||||
|                 // We're modifying the scoreboard | ||||
|                 ldTeam = prevTeam; | ||||
|             } | ||||
|         } else { | ||||
|             prevTeam = null; | ||||
|         } | ||||
|  | ||||
|         // If we are creating a new scoreboard because the current one must not be modified | ||||
|         if (pOption == DisguisePushing.CREATE_SCOREBOARD) { | ||||
|             // If they have a team, we'll reuse that name. Otherwise go for another name | ||||
|             ldTeamName = (prevTeam == null ? "NoTeam" : prevTeam.getName()); | ||||
|  | ||||
|             // Give the teamname a custom name | ||||
|             ldTeamName = ldTeamName.substring(0, Math.min(12, ldTeamName.length())) + "_LDP"; | ||||
|         } | ||||
|  | ||||
|         if (ldTeam == null && (ldTeam = scoreboard.getTeam(ldTeamName)) == null) { | ||||
|             ldTeam = scoreboard.registerNewTeam(ldTeamName); | ||||
|         } | ||||
|  | ||||
|         disguiseTeam.put(player.getUniqueId(), ldTeam.getName()); | ||||
|  | ||||
|         if (!ldTeam.hasEntry(player.getName())) { | ||||
|             ldTeam.addEntry(player.getName()); | ||||
|         } | ||||
|  | ||||
|         if (pOption == DisguisePushing.CREATE_SCOREBOARD && prevTeam != null) { | ||||
|             ldTeam.setAllowFriendlyFire(prevTeam.allowFriendlyFire()); | ||||
|             ldTeam.setCanSeeFriendlyInvisibles(prevTeam.canSeeFriendlyInvisibles()); | ||||
|             ldTeam.setDisplayName(prevTeam.getDisplayName()); | ||||
|             ldTeam.setPrefix(prevTeam.getPrefix()); | ||||
|             ldTeam.setSuffix(prevTeam.getSuffix()); | ||||
|  | ||||
|             for (Option option : Team.Option.values()) { | ||||
|                 ldTeam.setOption(option, prevTeam.getOption(option)); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         if (ldTeam.getOption(Option.COLLISION_RULE) != OptionStatus.NEVER && DisguiseConfig.isModifyCollisions()) { | ||||
|             ldTeam.setOption(Option.COLLISION_RULE, OptionStatus.NEVER); | ||||
|         } | ||||
|  | ||||
|         if (ldTeam.canSeeFriendlyInvisibles() && DisguiseConfig.isDisableFriendlyInvisibles()) { | ||||
|             ldTeam.setCanSeeFriendlyInvisibles(false); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Splits a string while respecting quotes. | ||||
|      * <p> | ||||
| @@ -2357,8 +2267,6 @@ public class DisguiseUtilities { | ||||
|                 return; | ||||
|             } | ||||
|  | ||||
|             setupSelfDisguiseScoreboard(player); | ||||
|  | ||||
|             // Check for code differences in PaperSpigot vs Spigot | ||||
|             if (!runningPaper) { | ||||
|                 // Add himself to his own entity tracker | ||||
|   | ||||
| @@ -404,6 +404,7 @@ public class DisguiseListener implements Listener { | ||||
|  | ||||
|                 if (p.getScoreboard() != Bukkit.getScoreboardManager().getMainScoreboard()) { | ||||
|                     DisguiseUtilities.registerAllExtendedNames(p.getScoreboard()); | ||||
|                     DisguiseUtilities.registerColors(p.getScoreboard()); | ||||
|                 } | ||||
|  | ||||
|                 if (!p.hasMetadata("forge_mods")) { | ||||
| @@ -486,8 +487,6 @@ public class DisguiseListener implements Listener { | ||||
|     public void onQuit(PlayerQuitEvent event) { | ||||
|         Player player = event.getPlayer(); | ||||
|  | ||||
|         DisguiseUtilities.removeSelfDisguiseScoreboard(player); | ||||
|  | ||||
|         // Removed as its not compatible with scoreboard teams | ||||
|         /*if (player.hasPermission("libsdisguises.seethrough")) { | ||||
|             for (Set<TargetedDisguise> disguises : DisguiseUtilities.getDisguises().values()) { | ||||
|   | ||||
| @@ -139,7 +139,7 @@ public class PacketHandlerSpawn implements IPacketHandler { | ||||
|             StructureModifier<Object> mods = spawnPainting.getModifier(); | ||||
|  | ||||
|             mods.write(0, disguisedEntity.getEntityId()); | ||||
|             mods.write(1, disguisedEntity.getUniqueId()); | ||||
|             mods.write(1, disguise.getUUID()); | ||||
|             mods.write(2, ReflectionManager.getBlockPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())); | ||||
|             mods.write(3, ReflectionManager.getEnumDirection(((int) loc.getYaw()) % 4)); | ||||
|  | ||||
| @@ -257,7 +257,7 @@ public class PacketHandlerSpawn implements IPacketHandler { | ||||
|             StructureModifier<Object> mods = spawnEntity.getModifier(); | ||||
|  | ||||
|             mods.write(0, disguisedEntity.getEntityId()); | ||||
|             mods.write(1, disguisedEntity.getUniqueId()); | ||||
|             mods.write(1, disguise.getUUID()); | ||||
|  | ||||
|             if (!disguise.getType().isCustom()) { | ||||
|                 mods.write(2, disguise.getType().getTypeId()); | ||||
| @@ -357,7 +357,7 @@ public class PacketHandlerSpawn implements IPacketHandler { | ||||
|                 } | ||||
|  | ||||
|                 Object[] params = | ||||
|                         new Object[]{disguisedEntity.getEntityId(), disguisedEntity.getUniqueId(), x, y, z, loc.getPitch(), loc.getYaw(), entityType, data, | ||||
|                         new Object[]{disguisedEntity.getEntityId(), disguise.getUUID(), x, y, z, loc.getPitch(), loc.getYaw(), entityType, data, | ||||
|                                 ReflectionManager.getVec3D(disguisedEntity.getVelocity())}; | ||||
|  | ||||
|                 spawnEntity = ProtocolLibrary.getProtocolManager().createPacketConstructor(PacketType.Play.Server.SPAWN_ENTITY, params).createPacket(params); | ||||
|   | ||||
| @@ -24,7 +24,7 @@ public class PacketListenerScoreboardTeam extends PacketAdapter { | ||||
|         PacketContainer packet = event.getPacket(); | ||||
|         String name = packet.getStrings().read(0); | ||||
|  | ||||
|         if (name == null || !name.startsWith("LD_") || name.equals("LD_NoName") || name.equals("LD_Pushing")) { | ||||
|         if (name == null || !name.startsWith("LD_") || name.equals("LD_NoName")) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -128,6 +128,8 @@ public class ParamInfoTypes { | ||||
|                 "Set how long the disguise lasts, <Num><Time><Num>... where <Time> is (s/sec)(m/min)(h/hour)(d/day) " + | ||||
|                         "etc. 30m20secs = 30 minutes, 20 seconds")); | ||||
|  | ||||
|         paramInfos.add(new ParamInfoEnum(ChatColor.class, "ChatColor", "A chat color")); | ||||
|  | ||||
|         // Register base types | ||||
|         Map<String, Object> booleanMap = new HashMap<>(); | ||||
|         booleanMap.put("true", true); | ||||
|   | ||||
| @@ -310,19 +310,12 @@ public enum LibsMsg { | ||||
|     ITEM_SERIALIZED_MC_LD_NO_COPY(ChatColor.GOLD + "MC Serialized for LD: " + ChatColor.YELLOW + "%s"), | ||||
|     ITEM_SIMPLE_STRING_NO_COPY(ChatColor.GOLD + "Simple: " + ChatColor.YELLOW + "%s"), | ||||
|     LIBS_SCOREBOARD_NO_TEAM(ChatColor.RED + "Not on a scoreboard team!"), | ||||
|     LIBS_SCOREBOARD_NO_TEAM_PUSH(ChatColor.RED + "On scoreboard team '%s' and pushing is enabled! (That's bad)"), | ||||
|     PLUGIN_TAB_DETECTED(ChatColor.RED + "TAB has been detected! This is a huge culprit! Check the TAB config and set " + | ||||
|             ChatColor.GREEN + "enable-collision: true" + ChatColor.RED + " to " + ChatColor.DARK_GREEN + | ||||
|             "enable-collision: false"), | ||||
|     LIBS_SCOREBOARD_SUCCESS(ChatColor.GOLD + | ||||
|             "On scoreboard team '%s' with pushing disabled! If you're still having issues and you are disguised right" + | ||||
|             " now, then " + | ||||
|             "you have a plugin modifying scoreboard through packets. Example of this is a plugin that modifies your " + | ||||
|             "name above head, or the tablist. Check their configs for pushing disabling options\nSay 'I read to the " + | ||||
|             "end' if you " + "still need help with this, or we'll assume you can't read."), | ||||
|     LIBS_SCOREBOARD_DISABLED( | ||||
|             "The scoreboard modification has been disabled in config, will continue the debug incase this is intended" + | ||||
|                     "."), | ||||
|     LIBS_SCOREBOARD_NAMES_DISABLED(ChatColor.RED + | ||||
|             "Scoreboard names has been disabled, the test for player disguises has failed before it started"), | ||||
|     LIBS_SCOREBOARD_IGNORE_TEST( | ||||
|   | ||||
		Reference in New Issue
	
	Block a user