From 8fe081424f2a2c38ee620c67f6a119d450fccfb8 Mon Sep 17 00:00:00 2001 From: DaTTV <104141141+DrFreezyYT@users.noreply.github.com> Date: Mon, 17 Feb 2025 19:28:46 +0100 Subject: [PATCH] Blocked tabcomplete for some commands! Fixed message bug! --- .../PlayerCommandBlockerListener.java | 391 ++++++++++-------- .../blazesmp/listener/PlayerJoinListener.java | 3 + 2 files changed, 212 insertions(+), 182 deletions(-) diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerCommandBlockerListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerCommandBlockerListener.java index f77cf92..878e469 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerCommandBlockerListener.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerCommandBlockerListener.java @@ -1,5 +1,6 @@ package me.freezy.plugins.papermc.blazesmp.listener; +import com.destroystokyo.paper.event.server.AsyncTabCompleteEvent; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -8,193 +9,219 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent; import java.util.Arrays; import java.util.LinkedHashSet; -import java.util.List; +import java.util.Set; public class PlayerCommandBlockerListener implements Listener { - private final LinkedHashSet blockedCommands = new LinkedHashSet<>(Arrays.asList( - "/bukkit:?", - "/?", - "/bukkit:about", - "/about", - "/bukkit:help", - "/help", - "/bukkit:pl", - "/pl", - "/bukkit:plugins", - "/plugins", - "/bukkit:reload", - "/reload", - "/bukkit:rl", - "/rl", - "/bukkit:timings", - "/timings", - "/bukkit:ver", - "/ver", - "/bukkit:version", - "/version", - "/paper:callback", - "/callback", - "/paper:mspt", - "/mspt", - "/paper:paper", - "/paper", - "/paper:spark", - "/spark", - "/minecraft:advancement", - "/advancement", - "/minecraft:attribute", - "/attribute", - "/minecraft:ban", - "/ban", - "/minecraft:ban-ip", - "/ban-ip", - "/minecraft:banlist", - "/banlist", - "/minecraft:bossbar", - "/bossbar", - "/minecraft:clear", - "/clear", - "/minecraft:clone", - "/clone", - "/minecraft:damage", - "/damage", - "/minecraft:data", - "/data", - "/minecraft:datapack", - "/datapack", - "/minecraft:difficulty", - "/difficulty", - "/minecraft:effect", - "/effect", - "/minecraft:enchant", - "/enchant", - "/minecraft:execute", - "/execute", - "/minecraft:experience", - "/experience", - "/minecraft:fill", - "/fill", - "/minecraft:fillbiome", - "/fillbiome", - "/minecraft:foreload", - "/foreload", - "/minecraft:gamerule", - "/gamerule", - "/minecraft:give", - "/give", - "/minecraft:help", - "/help", - "/minecraft:item", - "/item", - "/minecraft:jfr", - "/jfr", - "/minecraft:kick", - "/kick", - "/minecraft:kill", - "/kill", - "/minecraft:list", - "/list", - "/minecraft:locate", - "/locate", - "/minecraft:loot", - "/loot", - "/minecraft:me", - "/me", - "/minecraft:op", - "/op", - "/minecraft:pardon", - "/pardon", - "/minecraft:pardon-ip", - "/pardon-ip", - "/minecraft:particle", - "/particle", - "/minecraft:perf", - "/perf", - "/minecraft:place", - "/place", - "/minecraft:playsound", - "/playsound", - "/minecraft:random", - "/random", - "/minecraft:recipe", - "/recipe", - "/minecraft:reload", - "/reload", - "/minecraft:ride", - "/ride", - "/minecraft:rotate", - "/rotate", - "/minecraft:save-all", - "/save-all", - "/minecraft:save-off", - "/save-off", - "/minecraft:save-on", - "/save-on", - "/minecraft:say", - "/say", - "/minecraft:schedule", - "/schedule", - "/minecraft:scoreboard", - "/scoreboard", - "/minecraft:seed", - "/seed", - "/minecraft:setblock", - "/setblock", - "/minecraft:setidletimeout", - "/setidletimeout", - "/minecraft:setworldspawn", - "/setworldspawn", - "/minecraft:spawnpoint", - "/spawnpoint", - "/minecraft:spectate", - "/spectate", - "/minecraft:tag", - "/tag", - "/minecraft:team", - "/team", - "/minecraft:teammsg", - "/teammsg", - "/minecraft:teleport", - "/teleport", - "/minecraft:tellraw", - "/tellraw", - "/minecraft:tick", - "/tick", - "/minecraft:time", - "/time", - "/minecraft:title", - "/title", - "/minecraft:tm", - "/tm", - "/minecraft:tp", - "/tp", - "/minecraft:transfer", - "/transfer", - "/minecraft:trigger", - "/trigger", - "/minecraft:weather", - "/weather", - "/minecraft:whitelist", - "/whitelist", - "/minecraft:worldborder", - "/worldborder", - "/minecraft:xp", - "/xp", - "/icanhasbukkit" + private final Set blockedCommands = new LinkedHashSet<>(Arrays.asList( + "/bukkit:?", + "/?", + "/bukkit:about", + "/about", + "/bukkit:help", + "/help", + "/bukkit:pl", + "/pl", + "/bukkit:plugins", + "/plugins", + "/bukkit:reload", + "/reload", + "/bukkit:rl", + "/rl", + "/bukkit:timings", + "/timings", + "/bukkit:ver", + "/ver", + "/bukkit:version", + "/version", + "/paper:callback", + "/callback", + "/paper:mspt", + "/mspt", + "/paper:paper", + "/paper", + "/paper:spark", + "/spark", + "/minecraft:advancement", + "/advancement", + "/minecraft:attribute", + "/attribute", + "/minecraft:ban", + "/ban", + "/minecraft:ban-ip", + "/ban-ip", + "/minecraft:banlist", + "/banlist", + "/minecraft:bossbar", + "/bossbar", + "/minecraft:clear", + "/clear", + "/minecraft:clone", + "/clone", + "/minecraft:damage", + "/damage", + "/minecraft:data", + "/data", + "/minecraft:datapack", + "/datapack", + "/minecraft:difficulty", + "/difficulty", + "/minecraft:effect", + "/effect", + "/minecraft:enchant", + "/enchant", + "/minecraft:execute", + "/execute", + "/minecraft:experience", + "/experience", + "/minecraft:fill", + "/fill", + "/minecraft:fillbiome", + "/fillbiome", + "/minecraft:foreload", + "/foreload", + "/minecraft:gamerule", + "/gamerule", + "/minecraft:give", + "/give", + "/minecraft:help", + "/help", + "/minecraft:item", + "/item", + "/minecraft:jfr", + "/jfr", + "/minecraft:kick", + "/kick", + "/minecraft:kill", + "/kill", + "/minecraft:list", + "/list", + "/minecraft:locate", + "/locate", + "/minecraft:loot", + "/loot", + "/minecraft:me", + "/me", + "/minecraft:op", + "/op", + "/minecraft:pardon", + "/pardon", + "/minecraft:pardon-ip", + "/pardon-ip", + "/minecraft:particle", + "/particle", + "/minecraft:perf", + "/perf", + "/minecraft:place", + "/place", + "/minecraft:playsound", + "/playsound", + "/minecraft:random", + "/random", + "/minecraft:recipe", + "/recipe", + "/minecraft:reload", + "/reload", + "/minecraft:ride", + "/ride", + "/minecraft:rotate", + "/rotate", + "/minecraft:save-all", + "/save-all", + "/minecraft:save-off", + "/save-off", + "/minecraft:save-on", + "/save-on", + "/minecraft:say", + "/say", + "/minecraft:schedule", + "/schedule", + "/minecraft:scoreboard", + "/scoreboard", + "/minecraft:seed", + "/seed", + "/minecraft:setblock", + "/setblock", + "/minecraft:setidletimeout", + "/setidletimeout", + "/minecraft:setworldspawn", + "/setworldspawn", + "/minecraft:spawnpoint", + "/spawnpoint", + "/minecraft:spectate", + "/spectate", + "/minecraft:tag", + "/tag", + "/minecraft:team", + "/team", + "/minecraft:teammsg", + "/teammsg", + "/minecraft:teleport", + "/teleport", + "/minecraft:tellraw", + "/tellraw", + "/minecraft:tick", + "/tick", + "/minecraft:time", + "/time", + "/minecraft:title", + "/title", + "/minecraft:tm", + "/tm", + "/minecraft:tp", + "/tp", + "/minecraft:transfer", + "/transfer", + "/minecraft:trigger", + "/trigger", + "/minecraft:weather", + "/weather", + "/minecraft:whitelist", + "/whitelist", + "/minecraft:worldborder", + "/worldborder", + "/minecraft:xp", + "/xp", + "/icanhasbukkit" )); - @EventHandler - public void onPlayerCommandPreproccess(PlayerCommandPreprocessEvent event) { - Player player = event.getPlayer(); - String message = event.getMessage(); - if (!player.isOp()) { - for (String blockedCommand : blockedCommands) { - if (message.matches(blockedCommand)) { - event.setCancelled(true); - player.sendMessage(MiniMessage.miniMessage().deserialize("Unkown or incomplete command, see below for error\n%s<--[HERE]".formatted(blockedCommand))); - return; - } + private boolean isBlocked(String input) { + String normalized = input.toLowerCase().trim(); + for (String blocked : blockedCommands) { + blocked = blocked.toLowerCase().trim(); + if (normalized.equals(blocked) || normalized.startsWith(blocked + " ")) { + return true; } } + return false; + } + + @EventHandler + public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { + Player player = event.getPlayer(); + if (player.isOp()) return; // OPs werden nicht blockiert + + String message = event.getMessage(); + if (isBlocked(message)) { + event.setCancelled(true); + // Zeige den blockierten Befehl als Hinweis (hier der erste Teil der Nachricht) + String blockedPart = message.split(" ")[0]; + player.sendMessage(MiniMessage.miniMessage().deserialize( + "Unknown or incomplete command, see below for error\n" + blockedPart + " <--[HERE]" + )); + } + } + + @EventHandler + public void onTabComplete(AsyncTabCompleteEvent event) { + Player player = (Player) event.getSender(); + if (player.isOp()) return; // OPs erhalten weiterhin Tab-Vorschläge + + String buffer = event.getBuffer(); + if (isBlocked(buffer)) { + // Alle Tab-Vorschläge entfernen und das Event abbrechen, + // wenn der eingegebene Befehl blockiert ist. + event.getCompletions().clear(); + event.setCancelled(true); + } } } diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerJoinListener.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerJoinListener.java index ba2ab6a..9bc133f 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerJoinListener.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/listener/PlayerJoinListener.java @@ -1,6 +1,7 @@ package me.freezy.plugins.papermc.blazesmp.listener; import me.freezy.plugins.papermc.blazesmp.manager.PlayerManager; +import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -11,5 +12,7 @@ public class PlayerJoinListener implements Listener { public void onJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); new PlayerManager().setPlayerTeam(player); + + event.joinMessage(MiniMessage.miniMessage().deserialize("[+] ").append(player.teamDisplayName())); } }