diff --git a/main/src/main/java/net/citizensnpcs/EventListen.java b/main/src/main/java/net/citizensnpcs/EventListen.java index c6c4472a7..5c4d32c5d 100644 --- a/main/src/main/java/net/citizensnpcs/EventListen.java +++ b/main/src/main/java/net/citizensnpcs/EventListen.java @@ -483,7 +483,7 @@ public class EventListen implements Listener { skinUpdateTracker.updatePlayer(event.getPlayer(), 6 * 20, true); if (Setting.USE_SCOREBOARD_TEAMS.asBoolean() && !Util.isPlayerMainScoreboard(event.getPlayer())) { - Util.sendAllNpcTeamsTo(event.getPlayer(), 0); + Util.updateNPCTeams(event.getPlayer(), 0); } } diff --git a/main/src/main/java/net/citizensnpcs/trait/ScoreboardTrait.java b/main/src/main/java/net/citizensnpcs/trait/ScoreboardTrait.java index d32a57ed5..6a0dbf525 100644 --- a/main/src/main/java/net/citizensnpcs/trait/ScoreboardTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/ScoreboardTrait.java @@ -90,7 +90,7 @@ public class ScoreboardTrait extends Trait { } } } - Util.sendTeamPacketToAll(team, 2); + Util.sendTeamPacketToOnlinePlayers(team, 2); } public void removeTag(String tag) { diff --git a/main/src/main/java/net/citizensnpcs/util/Util.java b/main/src/main/java/net/citizensnpcs/util/Util.java index fef05461f..f1ce64052 100644 --- a/main/src/main/java/net/citizensnpcs/util/Util.java +++ b/main/src/main/java/net/citizensnpcs/util/Util.java @@ -3,8 +3,8 @@ package net.citizensnpcs.util; import java.util.EnumSet; import java.util.Random; import java.util.Set; -import java.util.regex.Pattern; import java.util.UUID; +import java.util.regex.Pattern; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -152,6 +152,16 @@ public class Util { } } + public static boolean isPlayerMainScoreboard(Player player) { + boolean isOnMain = player.getScoreboard().equals(Bukkit.getScoreboardManager().getMainScoreboard()); + if (isOnMain) { + PLAYERS_ON_MAIN_SCOREBOARD.add(player.getUniqueId()); + } else { + PLAYERS_ON_MAIN_SCOREBOARD.remove(player.getUniqueId()); + } + return isOnMain; + } + public static String listValuesPretty(Enum[] values) { return "" + Joiner.on(", ").join(values).toLowerCase(); } @@ -226,6 +236,23 @@ public class Util { to.getBlockZ(), (int) to.getYaw(), (int) to.getPitch()); } + /** + * @param mode + * 0 for create, 1 for remove, 2 for update + */ + public static void sendTeamPacketToOnlinePlayers(Team team, int mode) { + for (Player player : Bukkit.getOnlinePlayers()) { + boolean wasOnMain = PLAYERS_ON_MAIN_SCOREBOARD.contains(player.getUniqueId()); + if (isPlayerMainScoreboard(player)) + continue; + if (wasOnMain) { + updateNPCTeams(player, 0); + } else { + NMS.sendTeamPacket(player, team, mode); + } + } + } + public static String[] splitPlayerName(String coloredName) { String name = coloredName, prefix = null, suffix = null; if (coloredName.length() > 16) { @@ -274,49 +301,22 @@ public class Util { return new String[] { name, prefix, suffix }; } - public static boolean isPlayerMainScoreboard(Player player) { - boolean isOnMain = player.getScoreboard().equals(Bukkit.getScoreboardManager().getMainScoreboard()); - if (isOnMain) { - playersOnMainScoreboard.add(player.getUniqueId()); - } - else { - playersOnMainScoreboard.remove(player.getUniqueId()); - } - return isOnMain; - } - - public static void sendAllNpcTeamsTo(Player player, int mode) { - for (Player npcPlayer : PlayerUpdateTask.getRegisteredPlayerNPCs()) { - NPC npc = ((NPCHolder) npcPlayer).getNPC(); + public static void updateNPCTeams(Player toUpdate, int mode) { + for (Player player : PlayerUpdateTask.getRegisteredPlayerNPCs()) { + NPC npc = ((NPCHolder) player).getNPC(); String teamName = npc.data().get(NPC.SCOREBOARD_FAKE_TEAM_NAME_METADATA, ""); Team team = null; - if (teamName.length() == 0 || (team = Bukkit.getScoreboardManager().getMainScoreboard().getTeam(teamName)) == null) + if (teamName.length() == 0 + || (team = Bukkit.getScoreboardManager().getMainScoreboard().getTeam(teamName)) == null) continue; - NMS.sendTeamPacket(player, team, mode); + NMS.sendTeamPacket(toUpdate, team, mode); } } - /** - * @param mode 0 for create, 1 for remove, 2 for update - */ - public static void sendTeamPacketToAll(Team team, int mode) { - for (Player player : Bukkit.getOnlinePlayers()) { - boolean wasOnMain = playersOnMainScoreboard.contains(player.getUniqueId()); - if (!isPlayerMainScoreboard(player)) { - if (wasOnMain) { - sendAllNpcTeamsTo(player, 0); - } - else { - NMS.sendTeamPacket(player, team, mode); - } - } - } - } - - private static final Set playersOnMainScoreboard = Sets.newHashSet(); private static final Location AT_LOCATION = new Location(null, 0, 0, 0); private static String MINECRAFT_REVISION; private static final Pattern NON_ALPHABET_MATCHER = Pattern.compile(".*[^A-Za-z0-9_].*"); + private static final Set PLAYERS_ON_MAIN_SCOREBOARD = Sets.newHashSet(); } diff --git a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/HumanController.java b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/HumanController.java index 65ae012a1..8ae91eda2 100644 --- a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/HumanController.java +++ b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/HumanController.java @@ -84,7 +84,7 @@ public class HumanController extends AbstractEntityController { handle.getNPC().data().set(NPC.SCOREBOARD_FAKE_TEAM_NAME_METADATA, teamName); - Util.sendTeamPacketToAll(team, 0); + Util.sendTeamPacketToOnlinePlayers(team, 0); } } }, 20); @@ -113,7 +113,7 @@ public class HumanController extends AbstractEntityController { team.setSuffix(""); } team.removePlayer(entity); - Util.sendTeamPacketToAll(team, 1); + Util.sendTeamPacketToOnlinePlayers(team, 1); } } NMS.removeFromWorld(entity); diff --git a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/HumanController.java b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/HumanController.java index c85d7df9d..58ea6bb4f 100644 --- a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/HumanController.java +++ b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/HumanController.java @@ -84,7 +84,7 @@ public class HumanController extends AbstractEntityController { handle.getNPC().data().set(NPC.SCOREBOARD_FAKE_TEAM_NAME_METADATA, teamName); - Util.sendTeamPacketToAll(team, 0); + Util.sendTeamPacketToOnlinePlayers(team, 0); } } }, 20); @@ -113,7 +113,7 @@ public class HumanController extends AbstractEntityController { team.setSuffix(""); } team.removePlayer(entity); - Util.sendTeamPacketToAll(team, 1); + Util.sendTeamPacketToOnlinePlayers(team, 1); } } NMS.removeFromWorld(entity); diff --git a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HumanController.java b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HumanController.java index c4df534f4..6cef5f759 100644 --- a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HumanController.java +++ b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/HumanController.java @@ -84,7 +84,7 @@ public class HumanController extends AbstractEntityController { handle.getNPC().data().set(NPC.SCOREBOARD_FAKE_TEAM_NAME_METADATA, teamName); - Util.sendTeamPacketToAll(team, 0); + Util.sendTeamPacketToOnlinePlayers(team, 0); } } }, 20); @@ -113,7 +113,7 @@ public class HumanController extends AbstractEntityController { team.setSuffix(""); } team.removePlayer(entity); - Util.sendTeamPacketToAll(team, 1); + Util.sendTeamPacketToOnlinePlayers(team, 1); } } NMS.removeFromWorld(entity); diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HumanController.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HumanController.java index 353fdc461..e82234748 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HumanController.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/HumanController.java @@ -84,7 +84,7 @@ public class HumanController extends AbstractEntityController { handle.getNPC().data().set(NPC.SCOREBOARD_FAKE_TEAM_NAME_METADATA, teamName); - Util.sendTeamPacketToAll(team, 0); + Util.sendTeamPacketToOnlinePlayers(team, 0); } } }, 20); @@ -113,7 +113,7 @@ public class HumanController extends AbstractEntityController { team.setSuffix(""); } team.removePlayer(entity); - Util.sendTeamPacketToAll(team, 1); + Util.sendTeamPacketToOnlinePlayers(team, 1); } } NMS.removeFromWorld(entity); diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HumanController.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HumanController.java index e3c9bb325..a589014b5 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HumanController.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/HumanController.java @@ -84,7 +84,7 @@ public class HumanController extends AbstractEntityController { handle.getNPC().data().set(NPC.SCOREBOARD_FAKE_TEAM_NAME_METADATA, teamName); - Util.sendTeamPacketToAll(team, 0); + Util.sendTeamPacketToOnlinePlayers(team, 0); } } }, 20); @@ -113,7 +113,7 @@ public class HumanController extends AbstractEntityController { team.setSuffix(""); } team.removePlayer(entity); - Util.sendTeamPacketToAll(team, 1); + Util.sendTeamPacketToOnlinePlayers(team, 1); } } NMS.removeFromWorld(entity); diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HumanController.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HumanController.java index 9dc00e5b9..162848113 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HumanController.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/HumanController.java @@ -84,7 +84,7 @@ public class HumanController extends AbstractEntityController { handle.getNPC().data().set(NPC.SCOREBOARD_FAKE_TEAM_NAME_METADATA, teamName); - Util.sendTeamPacketToAll(team, 0); + Util.sendTeamPacketToOnlinePlayers(team, 0); } } }, 20); @@ -113,7 +113,7 @@ public class HumanController extends AbstractEntityController { team.setSuffix(""); } team.removePlayer(entity); - Util.sendTeamPacketToAll(team, 1); + Util.sendTeamPacketToOnlinePlayers(team, 1); } } NMS.removeFromWorld(entity); diff --git a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/entity/HumanController.java b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/entity/HumanController.java index ef41b4dd4..904bd66e3 100644 --- a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/entity/HumanController.java +++ b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/entity/HumanController.java @@ -84,7 +84,7 @@ public class HumanController extends AbstractEntityController { handle.getNPC().data().set(NPC.SCOREBOARD_FAKE_TEAM_NAME_METADATA, teamName); - Util.sendTeamPacketToAll(team, 0); + Util.sendTeamPacketToOnlinePlayers(team, 0); } } }, 20); @@ -113,7 +113,7 @@ public class HumanController extends AbstractEntityController { team.setSuffix(""); } team.removePlayer(entity); - Util.sendTeamPacketToAll(team, 1); + Util.sendTeamPacketToOnlinePlayers(team, 1); } } NMS.removeFromWorld(entity);