Players & Console can now use color codes in party or admin chat (new permission node mcmmo.chat.colors)

This commit is contained in:
nossr50
2020-10-27 11:55:59 -07:00
parent 1d55c4c2bc
commit d183d1217c
8 changed files with 49 additions and 15 deletions

View File

@ -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);
}
/**

View File

@ -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;

View File

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

View File

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

View File

@ -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());

View File

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

View File

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