diff --git a/server/src/main/java/dev/plex/listener/impl/MuteListener.java b/server/src/main/java/dev/plex/listener/impl/MuteListener.java index 8b2f523..89222d5 100644 --- a/server/src/main/java/dev/plex/listener/impl/MuteListener.java +++ b/server/src/main/java/dev/plex/listener/impl/MuteListener.java @@ -1,22 +1,65 @@ package dev.plex.listener.impl; -import dev.plex.cache.DataUtils; import dev.plex.listener.PlexListener; +import dev.plex.util.PlexLog; import dev.plex.util.PlexUtils; import io.papermc.paper.event.player.AsyncChatEvent; +import java.util.List; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; public class MuteListener extends PlexListener { + List commands = plugin.commands.getStringList("block_on_mute"); @EventHandler(priority = EventPriority.HIGHEST) public void onChat(AsyncChatEvent event) { - if (DataUtils.getPlayer(event.getPlayer().getUniqueId()).isMuted()) + if (plugin.getPlayerCache().getPlexPlayer(event.getPlayer().getUniqueId()).isMuted()) { event.getPlayer().sendMessage(PlexUtils.messageComponent("muted")); event.setCancelled(true); } } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onCommand(PlayerCommandPreprocessEvent event) + { + if (plugin.getPlayerCache().getPlexPlayer(event.getPlayer().getUniqueId()).isMuted()) + { + String message = event.getMessage(); + // Don't check the arguments + message = message.replaceAll("\\s.*", "").replaceFirst("/", ""); + PlexLog.debug("message: " + message); + + // Check regular command + if (commands.contains(message.toLowerCase())) + { + PlexLog.debug("Matches command"); + event.getPlayer().sendMessage(PlexUtils.messageComponent("muted")); + event.setCancelled(true); + return; + } + + for (String command : commands) + { + Command cmd = Bukkit.getCommandMap().getCommand(command); + if (cmd == null) + { + PlexLog.debug("Null command"); + return; + } + if (cmd.getAliases().contains(message.toLowerCase())) + { + PlexLog.debug("Matches alias"); + event.getPlayer().sendMessage(PlexUtils.messageComponent("muted")); + event.setCancelled(true); + return; + } + } + } + } } diff --git a/server/src/main/resources/commands.yml b/server/src/main/resources/commands.yml index 39ea31b..65908e6 100644 --- a/server/src/main/resources/commands.yml +++ b/server/src/main/resources/commands.yml @@ -52,4 +52,12 @@ commands: - "m:e:weather:_" - "m:e:worldborder:The worldborder does not need to be changed. This command is disabled." - "r:a:^(co|core|coreprotect) (rb|rollback|l|lookup|rl|reload):_" - - "r:e:^[A-z]*:[A-z]*::Plugin specific commands are disabled." \ No newline at end of file + - "r:e:^[A-z]*:[A-z]*::Plugin specific commands are disabled." + +# These commands will be blocked when a player is muted +block_on_mute: + - me + - say + - msg + - reply + - mail \ No newline at end of file