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;
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<String> 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<String> 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("<red>Unkown or incomplete command, see below for error\n<u>%s</u><i><--[HERE]</i>".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(
"<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;
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("<gray>[<green>+</green>]</gray> <reset>").append(player.teamDisplayName()));
}
}