From 0d558d79be241428639082d3b58a85d6ab7324ae Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sun, 24 Jan 2021 01:24:54 +1300 Subject: [PATCH] Handle team packets async --- .../disguise/utilities/DisguiseUtilities.java | 14 +++++++++++-- .../utilities/packets/PacketsManager.java | 2 +- .../PacketListenerScoreboardTeam.java | 20 +------------------ 3 files changed, 14 insertions(+), 22 deletions(-) diff --git a/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java b/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java index d9897544..50e612f2 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java @@ -68,6 +68,7 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.StandardCopyOption; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import java.util.regex.Matcher; @@ -91,14 +92,18 @@ public class DisguiseUtilities { return split[1]; } - public String getPrefix() { + public synchronized String getPrefix() { return split[0]; } - public String getSuffix() { + public synchronized String getSuffix() { return split[2]; } + public synchronized void setSplit(String[] split) { + this.split = split; + } + public void handleTeam(Scoreboard board, boolean nameVisible) { nameVisible = !DisguiseConfig.isArmorstandsName() && nameVisible; Team team = board.getTeam(getTeamName()); @@ -181,6 +186,8 @@ public class DisguiseUtilities { private final static List viewSelf = new ArrayList<>(); private final static List viewBar = new ArrayList<>(); private static long lastSavedPreferences; + @Getter + private final static ConcurrentHashMap teams = new ConcurrentHashMap<>(); /** * Only allow saves every 2 minutes @@ -1710,6 +1717,8 @@ public class DisguiseUtilities { exName.setTeamName(getUniqueTeam()); } + getTeams().put(exName.getTeamName(), exName); + for (Scoreboard board : getAllScoreboards()) { exName.handleTeam(board, disguise.isNameVisible()); } @@ -1748,6 +1757,7 @@ public class DisguiseUtilities { t.unregister(); } + getTeams().remove(removed.getScoreboardName().getTeamName()); removed.getScoreboardName().setTeamName(null); } diff --git a/src/main/java/me/libraryaddict/disguise/utilities/packets/PacketsManager.java b/src/main/java/me/libraryaddict/disguise/utilities/packets/PacketsManager.java index 4e923072..93156bc1 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/packets/PacketsManager.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/packets/PacketsManager.java @@ -173,7 +173,7 @@ public class PacketsManager { if (NmsVersion.v1_13.isSupported() && DisguiseConfig.getPlayerNameType() != DisguiseConfig.PlayerNameType.ARMORSTANDS) { scoreboardTeamListener = new PacketListenerScoreboardTeam(); - ProtocolLibrary.getProtocolManager().addPacketListener(scoreboardTeamListener); + ProtocolLibrary.getProtocolManager().getAsynchronousManager().registerAsyncHandler(scoreboardTeamListener); } } } diff --git a/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerScoreboardTeam.java b/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerScoreboardTeam.java index 77bf3c96..7d4ecb6f 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerScoreboardTeam.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerScoreboardTeam.java @@ -33,25 +33,7 @@ public class PacketListenerScoreboardTeam extends PacketAdapter { return; } - DisguiseUtilities.DScoreTeam team = null; - - loop: - for (Set disguises : DisguiseUtilities.getDisguises().values()) { - for (Disguise disguise : disguises) { - if (!disguise.isPlayerDisguise() || !((PlayerDisguise) disguise).hasScoreboardName()) { - continue; - } - - DisguiseUtilities.DScoreTeam t = ((PlayerDisguise) disguise).getScoreboardName(); - - if (!name.equals(t.getTeamName())) { - continue; - } - - team = t; - break loop; - } - } + DisguiseUtilities.DScoreTeam team = DisguiseUtilities.getTeams().get(name); if (team == null) { return;