From 49b0d3a5d2a778400ec3b16887a32a203d5eafd5 Mon Sep 17 00:00:00 2001 From: Deauthorized <49701242+Deauthorized@users.noreply.github.com> Date: Sat, 27 Apr 2024 22:39:29 -0400 Subject: [PATCH] Implement the restricted chat toggle --- .../plex/listener/impl/TogglesListener.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) 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..33c7e26 100644 --- a/server/src/main/java/dev/plex/listener/impl/TogglesListener.java +++ b/server/src/main/java/dev/plex/listener/impl/TogglesListener.java @@ -1,6 +1,12 @@ package dev.plex.listener.impl; +import dev.plex.Plex; import dev.plex.listener.PlexListener; +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.block.BlockExplodeEvent; import org.bukkit.event.block.BlockFromToEvent; @@ -8,9 +14,13 @@ 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 +68,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.