|
@@ -1,5 +1,6 @@
|
|
|
package com.gmail.nossr50.datatypes.party;
|
|
|
|
|
|
+import com.gmail.nossr50.chat.ChatManager;
|
|
|
import com.gmail.nossr50.chat.SamePartyPredicate;
|
|
|
import com.gmail.nossr50.config.ChatConfig;
|
|
|
import com.gmail.nossr50.config.Config;
|
|
@@ -17,17 +18,14 @@ import com.gmail.nossr50.util.sounds.SoundManager;
|
|
|
import com.gmail.nossr50.util.sounds.SoundType;
|
|
|
import org.bukkit.Bukkit;
|
|
|
import org.bukkit.ChatColor;
|
|
|
+import org.bukkit.OfflinePlayer;
|
|
|
import org.bukkit.command.CommandSender;
|
|
|
import org.bukkit.entity.Player;
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
|
|
import java.text.DecimalFormat;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.LinkedHashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.UUID;
|
|
|
+import java.util.*;
|
|
|
import java.util.function.Predicate;
|
|
|
-import java.util.stream.Collectors;
|
|
|
|
|
|
public class Party {
|
|
|
private final @NotNull Predicate<CommandSender> samePartyPredicate;
|
|
@@ -353,144 +351,32 @@ public class Party {
|
|
|
*/
|
|
|
public String createMembersList(Player player) {
|
|
|
StringBuilder memberList = new StringBuilder();
|
|
|
+ List<String> coloredNames = new ArrayList<>();
|
|
|
|
|
|
- List<UUID> onlineMembers = members.keySet().stream()
|
|
|
- .filter(x -> Bukkit.getOfflinePlayer(x).isOnline())
|
|
|
- .collect(Collectors.toList());
|
|
|
-
|
|
|
- List<UUID> offlineMembers = members.keySet().stream()
|
|
|
- .filter(x -> !Bukkit.getOfflinePlayer(x).isOnline())
|
|
|
- .collect(Collectors.toList());
|
|
|
-
|
|
|
- ArrayList<UUID> visiblePartyList = new ArrayList<>();
|
|
|
- boolean isPartyLeaderOfflineOrHidden = false;
|
|
|
- ArrayList<UUID> offlineOrHiddenPartyList = new ArrayList<>();
|
|
|
-
|
|
|
- for(UUID onlineMember : onlineMembers)
|
|
|
- {
|
|
|
- Player onlinePlayer = Bukkit.getPlayer(onlineMember);
|
|
|
-
|
|
|
- if(!isNotSamePerson(player.getUniqueId(), onlineMember)
|
|
|
- || onlinePlayer != null && player.canSee(onlinePlayer))
|
|
|
- {
|
|
|
- visiblePartyList.add(onlineMember);
|
|
|
+ for(UUID playerUUID : members.keySet()) {
|
|
|
+ OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(playerUUID);
|
|
|
+ if(offlinePlayer.isOnline() && player.canSee((Player) offlinePlayer)) {
|
|
|
+ coloredNames.add(ChatColor.GREEN + offlinePlayer.getName());
|
|
|
} else {
|
|
|
- //Party leader and cannot be seen by this player
|
|
|
- if(isNotSamePerson(leader.getUniqueId(), player.getUniqueId()) && onlineMember == leader.getUniqueId())
|
|
|
- isPartyLeaderOfflineOrHidden = true;
|
|
|
-
|
|
|
- offlineOrHiddenPartyList.add(onlineMember);
|
|
|
+ coloredNames.add(ChatColor.DARK_GRAY + offlinePlayer.getName());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if(offlineMembers.contains(leader.getUniqueId()))
|
|
|
- isPartyLeaderOfflineOrHidden = true;
|
|
|
-
|
|
|
- //Add all the actually offline members
|
|
|
- offlineOrHiddenPartyList.addAll(offlineMembers);
|
|
|
-
|
|
|
- /* BUILD THE PARTY LIST WITH FORMATTING */
|
|
|
-
|
|
|
- String partyLeaderPrefix =
|
|
|
- /*ChatColor.WHITE
|
|
|
- + "["
|
|
|
- +*/ ChatColor.GOLD
|
|
|
- + "♕"
|
|
|
- /*+ ChatColor.WHITE
|
|
|
- + "]"*/
|
|
|
- + ChatColor.RESET;
|
|
|
-
|
|
|
- //First add the party leader
|
|
|
- memberList.append(partyLeaderPrefix);
|
|
|
-
|
|
|
- List<Player> nearbyPlayerList = getNearMembers(UserManager.getPlayer(player));
|
|
|
-
|
|
|
- boolean useDisplayNames = ChatConfig.getInstance().useDisplayNames(ChatChannel.PARTY);
|
|
|
-
|
|
|
- if(isPartyLeaderOfflineOrHidden)
|
|
|
- {
|
|
|
- if(isNotSamePerson(player.getUniqueId(), leader.getUniqueId()))
|
|
|
- applyOnlineAndRangeFormatting(memberList, false, false);
|
|
|
-
|
|
|
- memberList.append(ChatColor.GRAY)
|
|
|
- .append(leader.getPlayerName());
|
|
|
- }
|
|
|
- else {
|
|
|
- if(isNotSamePerson(leader.getUniqueId(), player.getUniqueId()))
|
|
|
- applyOnlineAndRangeFormatting(memberList, true, nearbyPlayerList.contains(Bukkit.getPlayer(leader.getUniqueId())));
|
|
|
+ buildChatMessage(memberList, coloredNames.toArray(new String[0]));
|
|
|
+ return memberList.toString();
|
|
|
+ }
|
|
|
|
|
|
- if(useDisplayNames) {
|
|
|
- memberList.append(leader.getPlayerName());
|
|
|
+ private void buildChatMessage(@NotNull StringBuilder stringBuilder, String @NotNull [] names) {
|
|
|
+ for(int i = 0; i < names.length; i++) {
|
|
|
+ if(i + 1 >= names.length) {
|
|
|
+ stringBuilder
|
|
|
+ .append(names[i]);
|
|
|
} else {
|
|
|
- memberList.append(ChatColor.GOLD)
|
|
|
- .append(Bukkit.getOfflinePlayer(leader.getUniqueId()));
|
|
|
+ stringBuilder
|
|
|
+ .append(names[i])
|
|
|
+ .append(" ");
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- //Space
|
|
|
- memberList.append(" ");
|
|
|
-
|
|
|
- //Now do online members
|
|
|
- for(UUID onlinePlayerUUID : visiblePartyList)
|
|
|
- {
|
|
|
- if(onlinePlayerUUID == leader.getUniqueId())
|
|
|
- continue;
|
|
|
-
|
|
|
- if(isNotSamePerson(onlinePlayerUUID, player.getUniqueId()))
|
|
|
- applyOnlineAndRangeFormatting(memberList, true, nearbyPlayerList.contains(Bukkit.getPlayer(onlinePlayerUUID)));
|
|
|
-
|
|
|
- if(useDisplayNames)
|
|
|
- {
|
|
|
- memberList.append(Bukkit.getPlayer(onlinePlayerUUID).getDisplayName());
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- //Color allies green, players dark aqua
|
|
|
- memberList.append(ChatColor.GREEN)
|
|
|
- .append(Bukkit.getPlayer(onlinePlayerUUID).getName());
|
|
|
- }
|
|
|
-
|
|
|
- memberList.append(" ").append(ChatColor.RESET);
|
|
|
- }
|
|
|
-
|
|
|
- for(UUID offlineOrHiddenPlayer : offlineOrHiddenPartyList)
|
|
|
- {
|
|
|
- if(offlineOrHiddenPlayer == leader.getUniqueId())
|
|
|
- continue;
|
|
|
-
|
|
|
- applyOnlineAndRangeFormatting(memberList, false, false);
|
|
|
-
|
|
|
- memberList.append(ChatColor.GRAY)
|
|
|
- .append(Bukkit.getOfflinePlayer(offlineOrHiddenPlayer).getName())
|
|
|
- .append(" ").append(ChatColor.RESET);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-// for (Player otherPlayer : this.getVisibleMembers(player)) {
|
|
|
-// String memberName = otherPlayer.getName();
|
|
|
-//
|
|
|
-// if (this.getLeader().getUniqueId().equals(otherPlayer.getUniqueId())) {
|
|
|
-// memberList.append(ChatColor.GOLD);
|
|
|
-//
|
|
|
-// if (otherPlayer == null) {
|
|
|
-// memberName = memberName.substring(0, 1) + ChatColor.GRAY + ChatColor.ITALIC + "" + memberName.substring(1);
|
|
|
-// }
|
|
|
-// }
|
|
|
-// else if (otherPlayer != null) {
|
|
|
-// memberList.append(ChatColor.WHITE);
|
|
|
-// }
|
|
|
-// else {
|
|
|
-// memberList.append(ChatColor.GRAY);
|
|
|
-// }
|
|
|
-//
|
|
|
-// if (player.getName().equalsIgnoreCase(otherPlayer.getName())) {
|
|
|
-// memberList.append(ChatColor.ITALIC);
|
|
|
-// }
|
|
|
-//
|
|
|
-// memberList.append(memberName).append(ChatColor.RESET).append(" ");
|
|
|
-// }
|
|
|
-
|
|
|
- return memberList.toString();
|
|
|
}
|
|
|
|
|
|
private boolean isNotSamePerson(UUID onlinePlayerUUID, UUID uniqueId) {
|