Blocked tabcomplete for some commands!

Fixed message bug!
This commit is contained in:
DaTTV 2025-02-17 19:28:46 +01:00
parent 45aaed9112
commit 8fe081424f
2 changed files with 212 additions and 182 deletions

View file

@ -1,5 +1,6 @@
package me.freezy.plugins.papermc.blazesmp.listener; package me.freezy.plugins.papermc.blazesmp.listener;
import com.destroystokyo.paper.event.server.AsyncTabCompleteEvent;
import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.MiniMessage;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -8,193 +9,219 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import java.util.Arrays; import java.util.Arrays;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.Set;
public class PlayerCommandBlockerListener implements Listener { public class PlayerCommandBlockerListener implements Listener {
private final LinkedHashSet<String> blockedCommands = new LinkedHashSet<>(Arrays.asList( private final Set<String> blockedCommands = new LinkedHashSet<>(Arrays.asList(
"/bukkit:?", "/bukkit:?",
"/?", "/?",
"/bukkit:about", "/bukkit:about",
"/about", "/about",
"/bukkit:help", "/bukkit:help",
"/help", "/help",
"/bukkit:pl", "/bukkit:pl",
"/pl", "/pl",
"/bukkit:plugins", "/bukkit:plugins",
"/plugins", "/plugins",
"/bukkit:reload", "/bukkit:reload",
"/reload", "/reload",
"/bukkit:rl", "/bukkit:rl",
"/rl", "/rl",
"/bukkit:timings", "/bukkit:timings",
"/timings", "/timings",
"/bukkit:ver", "/bukkit:ver",
"/ver", "/ver",
"/bukkit:version", "/bukkit:version",
"/version", "/version",
"/paper:callback", "/paper:callback",
"/callback", "/callback",
"/paper:mspt", "/paper:mspt",
"/mspt", "/mspt",
"/paper:paper", "/paper:paper",
"/paper", "/paper",
"/paper:spark", "/paper:spark",
"/spark", "/spark",
"/minecraft:advancement", "/minecraft:advancement",
"/advancement", "/advancement",
"/minecraft:attribute", "/minecraft:attribute",
"/attribute", "/attribute",
"/minecraft:ban", "/minecraft:ban",
"/ban", "/ban",
"/minecraft:ban-ip", "/minecraft:ban-ip",
"/ban-ip", "/ban-ip",
"/minecraft:banlist", "/minecraft:banlist",
"/banlist", "/banlist",
"/minecraft:bossbar", "/minecraft:bossbar",
"/bossbar", "/bossbar",
"/minecraft:clear", "/minecraft:clear",
"/clear", "/clear",
"/minecraft:clone", "/minecraft:clone",
"/clone", "/clone",
"/minecraft:damage", "/minecraft:damage",
"/damage", "/damage",
"/minecraft:data", "/minecraft:data",
"/data", "/data",
"/minecraft:datapack", "/minecraft:datapack",
"/datapack", "/datapack",
"/minecraft:difficulty", "/minecraft:difficulty",
"/difficulty", "/difficulty",
"/minecraft:effect", "/minecraft:effect",
"/effect", "/effect",
"/minecraft:enchant", "/minecraft:enchant",
"/enchant", "/enchant",
"/minecraft:execute", "/minecraft:execute",
"/execute", "/execute",
"/minecraft:experience", "/minecraft:experience",
"/experience", "/experience",
"/minecraft:fill", "/minecraft:fill",
"/fill", "/fill",
"/minecraft:fillbiome", "/minecraft:fillbiome",
"/fillbiome", "/fillbiome",
"/minecraft:foreload", "/minecraft:foreload",
"/foreload", "/foreload",
"/minecraft:gamerule", "/minecraft:gamerule",
"/gamerule", "/gamerule",
"/minecraft:give", "/minecraft:give",
"/give", "/give",
"/minecraft:help", "/minecraft:help",
"/help", "/help",
"/minecraft:item", "/minecraft:item",
"/item", "/item",
"/minecraft:jfr", "/minecraft:jfr",
"/jfr", "/jfr",
"/minecraft:kick", "/minecraft:kick",
"/kick", "/kick",
"/minecraft:kill", "/minecraft:kill",
"/kill", "/kill",
"/minecraft:list", "/minecraft:list",
"/list", "/list",
"/minecraft:locate", "/minecraft:locate",
"/locate", "/locate",
"/minecraft:loot", "/minecraft:loot",
"/loot", "/loot",
"/minecraft:me", "/minecraft:me",
"/me", "/me",
"/minecraft:op", "/minecraft:op",
"/op", "/op",
"/minecraft:pardon", "/minecraft:pardon",
"/pardon", "/pardon",
"/minecraft:pardon-ip", "/minecraft:pardon-ip",
"/pardon-ip", "/pardon-ip",
"/minecraft:particle", "/minecraft:particle",
"/particle", "/particle",
"/minecraft:perf", "/minecraft:perf",
"/perf", "/perf",
"/minecraft:place", "/minecraft:place",
"/place", "/place",
"/minecraft:playsound", "/minecraft:playsound",
"/playsound", "/playsound",
"/minecraft:random", "/minecraft:random",
"/random", "/random",
"/minecraft:recipe", "/minecraft:recipe",
"/recipe", "/recipe",
"/minecraft:reload", "/minecraft:reload",
"/reload", "/reload",
"/minecraft:ride", "/minecraft:ride",
"/ride", "/ride",
"/minecraft:rotate", "/minecraft:rotate",
"/rotate", "/rotate",
"/minecraft:save-all", "/minecraft:save-all",
"/save-all", "/save-all",
"/minecraft:save-off", "/minecraft:save-off",
"/save-off", "/save-off",
"/minecraft:save-on", "/minecraft:save-on",
"/save-on", "/save-on",
"/minecraft:say", "/minecraft:say",
"/say", "/say",
"/minecraft:schedule", "/minecraft:schedule",
"/schedule", "/schedule",
"/minecraft:scoreboard", "/minecraft:scoreboard",
"/scoreboard", "/scoreboard",
"/minecraft:seed", "/minecraft:seed",
"/seed", "/seed",
"/minecraft:setblock", "/minecraft:setblock",
"/setblock", "/setblock",
"/minecraft:setidletimeout", "/minecraft:setidletimeout",
"/setidletimeout", "/setidletimeout",
"/minecraft:setworldspawn", "/minecraft:setworldspawn",
"/setworldspawn", "/setworldspawn",
"/minecraft:spawnpoint", "/minecraft:spawnpoint",
"/spawnpoint", "/spawnpoint",
"/minecraft:spectate", "/minecraft:spectate",
"/spectate", "/spectate",
"/minecraft:tag", "/minecraft:tag",
"/tag", "/tag",
"/minecraft:team", "/minecraft:team",
"/team", "/team",
"/minecraft:teammsg", "/minecraft:teammsg",
"/teammsg", "/teammsg",
"/minecraft:teleport", "/minecraft:teleport",
"/teleport", "/teleport",
"/minecraft:tellraw", "/minecraft:tellraw",
"/tellraw", "/tellraw",
"/minecraft:tick", "/minecraft:tick",
"/tick", "/tick",
"/minecraft:time", "/minecraft:time",
"/time", "/time",
"/minecraft:title", "/minecraft:title",
"/title", "/title",
"/minecraft:tm", "/minecraft:tm",
"/tm", "/tm",
"/minecraft:tp", "/minecraft:tp",
"/tp", "/tp",
"/minecraft:transfer", "/minecraft:transfer",
"/transfer", "/transfer",
"/minecraft:trigger", "/minecraft:trigger",
"/trigger", "/trigger",
"/minecraft:weather", "/minecraft:weather",
"/weather", "/weather",
"/minecraft:whitelist", "/minecraft:whitelist",
"/whitelist", "/whitelist",
"/minecraft:worldborder", "/minecraft:worldborder",
"/worldborder", "/worldborder",
"/minecraft:xp", "/minecraft:xp",
"/xp", "/xp",
"/icanhasbukkit" "/icanhasbukkit"
)); ));
@EventHandler
public void onPlayerCommandPreproccess(PlayerCommandPreprocessEvent event) {
Player player = event.getPlayer();
String message = event.getMessage();
if (!player.isOp()) { private boolean isBlocked(String input) {
for (String blockedCommand : blockedCommands) { String normalized = input.toLowerCase().trim();
if (message.matches(blockedCommand)) { for (String blocked : blockedCommands) {
event.setCancelled(true); blocked = blocked.toLowerCase().trim();
player.sendMessage(MiniMessage.miniMessage().deserialize("<red>Unkown or incomplete command, see below for error\n<u>%s</u><i><--[HERE]</i>".formatted(blockedCommand))); if (normalized.equals(blocked) || normalized.startsWith(blocked + " ")) {
return; 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(
"<red>Unknown or incomplete command, see below for error\n<u>" + blockedPart + "</u><i> <--[HERE]</i>"
));
}
}
@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);
}
} }
} }

View file

@ -1,6 +1,7 @@
package me.freezy.plugins.papermc.blazesmp.listener; package me.freezy.plugins.papermc.blazesmp.listener;
import me.freezy.plugins.papermc.blazesmp.manager.PlayerManager; import me.freezy.plugins.papermc.blazesmp.manager.PlayerManager;
import net.kyori.adventure.text.minimessage.MiniMessage;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -11,5 +12,7 @@ public class PlayerJoinListener implements Listener {
public void onJoin(PlayerJoinEvent event) { public void onJoin(PlayerJoinEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
new PlayerManager().setPlayerTeam(player); new PlayerManager().setPlayerTeam(player);
event.joinMessage(MiniMessage.miniMessage().deserialize("<gray>[<green>+</green>]</gray> <reset>").append(player.teamDisplayName()));
} }
} }