mirror of
				https://github.com/mcMMO-Dev/mcMMO.git
				synced 2025-11-03 18:43:43 +01:00 
			
		
		
		
	Fixed a bug where party members didn't have properly colored names, added some optimization and removed some unnecessary API
This commit is contained in:
		@@ -1,3 +1,13 @@
 | 
				
			|||||||
 | 
					Version 2.1.155
 | 
				
			||||||
 | 
					    Optimized party/admin chat a bit
 | 
				
			||||||
 | 
					    Fixed a bug where party members other than the party leader had names that weren't properly hex colored
 | 
				
			||||||
 | 
					    (API) Removed AbstractPlayerAuthor#getComponentDisplayName
 | 
				
			||||||
 | 
					    (API) Removed AbstractPlayerAuthor#getComponentUserName
 | 
				
			||||||
 | 
					    (API) Removed Author#getAuthoredComponentName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    NOTES:
 | 
				
			||||||
 | 
					    Removed some unnecessary API, we aren't a chat plugin so these things shouldn't be here.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Version 2.1.154
 | 
					Version 2.1.154
 | 
				
			||||||
    Hex colors are now supported in Party & Admin chat
 | 
					    Hex colors are now supported in Party & Admin chat
 | 
				
			||||||
    Added support for &#RRGGBB color codes (hex colors) in chat and nicknames for party and admin chat
 | 
					    Added support for &#RRGGBB color codes (hex colors) in chat and nicknames for party and admin chat
 | 
				
			||||||
@@ -6,7 +16,7 @@ Version 2.1.154
 | 
				
			|||||||
    Fixed a bug where using admin chat would in some circumstances throw a NPE
 | 
					    Fixed a bug where using admin chat would in some circumstances throw a NPE
 | 
				
			||||||
    (API) Author class has been reworked
 | 
					    (API) Author class has been reworked
 | 
				
			||||||
    (API) McMMOChatEvent::getSender removed (use getDisplayName() instead)
 | 
					    (API) McMMOChatEvent::getSender removed (use getDisplayName() instead)
 | 
				
			||||||
    (API) McMMMOChatEvent::setDisplayName() removed (you can set author names in Author)
 | 
					    (API) McMMMOChatEvent::setDisplayName() removed
 | 
				
			||||||
    (API) Removed Author::setName use Player::SetDisplayName instead
 | 
					    (API) Removed Author::setName use Player::SetDisplayName instead
 | 
				
			||||||
    (API) Modified Author::getAuthoredName signature to -> Author::getAuthoredName(ChatChannel)
 | 
					    (API) Modified Author::getAuthoredName signature to -> Author::getAuthoredName(ChatChannel)
 | 
				
			||||||
    (API) Added Author::getAuthoredComponentName(ChatChannel)
 | 
					    (API) Added Author::getAuthoredComponentName(ChatChannel)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								pom.xml
									
									
									
									
									
								
							@@ -2,7 +2,7 @@
 | 
				
			|||||||
    <modelVersion>4.0.0</modelVersion>
 | 
					    <modelVersion>4.0.0</modelVersion>
 | 
				
			||||||
    <groupId>com.gmail.nossr50.mcMMO</groupId>
 | 
					    <groupId>com.gmail.nossr50.mcMMO</groupId>
 | 
				
			||||||
    <artifactId>mcMMO</artifactId>
 | 
					    <artifactId>mcMMO</artifactId>
 | 
				
			||||||
    <version>2.1.154</version>
 | 
					    <version>2.1.155-SNAPSHOT</version>
 | 
				
			||||||
    <name>mcMMO</name>
 | 
					    <name>mcMMO</name>
 | 
				
			||||||
    <url>https://github.com/mcMMO-Dev/mcMMO</url>
 | 
					    <url>https://github.com/mcMMO-Dev/mcMMO</url>
 | 
				
			||||||
    <scm>
 | 
					    <scm>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,6 +10,7 @@ import com.gmail.nossr50.datatypes.party.Party;
 | 
				
			|||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 | 
					import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 | 
				
			||||||
import com.gmail.nossr50.locale.LocaleLoader;
 | 
					import com.gmail.nossr50.locale.LocaleLoader;
 | 
				
			||||||
