From d183d1217c835ec0ae3615545ff1c604b2d27126 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Tue, 27 Oct 2020 11:55:59 -0700 Subject: [PATCH] Players & Console can now use color codes in party or admin chat (new permission node mcmmo.chat.colors) --- Changelog.txt | 2 ++ .../com/gmail/nossr50/chat/ChatManager.java | 8 ++++---- .../nossr50/chat/author/AdminAuthor.java | 8 ++++++++ .../nossr50/chat/mailer/AdminChatMailer.java | 16 ++++++++++++---- .../nossr50/chat/mailer/PartyChatMailer.java | 19 +++++++++++++++---- .../gmail/nossr50/locale/LocaleLoader.java | 2 +- .../com/gmail/nossr50/util/Permissions.java | 1 + src/main/resources/plugin.yml | 8 ++++++-- 8 files changed, 49 insertions(+), 15 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 1baf71fe8..2696f4446 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,6 +1,8 @@ Version 2.1.150 mcMMO should now be compatible with 1.16.4's new social features mcMMO Party & Admin Chat have had a rewrite, work was put in to make sure their API would be mostly compatible with the old one + Players & Console can now use color codes (including stuff like &a or [[GREEN]]) in party or admin chat + Added new permission node 'mcmmo.chat.colors' which allows players to use color codes, negate to disallow this The style and look of admin/party chat is now determined by locale file instead of options in config.yml Improved messages players recieve when they toggle on or off admin or party chat All locale files have had [[]] color codes replaced by & color codes, you can still use [[GOLD]] and stuff if you want diff --git a/src/main/java/com/gmail/nossr50/chat/ChatManager.java b/src/main/java/com/gmail/nossr50/chat/ChatManager.java index 51b61d273..7d19df79f 100644 --- a/src/main/java/com/gmail/nossr50/chat/ChatManager.java +++ b/src/main/java/com/gmail/nossr50/chat/ChatManager.java @@ -60,10 +60,10 @@ public class ChatManager { private void processPlayerMessage(@NotNull McMMOPlayer mmoPlayer, @NotNull ChatChannel chatChannel, @NotNull String rawMessage, boolean isAsync) { switch (chatChannel) { case ADMIN: - adminChatMailer.processChatMessage(mmoPlayer.getAdminAuthor(), rawMessage, isAsync); + adminChatMailer.processChatMessage(mmoPlayer.getAdminAuthor(), rawMessage, isAsync, Permissions.colorChat(mmoPlayer.getPlayer())); break; case PARTY: - partyChatMailer.processChatMessage(mmoPlayer.getPartyAuthor(), rawMessage, mmoPlayer.getParty(), isAsync); + partyChatMailer.processChatMessage(mmoPlayer.getPartyAuthor(), rawMessage, mmoPlayer.getParty(), isAsync, Permissions.colorChat(mmoPlayer.getPlayer())); break; case PARTY_OFFICER: case NONE: @@ -76,7 +76,7 @@ public class ChatManager { * @param rawMessage raw message from the console */ public void processConsoleMessage(@NotNull String rawMessage) { - adminChatMailer.processChatMessage(getConsoleAuthor(), rawMessage, false); + adminChatMailer.processChatMessage(getConsoleAuthor(), rawMessage, false, true); } /** @@ -93,7 +93,7 @@ public class ChatManager { * @param party target party */ public void processConsoleMessage(@NotNull String rawMessage, @NotNull Party party) { - partyChatMailer.processChatMessage(getConsoleAuthor(), rawMessage, party, false); + partyChatMailer.processChatMessage(getConsoleAuthor(), rawMessage, party, false, true); } /** diff --git a/src/main/java/com/gmail/nossr50/chat/author/AdminAuthor.java b/src/main/java/com/gmail/nossr50/chat/author/AdminAuthor.java index e08d64610..7d6053403 100644 --- a/src/main/java/com/gmail/nossr50/chat/author/AdminAuthor.java +++ b/src/main/java/com/gmail/nossr50/chat/author/AdminAuthor.java @@ -30,6 +30,14 @@ public class AdminAuthor implements Author { } } + public @NotNull Player getPlayer() { + return player; + } + + public @Nullable String getOverrideName() { + return overrideName; + } + @Override public void setName(@NotNull String newName) { overrideName = newName; diff --git a/src/main/java/com/gmail/nossr50/chat/mailer/AdminChatMailer.java b/src/main/java/com/gmail/nossr50/chat/mailer/AdminChatMailer.java index ffe78599f..43bc0557f 100644 --- a/src/main/java/com/gmail/nossr50/chat/mailer/AdminChatMailer.java +++ b/src/main/java/com/gmail/nossr50/chat/mailer/AdminChatMailer.java @@ -1,5 +1,6 @@ package com.gmail.nossr50.chat.mailer; +import com.gmail.nossr50.chat.author.AdminAuthor; import com.gmail.nossr50.chat.author.Author; import com.gmail.nossr50.chat.message.AdminChatMessage; import com.gmail.nossr50.chat.message.ChatMessage; @@ -7,12 +8,14 @@ import com.gmail.nossr50.events.chat.McMMOAdminChatEvent; import com.gmail.nossr50.events.chat.McMMOChatEvent; import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.mcMMO; +import com.gmail.nossr50.util.Permissions; import net.kyori.adventure.audience.Audience; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; @@ -48,10 +51,15 @@ public class AdminChatMailer extends AbstractChatMailer { * Styles a string using a locale entry * @param author message author * @param message message contents + * @param canColor whether to replace colors codes with colors in the raw message * @return the styled string, based on a locale entry */ - public @NotNull TextComponent addStyle(@NotNull Author author, @NotNull String message) { - return Component.text(LocaleLoader.getString("Chat.Style.Admin", author.getAuthoredName(), message)); + public @NotNull TextComponent addStyle(@NotNull Author author, @NotNull String message, boolean canColor) { + if(canColor) { + return Component.text(LocaleLoader.getString("Chat.Style.Admin", author.getAuthoredName(), LocaleLoader.addColors(message))); + } else { + return Component.text(LocaleLoader.getString("Chat.Style.Admin", author.getAuthoredName(), message)); + } } @Override @@ -59,8 +67,8 @@ public class AdminChatMailer extends AbstractChatMailer { chatMessage.sendMessage(); } - public void processChatMessage(@NotNull Author author, @NotNull String rawString, boolean isAsync) { - AdminChatMessage chatMessage = new AdminChatMessage(pluginRef, author, constructAudience(), rawString, addStyle(author, rawString)); + 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)); McMMOChatEvent chatEvent = new McMMOAdminChatEvent(pluginRef, chatMessage, isAsync); Bukkit.getPluginManager().callEvent(chatEvent); diff --git a/src/main/java/com/gmail/nossr50/chat/mailer/PartyChatMailer.java b/src/main/java/com/gmail/nossr50/chat/mailer/PartyChatMailer.java index 49e210268..9bcb5de4c 100644 --- a/src/main/java/com/gmail/nossr50/chat/mailer/PartyChatMailer.java +++ b/src/main/java/com/gmail/nossr50/chat/mailer/PartyChatMailer.java @@ -21,8 +21,8 @@ public class PartyChatMailer extends AbstractChatMailer { super(pluginRef); } - public void processChatMessage(@NotNull Author author, @NotNull String rawString, @NotNull Party party, boolean isAsync) { - PartyChatMessage chatMessage = new PartyChatMessage(pluginRef, author, constructPartyAudience(party), rawString, addStyle(author, rawString), party); + public void processChatMessage(@NotNull Author author, @NotNull String rawString, @NotNull Party party, boolean isAsync, boolean canColor) { + PartyChatMessage chatMessage = new PartyChatMessage(pluginRef, author, constructPartyAudience(party), rawString, addStyle(author, rawString, canColor), party); McMMOChatEvent chatEvent = new McMMOPartyChatEvent(pluginRef, chatMessage, party, isAsync); Bukkit.getPluginManager().callEvent(chatEvent); @@ -36,8 +36,19 @@ public class PartyChatMailer extends AbstractChatMailer { return mcMMO.getAudiences().filter(party.getSamePartyPredicate()); } - public @NotNull TextComponent addStyle(@NotNull Author author, @NotNull String message) { - return Component.text(LocaleLoader.getString("Chat.Style.Party", author.getAuthoredName(), message)); + /** + * Styles a string using a locale entry + * @param author message author + * @param message message contents + * @param canColor whether to replace colors codes with colors in the raw message + * @return the styled string, based on a locale entry + */ + public @NotNull TextComponent addStyle(@NotNull Author author, @NotNull String message, boolean canColor) { + if(canColor) { + return Component.text(LocaleLoader.getString("Chat.Style.Party", author.getAuthoredName(), LocaleLoader.addColors(message))); + } else { + return Component.text(LocaleLoader.getString("Chat.Style.Party", author.getAuthoredName(), message)); + } } @Override diff --git a/src/main/java/com/gmail/nossr50/locale/LocaleLoader.java b/src/main/java/com/gmail/nossr50/locale/LocaleLoader.java index 11fc4841b..ac6f496ea 100644 --- a/src/main/java/com/gmail/nossr50/locale/LocaleLoader.java +++ b/src/main/java/com/gmail/nossr50/locale/LocaleLoader.java @@ -128,7 +128,7 @@ public final class LocaleLoader { } } - private static String addColors(String input) { + public static String addColors(String input) { input = input.replaceAll("\\Q[[BLACK]]\\E", ChatColor.BLACK.toString()); input = input.replaceAll("\\Q[[DARK_BLUE]]\\E", ChatColor.DARK_BLUE.toString()); input = input.replaceAll("\\Q[[DARK_GREEN]]\\E", ChatColor.DARK_GREEN.toString()); diff --git a/src/main/java/com/gmail/nossr50/util/Permissions.java b/src/main/java/com/gmail/nossr50/util/Permissions.java index b1acacdb1..3f804b363 100644 --- a/src/main/java/com/gmail/nossr50/util/Permissions.java +++ b/src/main/java/com/gmail/nossr50/util/Permissions.java @@ -39,6 +39,7 @@ public final class Permissions { /* CHAT */ public static boolean partyChat(Permissible permissible) { return permissible.hasPermission("mcmmo.chat.partychat"); } public static boolean adminChat(Permissible permissible) { return permissible.hasPermission("mcmmo.chat.adminchat"); } + public static boolean colorChat(Permissible permissible) { return permissible.hasPermission("mcmmo.chat.colors"); } /* * COMMANDS diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 7fdb6e627..e3ec1e2b5 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -746,12 +746,15 @@ permissions: mcmmo.chat.all: description: Implies all mcmmo.chat permissions. (Warning, contains adminchat) children: - mcmmo.chat.adminchat: true - mcmmo.chat.partychat: true + mcmmo.chat.adminchat: true + mcmmo.chat.partychat: true + mcmmo.chat.colors: true mcmmo.chat.adminchat: description: Allows participation in admin chat mcmmo.chat.partychat: description: Allows participation in party chat + mcmmo.chat.colors: + description: players can use color codes like &a or [[GREEN]] in mcMMO chat channels mcmmo.motd: description: Allows access to the motd mcmmo.commands.*: @@ -1297,6 +1300,7 @@ permissions: mcmmo.commands.defaults: true mcmmo.motd: true mcmmo.skills.all: true + mcmmo.chat.colors: true mcmmo.defaultsop: default: op description: mcmmo permissions that default to op