From 9d9b8f0bf2b775875e6d5cc1b3d49f3420eb2841 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Wed, 4 Aug 2021 15:46:45 +0200 Subject: [PATCH] Added configurable chat channels --- .../java/com/alttd/chat/config/Config.java | 5 ++ .../main/java/com/alttd/chat/ChatPlugin.java | 15 +++- .../com/alttd/chat/commands/ChatChannel.java | 31 ++++++++ .../com/alttd/chat/handler/ChatHandler.java | 74 ++++++++++++++++--- .../alttd/chat/listeners/PluginMessage.java | 36 ++++++--- galaxy/src/main/resources/plugin.yml | 4 +- 6 files changed, 140 insertions(+), 25 deletions(-) create mode 100644 galaxy/src/main/java/com/alttd/chat/commands/ChatChannel.java diff --git a/api/src/main/java/com/alttd/chat/config/Config.java b/api/src/main/java/com/alttd/chat/config/Config.java index 0d3b6ae..3c03a83 100755 --- a/api/src/main/java/com/alttd/chat/config/Config.java +++ b/api/src/main/java/com/alttd/chat/config/Config.java @@ -238,6 +238,11 @@ public final class Config { } + public static List CHATCHANNEL_CHANNELS = List.of("ac"); + private static void chatChannels() { + CHATCHANNEL_CHANNELS = getList("chat-channels", CHATCHANNEL_CHANNELS); + } + public static String SERVERMUTEPERMISSION = "command.mute-server"; public static String SPYPERMISSION = "chat.socialspy"; private static void permissions() { diff --git a/galaxy/src/main/java/com/alttd/chat/ChatPlugin.java b/galaxy/src/main/java/com/alttd/chat/ChatPlugin.java index f96dd5f..1f2b797 100755 --- a/galaxy/src/main/java/com/alttd/chat/ChatPlugin.java +++ b/galaxy/src/main/java/com/alttd/chat/ChatPlugin.java @@ -11,9 +11,13 @@ import com.alttd.chat.listeners.PluginMessage; import com.alttd.chat.util.ALogger; import org.bukkit.Bukkit; import org.bukkit.command.CommandExecutor; +import org.bukkit.command.PluginCommand; import org.bukkit.event.Listener; import org.bukkit.plugin.java.JavaPlugin; +import java.util.Collections; +import java.util.List; + public class ChatPlugin extends JavaPlugin { private static ChatPlugin instance; @@ -43,6 +47,7 @@ public class ChatPlugin extends JavaPlugin { registerCommand("unignore", new Unignore()); registerCommand("muteserver", new MuteServer()); registerCommand("spy", new Spy()); + registerCommand("chatchannel", new ChatChannel(), Config.CHATCHANNEL_CHANNELS); messageChannel = Config.MESSAGECHANNEL; getServer().getMessenger().registerOutgoingPluginChannel(this, messageChannel); @@ -60,8 +65,14 @@ public class ChatPlugin extends JavaPlugin { } } - public void registerCommand(String commandName, CommandExecutor CommandExecutor) { - getCommand(commandName).setExecutor(CommandExecutor); + public void registerCommand(String commandName, CommandExecutor commandExecutor) { + getCommand(commandName).setExecutor(commandExecutor); + } + + public void registerCommand(String commandName, CommandExecutor commandExecutor, List aliases) { + PluginCommand command = getCommand(commandName); + command.setAliases(aliases); + command.setExecutor(commandExecutor); } public static ChatPlugin getInstance() { diff --git a/galaxy/src/main/java/com/alttd/chat/commands/ChatChannel.java b/galaxy/src/main/java/com/alttd/chat/commands/ChatChannel.java new file mode 100644 index 0000000..2596ede --- /dev/null +++ b/galaxy/src/main/java/com/alttd/chat/commands/ChatChannel.java @@ -0,0 +1,31 @@ +package com.alttd.chat.commands; + +import com.alttd.chat.ChatPlugin; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.apache.commons.lang.StringUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +public class ChatChannel implements CommandExecutor { + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if(!(sender instanceof Player player)) { // must be a player + return true; + } + if(args.length == 0) return false; + + String message = StringUtils.join(args, " ", 0, args.length); + + new BukkitRunnable() { + @Override + public void run() { + ChatPlugin.getInstance().getChatHandler().chatChannel(player, label, message); + } + }.runTaskAsynchronously(ChatPlugin.getInstance()); + + return false; + } +} diff --git a/galaxy/src/main/java/com/alttd/chat/handler/ChatHandler.java b/galaxy/src/main/java/com/alttd/chat/handler/ChatHandler.java index 820ddf2..642afe1 100755 --- a/galaxy/src/main/java/com/alttd/chat/handler/ChatHandler.java +++ b/galaxy/src/main/java/com/alttd/chat/handler/ChatHandler.java @@ -15,10 +15,12 @@ import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.Template; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; +import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import org.bukkit.util.StringUtil; import java.util.ArrayList; import java.util.List; @@ -77,18 +79,7 @@ public class ChatHandler { return; } - if (Database.get().isPlayerMuted(player.getUniqueId(), null) || (ChatPlugin.getInstance().serverMuted() && !player.hasPermission("chat.bypass-server-muted"))) { - MiniMessage miniMessage = MiniMessage.get(); - Component blockedNotification = miniMessage.parse("[GC Muted] " - + Utility.getDisplayName(player.getUniqueId(), player.getName()) - + " tried to say: " - + message + ""); - - Bukkit.getOnlinePlayers().forEach(a ->{ - if (a.hasPermission("chat.alert-blocked")) { - a.sendMessage(blockedNotification);//TODO make configurable (along with all the messages) - } - }); + if (isMuted(player, message, "[GC Muted] ")) { return; } @@ -126,6 +117,57 @@ public class ChatHandler { sendPluginMessage(player, "globalchat", component); } + public void chatChannel(Player player, String label, String message) { + if (!player.hasPermission("chat.channel." + label)) { + player.sendMessage(MiniMessage.get().parse("You don't have permission to use this channel.")); + return; + } + + if (isMuted(player, message, "[" + StringUtils.capitalize(label) + " Muted] ")) return; + + ChatUser user = ChatUserManager.getChatUser(player.getUniqueId()); + Component senderName = user.getDisplayName(); + + String updatedMessage = RegexManager.replaceText(player.getName(), player.getUniqueId(), message); + if(updatedMessage == null) { + GalaxyUtility.sendBlockedNotification("GC Language", player, message, ""); + return; // the message was blocked + } + + if(!player.hasPermission("chat.format")) { + updatedMessage = miniMessage.stripTokens(updatedMessage); + } + + if(updatedMessage.contains("[i]")) updatedMessage = updatedMessage.replace("[i]", "<[i]>"); + + List