From 400e15b559559a2b9a31f4867bf1708c11b40ab5 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Thu, 10 Jan 2019 21:06:51 -0800 Subject: [PATCH] Party member list will only contain players visible to the player --- Changelog.txt | 1 + .../commands/party/PartyInfoCommand.java | 8 ++++++-- .../gmail/nossr50/datatypes/party/Party.java | 13 +++++++++++++ .../com/gmail/nossr50/party/PartyManager.java | 19 +++++++++++++++++++ 4 files changed, 39 insertions(+), 2 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 3dcbdd5ba..389e29cdf 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -35,6 +35,7 @@ Version 2.1.0 = (Skills) Added missing mushroom blocks to experience.yml defaults = (Skills) Tridents will no longer be considered unarmed = (MySQL) You can now inspect offline players + ! (Party) Party member list will only include members of the party that you can see (aren't vanished) ! (Skills) mcMMO skills will now be on a scale from 1-100 instead of 0-1000 (for existing mcMMO installs this is opt-in and off by default) ! (Skills) Skill Super Powers (Tree Feller, etc...) will now require level 10+ to use ! (Skills) Acrobatics' Roll exploit detection was tweaked to still allow for Roll to trigger even if it rewards no XP diff --git a/src/main/java/com/gmail/nossr50/commands/party/PartyInfoCommand.java b/src/main/java/com/gmail/nossr50/commands/party/PartyInfoCommand.java index b93aa40c6..20808def9 100644 --- a/src/main/java/com/gmail/nossr50/commands/party/PartyInfoCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/party/PartyInfoCommand.java @@ -116,8 +116,12 @@ public class PartyInfoCommand implements CommandExecutor { } private void displayMemberInfo(Player player, McMMOPlayer mcMMOPlayer, Party party) { - List nearMembers = PartyManager.getNearMembers(mcMMOPlayer); - int membersOnline = party.getOnlineMembers().size() - 1; + /* + * Only show members of the party that this member can see + */ + + List nearMembers = PartyManager.getNearVisibleMembers(mcMMOPlayer); + int membersOnline = party.getVisibleMembers(player).size() - 1; player.sendMessage(LocaleLoader.getString("Commands.Party.Members.Header")); player.sendMessage(LocaleLoader.getString("Commands.Party.MembersNear", nearMembers.size(), membersOnline)); diff --git a/src/main/java/com/gmail/nossr50/datatypes/party/Party.java b/src/main/java/com/gmail/nossr50/datatypes/party/Party.java index 2152b5fbe..2baff64ff 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/party/Party.java +++ b/src/main/java/com/gmail/nossr50/datatypes/party/Party.java @@ -76,6 +76,19 @@ public class Party { return onlineMembers; } + public List getVisibleMembers(Player commandSender) + { + ArrayList visibleMembers = new ArrayList<>(); + + for(Player p : onlineMembers) + { + if(commandSender.canSee(p)) + visibleMembers.add(p); + } + + return visibleMembers; + } + public List getOnlinePlayerNames(CommandSender sender) { Player player = sender instanceof Player ? (Player) sender : null; List onlinePlayerNames = new ArrayList(); diff --git a/src/main/java/com/gmail/nossr50/party/PartyManager.java b/src/main/java/com/gmail/nossr50/party/PartyManager.java index ec0ad94fe..319fc8f6c 100644 --- a/src/main/java/com/gmail/nossr50/party/PartyManager.java +++ b/src/main/java/com/gmail/nossr50/party/PartyManager.java @@ -128,6 +128,25 @@ public final class PartyManager { return nearMembers; } + public static List getNearVisibleMembers(McMMOPlayer mcMMOPlayer) { + List nearMembers = new ArrayList(); + Party party = mcMMOPlayer.getParty(); + + if (party != null) { + Player player = mcMMOPlayer.getPlayer(); + double range = Config.getInstance().getPartyShareRange(); + + for (Player member : party.getVisibleMembers(player)) { + if (!player.equals(member) && member.isValid() && Misc.isNear(player.getLocation(), member.getLocation(), range)) { + nearMembers.add(member); + } + } + } + + return nearMembers; + } + + /** * Get a list of all players in this player's party. *