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

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

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,19 +51,24 @@ 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) {
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
public void sendMail(@NotNull ChatMessage chatMessage) {
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,9 +36,20 @@ public class PartyChatMailer extends AbstractChatMailer {
return mcMMO.getAudiences().filter(party.getSamePartyPredicate());
}
public @NotNull TextComponent addStyle(@NotNull Author author, @NotNull String 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
public void sendMail(@NotNull ChatMessage chatMessage) {

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

@ -748,10 +748,13 @@ permissions:
children:
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