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,10 +9,10 @@ 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",
@ -182,19 +183,45 @@ public class PlayerCommandBlockerListener implements Listener {
"/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) {
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); 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;
}
}
} }
} }
} }

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()));
} }
} }