diff --git a/server/src/main/java/dev/plex/listener/impl/TogglesListener.java b/server/src/main/java/dev/plex/listener/impl/TogglesListener.java index 4cd7565..98ced2a 100644 --- a/server/src/main/java/dev/plex/listener/impl/TogglesListener.java +++ b/server/src/main/java/dev/plex/listener/impl/TogglesListener.java @@ -1,16 +1,28 @@ package dev.plex.listener.impl; +import dev.plex.Plex; import dev.plex.listener.PlexListener; +import dev.plex.util.PlexLog; +import dev.plex.util.PlexUtils; +import io.papermc.paper.event.player.AsyncChatEvent; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.block.BlockExplodeEvent; import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.block.BlockRedstoneEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.ExplosionPrimeEvent; import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; + +import java.util.List; public class TogglesListener extends PlexListener { + List commands = plugin.commands.getStringList("block_on_modmode"); @EventHandler public void onExplosionPrime(ExplosionPrimeEvent event) { @@ -58,6 +70,48 @@ public class TogglesListener extends PlexListener } } + @EventHandler + public void onChat(AsyncChatEvent event) + { + Player player = event.getPlayer(); + if (plugin.toggles.getBoolean("moderated") && !Plex.get().getPermissions().has(player, "plex.togglechat.bypass")) + { + event.getPlayer().sendMessage(PlexUtils.messageComponent("chatisdisabled")); + event.setCancelled(true); + } + } + + @EventHandler + public void onCommand(PlayerCommandPreprocessEvent event) + { + Player player = event.getPlayer(); + if (plugin.toggles.getBoolean("moderated") && !Plex.get().getPermissions().has(player, "plex.togglechat.bypass")) + { + String message = event.getMessage(); + message = message.replaceAll("\\s.*", "").replaceFirst("/", ""); + if (commands.contains(message.toLowerCase())) + { + event.getPlayer().sendMessage(PlexUtils.messageComponent("chatisdisabled")); + event.setCancelled(true); + return; + } + + for (String command : commands) + { + Command cmd = Bukkit.getCommandMap().getCommand(command); + if (cmd == null) { + return; + } + if (cmd.getAliases().contains(message.toLowerCase())) { + event.getPlayer().sendMessage(PlexUtils.messageComponent("chatisdisabled")); + event.setCancelled(true); + return; + } + } + } + + } + /* I have no idea if this is the best way to do this There is a very weird bug where if you try to create a loop using two repeaters and a lever, after disabling and re-enabling redstone, you are unable to recreate the loop with a lever. Using a redstone torch works fine.