Browse Source

new party member list format/style

nossr50 4 years ago
parent
commit
c6ecf30d1f

+ 2 - 0
Changelog.txt

@@ -3,8 +3,10 @@ Version 2.1.151
     Added new config 'chat.yml'
     Added 'Chat.Channels.Party.Spies.Automatically_Enable_Spying' to chat.yml which when enabled will start users who have the chat spy permission in chat spying mode
     All chat settings that used to be in 'config.yml' are now in 'chat.yml'
+    The list of party members shown when using the party command has been simplified, this will change again in the T&C update
 
     NOTES:
+    I greatly disliked the old party member list but was avoiding rewriting it until later, someone pointed out how ugly it was and my OCD triggered and now it is rewritten. I will rewrite it again in T&C.
     The new config file lets you disable the chat system (you can disable all of it, or just party chat, and or just admin chat) without permission nodes.
     If you disable the party/admin chat, then the party/admin chat command never gets registered and attempting to use the command will result in a whole lot of nothing.
     I hate adding more config files using the old .yml system, but the config update is a ways out and this works for now.

+ 0 - 1
src/main/java/com/gmail/nossr50/chat/ChatManager.java

@@ -206,7 +206,6 @@ public class ChatManager {
             return false;
         } else {
             switch(chatChannel) {
-
                 case ADMIN:
                 case PARTY:
                 case PARTY_OFFICER:

+ 20 - 134
src/main/java/com/gmail/nossr50/datatypes/party/Party.java

@@ -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) {

+ 11 - 8
src/main/java/com/gmail/nossr50/listeners/PlayerListener.java

@@ -1,5 +1,6 @@
 package com.gmail.nossr50.listeners;
 
+import com.gmail.nossr50.config.ChatConfig;
 import com.gmail.nossr50.config.Config;
 import com.gmail.nossr50.config.WorldBlacklist;
 import com.gmail.nossr50.config.experience.ExperienceConfig;
@@ -892,14 +893,16 @@ public class PlayerListener implements Listener {
             return;
         }
 
-        if(mcMMOPlayer.getChatChannel() != ChatChannel.NONE) {
-            if(plugin.getChatManager().isMessageAllowed(mcMMOPlayer)) {
-                //If the message is allowed we cancel this event to avoid double sending messages
-                plugin.getChatManager().processPlayerMessage(mcMMOPlayer, event.getMessage(), event.isAsynchronous());
-                event.setCancelled(true);
-            } else {
-                //Message wasn't allowed, remove the player from their channel
-                plugin.getChatManager().setOrToggleChatChannel(mcMMOPlayer, mcMMOPlayer.getChatChannel());
+        if(plugin.getChatManager().isChatChannelEnabled(mcMMOPlayer.getChatChannel())) {
+            if(mcMMOPlayer.getChatChannel() != ChatChannel.NONE) {
+                if(plugin.getChatManager().isMessageAllowed(mcMMOPlayer)) {
+                    //If the message is allowed we cancel this event to avoid double sending messages
+                    plugin.getChatManager().processPlayerMessage(mcMMOPlayer, event.getMessage(), event.isAsynchronous());
+                    event.setCancelled(true);
+                } else {
+                    //Message wasn't allowed, remove the player from their channel
+                    plugin.getChatManager().setOrToggleChatChannel(mcMMOPlayer, mcMMOPlayer.getChatChannel());
+                }
             }
         }
     }