import com.gmail.nossr50.mcMMO;
 | 
					import com.gmail.nossr50.mcMMO;
 | 
				
			||||||
 | 
					import com.gmail.nossr50.util.Misc;
 | 
				
			||||||
import com.gmail.nossr50.util.Permissions;
 | 
					import com.gmail.nossr50.util.Permissions;
 | 
				
			||||||
import com.gmail.nossr50.util.text.StringUtils;
 | 
					import com.gmail.nossr50.util.text.StringUtils;
 | 
				
			||||||
import net.kyori.adventure.audience.Audience;
 | 
					import net.kyori.adventure.audience.Audience;
 | 
				
			||||||
@@ -39,6 +40,7 @@ public class ChatManager {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Handles player messaging when they are either in party chat or admin chat modes
 | 
					     * Handles player messaging when they are either in party chat or admin chat modes
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
     * @param mmoPlayer target player
 | 
					     * @param mmoPlayer target player
 | 
				
			||||||
     * @param rawMessage the raw message from the player as it was typed
 | 
					     * @param rawMessage the raw message from the player as it was typed
 | 
				
			||||||
     * @param isAsync whether or not this is getting processed via async
 | 
					     * @param isAsync whether or not this is getting processed via async
 | 
				
			||||||
@@ -49,6 +51,7 @@ public class ChatManager {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Handles player messaging for a specific chat channel
 | 
					     * Handles player messaging for a specific chat channel
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
     * @param mmoPlayer target player
 | 
					     * @param mmoPlayer target player
 | 
				
			||||||
     * @param args the raw command arguments from the player
 | 
					     * @param args the raw command arguments from the player
 | 
				
			||||||
     * @param chatChannel target channel
 | 
					     * @param chatChannel target channel
 | 
				
			||||||
@@ -62,6 +65,7 @@ public class ChatManager {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Handles player messaging for a specific chat channel
 | 
					     * Handles player messaging for a specific chat channel
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
     * @param mmoPlayer target player
 | 
					     * @param mmoPlayer target player
 | 
				
			||||||
     * @param chatChannel target chat channel
 | 
					     * @param chatChannel target chat channel
 | 
				
			||||||
     * @param rawMessage raw chat message as it was typed
 | 
					     * @param rawMessage raw chat message as it was typed
 | 
				
			||||||
@@ -73,7 +77,7 @@ public class ChatManager {
 | 
				
			|||||||
                adminChatMailer.processChatMessage(mmoPlayer.getPlayerAuthor(), rawMessage, isAsync, Permissions.colorChat(mmoPlayer.getPlayer()));
 | 
					                adminChatMailer.processChatMessage(mmoPlayer.getPlayerAuthor(), rawMessage, isAsync, Permissions.colorChat(mmoPlayer.getPlayer()));
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case PARTY:
 | 
					            case PARTY:
 | 
				
			||||||
                partyChatMailer.processChatMessage(mmoPlayer.getPlayerAuthor(), rawMessage, mmoPlayer.getParty(), isAsync, Permissions.colorChat(mmoPlayer.getPlayer()), isPartyLeader(mmoPlayer));
 | 
					                partyChatMailer.processChatMessage(mmoPlayer.getPlayerAuthor(), rawMessage, mmoPlayer.getParty(), isAsync, Permissions.colorChat(mmoPlayer.getPlayer()), Misc.isPartyLeader(mmoPlayer));
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case PARTY_OFFICER:
 | 
					            case PARTY_OFFICER:
 | 
				
			||||||
            case NONE:
 | 
					            case NONE:
 | 
				
			||||||
@@ -81,10 +85,6 @@ public class ChatManager {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private boolean isPartyLeader(@NotNull McMMOPlayer mmoPlayer) {
 | 
					 | 
				
			||||||
        return mmoPlayer.getParty().getLeader().getUniqueId().equals(mmoPlayer.getPlayer().getUniqueId());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Handles console messaging to admins
 | 
					     * Handles console messaging to admins
 | 
				
			||||||
     * @param rawMessage raw message from the console
 | 
					     * @param rawMessage raw message from the console
 | 
				
			||||||
@@ -221,4 +221,5 @@ public class ChatManager {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,64 +1,87 @@
 | 
				
			|||||||
package com.gmail.nossr50.chat.author;
 | 
					package com.gmail.nossr50.chat.author;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.gmail.nossr50.datatypes.chat.ChatChannel;
 | 
				
			||||||
import com.gmail.nossr50.util.text.TextUtils;
 | 
					import com.gmail.nossr50.util.text.TextUtils;
 | 
				
			||||||
import com.google.common.base.Objects;
 | 
					import com.google.common.base.Objects;
 | 
				
			||||||
import net.kyori.adventure.text.TextComponent;
 | 
					 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
import org.checkerframework.checker.nullness.qual.NonNull;
 | 
					import org.checkerframework.checker.nullness.qual.NonNull;
 | 
				
			||||||
import org.jetbrains.annotations.NotNull;
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
import org.jetbrains.annotations.Nullable;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.HashMap;
 | 
				
			||||||
import java.util.UUID;
 | 
					import java.util.UUID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public abstract class AbstractPlayerAuthor implements Author {
 | 
					public abstract class AbstractPlayerAuthor implements Author {
 | 
				
			||||||
    private final @NotNull Player player;
 | 
					    private final @NotNull Player player;
 | 
				
			||||||
    private @NotNull String displayName;
 | 
					    private @NotNull String lastKnownDisplayName;
 | 
				
			||||||
    private @Nullable TextComponent componentDisplayName;
 | 
					    private final @NotNull HashMap<ChatChannel, String> sanitizedNameCache;
 | 
				
			||||||
    private @Nullable TextComponent componentUserName;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public AbstractPlayerAuthor(@NotNull Player player) {
 | 
					    public AbstractPlayerAuthor(@NotNull Player player) {
 | 
				
			||||||
        this.player = player;
 | 
					        this.player = player;
 | 
				
			||||||
        this.displayName = player.getDisplayName();
 | 
					        this.lastKnownDisplayName = player.getDisplayName();
 | 
				
			||||||
 | 
					        this.sanitizedNameCache = new HashMap<>();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Grabs the {@link TextComponent} version of a players display name
 | 
					     * Returns true if a players display name has changed
 | 
				
			||||||
     * Cached and only processed as needed
 | 
					 | 
				
			||||||
     * Always checks if the player display name has changed, if it has it regenerates the output
 | 
					 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @return the {@link TextComponent} version of a players display name
 | 
					     * @return true if the players display name has changed
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public @NotNull TextComponent getComponentDisplayName() {
 | 
					    private boolean hasPlayerDisplayNameChanged() {
 | 
				
			||||||
        //Not sure if this is expensive but it ensures always up to date names
 | 
					        return !player.getDisplayName().equals(lastKnownDisplayName);
 | 
				
			||||||
        if(!player.getDisplayName().equals(displayName)) {
 | 
					 | 
				
			||||||
            displayName = player.getDisplayName();
 | 
					 | 
				
			||||||
            componentDisplayName = null;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if(componentDisplayName != null) {
 | 
					 | 
				
			||||||
            return componentDisplayName;
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
            //convert to adventure component
 | 
					 | 
				
			||||||
            componentDisplayName = TextUtils.ofLegacyTextRaw(displayName);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return componentDisplayName;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Grabs the {@link TextComponent} version of a players current minecraft nickname
 | 
					     * Player display names can change and this method will update the last known display name of this player
 | 
				
			||||||
     * Cached and only processed as needed
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @return the {@link TextComponent} version of a players current minecraft nickname
 | 
					 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public @NotNull TextComponent getComponentUserName() {
 | 
					    private void updateLastKnownDisplayName() {
 | 
				
			||||||
        //Not sure if this is expensive but it ensures always up to date names
 | 
					        lastKnownDisplayName = player.getDisplayName();
 | 
				
			||||||
        if(componentUserName != null) {
 | 
					    }
 | 
				
			||||||
            return componentUserName;
 | 
					
 | 
				
			||||||
        } else {
 | 
					    /**
 | 
				
			||||||
            //convert to adventure component
 | 
					     * Gets a sanitized name for a channel
 | 
				
			||||||
            componentUserName = TextUtils.ofLegacyTextRaw(player.getName());
 | 
					     * Sanitized names are names that are friendly to the {@link net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer}
 | 
				
			||||||
 | 
					     * Sanitized names for authors are cached by channel and are only created as needed
 | 
				
			||||||
 | 
					     * Sanitized names will update if a players display name has updated
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param chatChannel target chat channel
 | 
				
			||||||
 | 
					     * @return the sanitized name for a player
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected @NotNull String getSanitizedName(@NotNull ChatChannel chatChannel, boolean useDisplayName) {
 | 
				
			||||||
 | 
					        //Already in cache
 | 
				
			||||||
 | 
					        if(sanitizedNameCache.containsKey(chatChannel)) {
 | 
				
			||||||
 | 
					            //Update cache
 | 
				
			||||||
 | 
					            if(useDisplayName && hasPlayerDisplayNameChanged()) {
 | 
				
			||||||
 | 
					                updateLastKnownDisplayName();
 | 
				
			||||||
 | 
					                updateSanitizedNameCache(chatChannel, true);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            //Update last known display name
 | 
				
			||||||
 | 
					            if(useDisplayName && hasPlayerDisplayNameChanged()) {
 | 
				
			||||||
 | 
					                updateLastKnownDisplayName();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //Add cache entry
 | 
				
			||||||
 | 
					            updateSanitizedNameCache(chatChannel, useDisplayName);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return sanitizedNameCache.get(chatChannel);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Update the sanitized name cache
 | 
				
			||||||
 | 
					     * This will add entries if one didn't exit
 | 
				
			||||||
 | 
					     * Sanitized names are associated with a {@link ChatChannel} as different chat channels have different chat name settings
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param chatChannel target chat channel
 | 
				
			||||||
 | 
					     * @param useDisplayName whether or not to use this authors display name
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private void updateSanitizedNameCache(@NotNull ChatChannel chatChannel, boolean useDisplayName) {
 | 
				
			||||||
 | 
					        if(useDisplayName) {
 | 
				
			||||||
 | 
					            sanitizedNameCache.put(chatChannel, TextUtils.sanitizeForSerializer(player.getDisplayName()));
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            //No need to sanitize a basic String
 | 
				
			||||||
 | 
					            sanitizedNameCache.put(chatChannel, player.getName());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return componentUserName;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
@@ -85,11 +108,13 @@ public abstract class AbstractPlayerAuthor implements Author {
 | 
				
			|||||||
        if (this == o) return true;
 | 
					        if (this == o) return true;
 | 
				
			||||||
        if (o == null || getClass() != o.getClass()) return false;
 | 
					        if (o == null || getClass() != o.getClass()) return false;
 | 
				
			||||||
        AbstractPlayerAuthor that = (AbstractPlayerAuthor) o;
 | 
					        AbstractPlayerAuthor that = (AbstractPlayerAuthor) o;
 | 
				
			||||||
        return Objects.equal(player, that.player);
 | 
					        return Objects.equal(player, that.player) &&
 | 
				
			||||||
 | 
					                Objects.equal(lastKnownDisplayName, that.lastKnownDisplayName) &&
 | 
				
			||||||
 | 
					                Objects.equal(sanitizedNameCache, that.sanitizedNameCache);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public int hashCode() {
 | 
					    public int hashCode() {
 | 
				
			||||||
        return Objects.hashCode(player);
 | 
					        return Objects.hashCode(player, lastKnownDisplayName, sanitizedNameCache);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,25 +2,10 @@ package com.gmail.nossr50.chat.author;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import com.gmail.nossr50.datatypes.chat.ChatChannel;
 | 
					import com.gmail.nossr50.datatypes.chat.ChatChannel;
 | 
				
			||||||
import net.kyori.adventure.identity.Identity;
 | 
					import net.kyori.adventure.identity.Identity;
 | 
				
			||||||
import net.kyori.adventure.text.TextComponent;
 | 
					 | 
				
			||||||
import org.jetbrains.annotations.NotNull;
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public interface Author extends Identity {
 | 
					public interface Author extends Identity {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * The name of this author as used in mcMMO chat
 | 
					 | 
				
			||||||
     * This is the {@link TextComponent} representation of the users current chat username
 | 
					 | 
				
			||||||
     * This can either be the player's display name or the player's official registered nickname with Mojang it depends on the servers chat settings for mcMMO
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * NOTE:
 | 
					 | 
				
			||||||
     * mcMMO doesn't transform a players name into a component when creating the chat message, instead it converts the whole string from raw legacy text (including md5 stuff) -> TextComponent via {@link net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer}
 | 
					 | 
				
			||||||
     * This method is just provided for convenience, it uses lazy initialization
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @param chatChannel which chat channel this is going to
 | 
					 | 
				
			||||||
     * @return The name of this author as used in mcMMO chat
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    @NotNull TextComponent getAuthoredComponentName(@NotNull ChatChannel chatChannel);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * The name of this author as used in mcMMO chat
 | 
					     * The name of this author as used in mcMMO chat
 | 
				
			||||||
     * This is the {@link String} representation of the users current chat username
 | 
					     * This is the {@link String} representation of the users current chat username
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,6 @@ package com.gmail.nossr50.chat.author;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import com.gmail.nossr50.datatypes.chat.ChatChannel;
 | 
					import com.gmail.nossr50.datatypes.chat.ChatChannel;
 | 
				
			||||||
import com.gmail.nossr50.util.text.TextUtils;
 | 
					import com.gmail.nossr50.util.text.TextUtils;
 | 
				
			||||||
import net.kyori.adventure.text.TextComponent;
 | 
					 | 
				
			||||||
import org.checkerframework.checker.nullness.qual.NonNull;
 | 
					import org.checkerframework.checker.nullness.qual.NonNull;
 | 
				
			||||||
import org.jetbrains.annotations.NotNull;
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -11,20 +10,13 @@ import java.util.UUID;
 | 
				
			|||||||
public class ConsoleAuthor implements Author {
 | 
					public class ConsoleAuthor implements Author {
 | 
				
			||||||
    private final UUID uuid;
 | 
					    private final UUID uuid;
 | 
				
			||||||
    private final @NotNull String name;
 | 
					    private final @NotNull String name;
 | 
				
			||||||
    private final @NotNull TextComponent componentName;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public ConsoleAuthor(@NotNull String name) {
 | 
					    public ConsoleAuthor(@NotNull String name) {
 | 
				
			||||||
        this.uuid = new UUID(0, 0);
 | 
					        this.uuid = new UUID(0, 0);
 | 
				
			||||||
        this.name = name;
 | 
					        this.name = TextUtils.sanitizeForSerializer(name);
 | 
				
			||||||
        this.componentName = TextUtils.ofBungeeRawStrings(name);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //TODO: Think of a better solution later
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public @NotNull TextComponent getAuthoredComponentName(@NotNull ChatChannel chatChannel) {
 | 
					 | 
				
			||||||
        return componentName;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //TODO: Think of a less clunky solution later
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public @NotNull String getAuthoredName(@NotNull ChatChannel chatChannel) {
 | 
					    public @NotNull String getAuthoredName(@NotNull ChatChannel chatChannel) {
 | 
				
			||||||
        return name;
 | 
					        return name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,6 @@ package com.gmail.nossr50.chat.author;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import com.gmail.nossr50.config.ChatConfig;
 | 
					import com.gmail.nossr50.config.ChatConfig;
 | 
				
			||||||
import com.gmail.nossr50.datatypes.chat.ChatChannel;
 | 
					import com.gmail.nossr50.datatypes.chat.ChatChannel;
 | 
				
			||||||
import net.kyori.adventure.text.TextComponent;
 | 
					 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
import org.jetbrains.annotations.NotNull;
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -12,22 +11,9 @@ public class PlayerAuthor extends AbstractPlayerAuthor {
 | 
				
			|||||||
        super(player);
 | 
					        super(player);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public @NotNull TextComponent getAuthoredComponentName(@NotNull ChatChannel chatChannel) {
 | 
					 | 
				
			||||||
        if(ChatConfig.getInstance().useDisplayNames(chatChannel)) {
 | 
					 | 
				
			||||||
            return getComponentDisplayName();
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
            return getComponentUserName();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public @NotNull String getAuthoredName(@NotNull ChatChannel chatChannel) {
 | 
					    public @NotNull String getAuthoredName(@NotNull ChatChannel chatChannel) {
 | 
				
			||||||
        if(ChatConfig.getInstance().useDisplayNames(chatChannel)) {
 | 
					        return getSanitizedName(chatChannel, ChatConfig.getInstance().useDisplayNames(chatChannel));
 | 
				
			||||||
            return getPlayer().getDisplayName();
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
            return getPlayer().getName();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,6 +29,7 @@ public class AdminChatMailer extends AbstractChatMailer {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Constructs an audience of admins
 | 
					     * Constructs an audience of admins
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
     * @return an audience of admins
 | 
					     * @return an audience of admins
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public @NotNull Audience constructAudience() {
 | 
					    public @NotNull Audience constructAudience() {
 | 
				
			||||||
@@ -37,6 +38,7 @@ public class AdminChatMailer extends AbstractChatMailer {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Predicate used to filter the audience
 | 
					     * Predicate used to filter the audience
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
     * @return admin chat audience predicate
 | 
					     * @return admin chat audience predicate
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public @NotNull Predicate<CommandSender> predicate() {
 | 
					    public @NotNull Predicate<CommandSender> predicate() {
 | 
				
			||||||
@@ -47,6 +49,7 @@ public class AdminChatMailer extends AbstractChatMailer {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Styles a string using a locale entry
 | 
					     * Styles a string using a locale entry
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
     * @param author message author
 | 
					     * @param author message author
 | 
				
			||||||
     * @param message message contents
 | 
					     * @param message message contents
 | 
				
			||||||
     * @param canColor whether to replace colors codes with colors in the raw message
 | 
					     * @param canColor whether to replace colors codes with colors in the raw message
 | 
				
			||||||
@@ -54,7 +57,7 @@ public class AdminChatMailer extends AbstractChatMailer {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public @NotNull TextComponent addStyle(@NotNull Author author, @NotNull String message, boolean canColor) {
 | 
					    public @NotNull TextComponent addStyle(@NotNull Author author, @NotNull String message, boolean canColor) {
 | 
				
			||||||
        if(canColor) {
 | 
					        if(canColor) {
 | 
				
			||||||
            return LocaleLoader.getTextComponent("Chat.Style.Admin", TextUtils.sanitizeAuthorName(author, ChatChannel.ADMIN), message);
 | 
					            return LocaleLoader.getTextComponent("Chat.Style.Admin", author.getAuthoredName(ChatChannel.ADMIN), message);
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            return TextUtils.ofLegacyTextRaw(LocaleLoader.getString("Chat.Style.Admin", author.getAuthoredName(ChatChannel.ADMIN), message));
 | 
					            return TextUtils.ofLegacyTextRaw(LocaleLoader.getString("Chat.Style.Admin", author.getAuthoredName(ChatChannel.ADMIN), message));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -65,6 +68,14 @@ public class AdminChatMailer extends AbstractChatMailer {
 | 
				
			|||||||
        chatMessage.sendMessage();
 | 
					        chatMessage.sendMessage();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Processes a chat message from an author to an audience of admins
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param author the author
 | 
				
			||||||
 | 
					     * @param rawString the raw message as the author typed it before any styling
 | 
				
			||||||
 | 
					     * @param isAsync whether or not this is being processed asynchronously
 | 
				
			||||||
 | 
					     * @param canColor whether or not the author can use colors in chat
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public void processChatMessage(@NotNull Author author, @NotNull String rawString, boolean isAsync, boolean canColor) {
 | 
					    public void processChatMessage(@NotNull Author author, @NotNull String rawString, boolean isAsync, boolean canColor) {
 | 
				
			||||||
        AdminChatMessage chatMessage = new AdminChatMessage(pluginRef, author, constructAudience(), rawString, addStyle(author, rawString, canColor));
 | 
					        AdminChatMessage chatMessage = new AdminChatMessage(pluginRef, author, constructAudience(), rawString, addStyle(author, rawString, canColor));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,6 +22,14 @@ public class PartyChatMailer extends AbstractChatMailer {
 | 
				
			|||||||
        super(pluginRef);
 | 
					        super(pluginRef);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Processes a chat message from an author to an audience of party members
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param author the author
 | 
				
			||||||
 | 
					     * @param rawString the raw message as the author typed it before any styling
 | 
				
			||||||
 | 
					     * @param isAsync whether or not this is being processed asynchronously
 | 
				
			||||||
 | 
					     * @param canColor whether or not the author can use colors in chat
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public void processChatMessage(@NotNull Author author, @NotNull String rawString, @NotNull Party party, boolean isAsync, boolean canColor, boolean isLeader) {
 | 
					    public void processChatMessage(@NotNull Author author, @NotNull String rawString, @NotNull Party party, boolean isAsync, boolean canColor, boolean isLeader) {
 | 
				
			||||||
        PartyChatMessage chatMessage = new PartyChatMessage(pluginRef, author, constructPartyAudience(party), rawString, addStyle(author, rawString, canColor, isLeader), party);
 | 
					        PartyChatMessage chatMessage = new PartyChatMessage(pluginRef, author, constructPartyAudience(party), rawString, addStyle(author, rawString, canColor, isLeader), party);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -33,12 +41,19 @@ public class PartyChatMailer extends AbstractChatMailer {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Constructs an {@link Audience} of party members
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param party target party
 | 
				
			||||||
 | 
					     * @return an {@link Audience} of party members
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public @NotNull Audience constructPartyAudience(@NotNull Party party) {
 | 
					    public @NotNull Audience constructPartyAudience(@NotNull Party party) {
 | 
				
			||||||
        return mcMMO.getAudiences().filter(party.getSamePartyPredicate());
 | 
					        return mcMMO.getAudiences().filter(party.getSamePartyPredicate());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Styles a string using a locale entry
 | 
					     * Styles a string using a locale entry
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
     * @param author message author
 | 
					     * @param author message author
 | 
				
			||||||
     * @param message message contents
 | 
					     * @param message message contents
 | 
				
			||||||
     * @param canColor whether to replace colors codes with colors in the raw message
 | 
					     * @param canColor whether to replace colors codes with colors in the raw message
 | 
				
			||||||
@@ -47,7 +62,7 @@ public class PartyChatMailer extends AbstractChatMailer {
 | 
				
			|||||||
    public @NotNull TextComponent addStyle(@NotNull Author author, @NotNull String message, boolean canColor, boolean isLeader) {
 | 
					    public @NotNull TextComponent addStyle(@NotNull Author author, @NotNull String message, boolean canColor, boolean isLeader) {
 | 
				
			||||||
        if(canColor) {
 | 
					        if(canColor) {
 | 
				
			||||||
            if(isLeader) {
 | 
					            if(isLeader) {
 | 
				
			||||||
                return LocaleLoader.getTextComponent("Chat.Style.Party.Leader", TextUtils.sanitizeAuthorName(author, ChatChannel.PARTY), message);
 | 
					                return LocaleLoader.getTextComponent("Chat.Style.Party.Leader", author.getAuthoredName(ChatChannel.PARTY), message);
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                return LocaleLoader.getTextComponent("Chat.Style.Party", author.getAuthoredName(ChatChannel.PARTY), message);
 | 
					                return LocaleLoader.getTextComponent("Chat.Style.Party", author.getAuthoredName(ChatChannel.PARTY), message);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,6 @@ import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 | 
				
			|||||||
import com.gmail.nossr50.locale.LocaleLoader;
 | 
					import com.gmail.nossr50.locale.LocaleLoader;
 | 
				
			||||||
import com.gmail.nossr50.mcMMO;
 | 
					import com.gmail.nossr50.mcMMO;
 | 
				
			||||||
import com.gmail.nossr50.util.player.UserManager;
 | 
					import com.gmail.nossr50.util.player.UserManager;
 | 
				
			||||||
import com.gmail.nossr50.util.text.TextUtils;
 | 
					 | 
				
			||||||
import com.google.common.base.Objects;
 | 
					import com.google.common.base.Objects;
 | 
				
			||||||
import net.kyori.adventure.audience.Audience;
 | 
					import net.kyori.adventure.audience.Audience;
 | 
				
			||||||
import net.kyori.adventure.text.TextComponent;
 | 
					import net.kyori.adventure.text.TextComponent;
 | 
				
			||||||
@@ -46,7 +45,7 @@ public class PartyChatMessage extends AbstractChatMessage {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        //Sends to everyone but console
 | 
					        //Sends to everyone but console
 | 
				
			||||||
        audience.sendMessage(author, componentMessage);
 | 
					        audience.sendMessage(author, componentMessage);
 | 
				
			||||||
        TextComponent spyMessage = LocaleLoader.getTextComponent("Chat.Spy.Party", TextUtils.sanitizeAuthorName(author, ChatChannel.PARTY), rawMessage, party.getName());
 | 
					        TextComponent spyMessage = LocaleLoader.getTextComponent("Chat.Spy.Party", author.getAuthoredName(ChatChannel.PARTY), rawMessage, party.getName());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //Relay to spies
 | 
					        //Relay to spies
 | 
				
			||||||
        messagePartyChatSpies(spyMessage);
 | 
					        messagePartyChatSpies(spyMessage);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
package com.gmail.nossr50.util;
 | 
					package com.gmail.nossr50.util;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.gmail.nossr50.api.ItemSpawnReason;
 | 
					import com.gmail.nossr50.api.ItemSpawnReason;
 | 
				
			||||||
 | 
					import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 | 
				
			||||||
import com.gmail.nossr50.events.items.McMMOItemSpawnEvent;
 | 
					import com.gmail.nossr50.events.items.McMMOItemSpawnEvent;
 | 
				
			||||||
import com.gmail.nossr50.mcMMO;
 | 
					import com.gmail.nossr50.mcMMO;
 | 
				
			||||||
import com.gmail.nossr50.runnables.player.PlayerProfileLoadingTask;
 | 
					import com.gmail.nossr50.runnables.player.PlayerProfileLoadingTask;
 | 
				
			||||||
@@ -299,4 +300,14 @@ public final class Misc {
 | 
				
			|||||||
    public static @NotNull Random getRandom() {
 | 
					    public static @NotNull Random getRandom() {
 | 
				
			||||||
        return random;
 | 
					        return random;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Whether or not a player is the party leader of a party
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param mmoPlayer target player
 | 
				
			||||||
 | 
					     * @return true if the player is the party leader
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static boolean isPartyLeader(@NotNull McMMOPlayer mmoPlayer) {
 | 
				
			||||||
 | 
					        return mmoPlayer.getParty().getLeader().getUniqueId().equals(mmoPlayer.getPlayer().getUniqueId());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,5 @@
 | 
				
			|||||||
package com.gmail.nossr50.util.text;
 | 
					package com.gmail.nossr50.util.text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.gmail.nossr50.chat.author.Author;
 | 
					 | 
				
			||||||
import com.gmail.nossr50.datatypes.chat.ChatChannel;
 | 
					 | 
				
			||||||
import com.gmail.nossr50.mcMMO;
 | 
					import com.gmail.nossr50.mcMMO;
 | 
				
			||||||
import net.kyori.adventure.text.Component;
 | 
					import net.kyori.adventure.text.Component;
 | 
				
			||||||
import net.kyori.adventure.text.ComponentBuilder;
 | 
					import net.kyori.adventure.text.ComponentBuilder;
 | 
				
			||||||
@@ -130,8 +128,4 @@ public class TextUtils {
 | 
				
			|||||||
        TextComponent componentForm = ofLegacyTextRaw(string);
 | 
					        TextComponent componentForm = ofLegacyTextRaw(string);
 | 
				
			||||||
        return customLegacySerializer.serialize(componentForm);
 | 
					        return customLegacySerializer.serialize(componentForm);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    public static @NotNull String sanitizeAuthorName(@NotNull Author author, @NotNull ChatChannel chatChannel) {
 | 
					 | 
				
			||||||
        return sanitizeForSerializer(author.getAuthoredName(ChatChannel.ADMIN));
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user