package de.viper.survivalplus.Manager; import de.viper.survivalplus.SurvivalPlus; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import java.io.File; import java.util.ArrayList; import java.util.List; public class CommandBlocker implements Listener, CommandExecutor { private final SurvivalPlus plugin; private FileConfiguration blockedCommandsConfig; private File blockedCommandsFile; private List blockedCommands; public CommandBlocker(SurvivalPlus plugin) { this.plugin = plugin; // Lade blockedcommands.yml try { blockedCommandsFile = new File(plugin.getDataFolder(), "blockedcommands.yml"); if (!blockedCommandsFile.exists()) { plugin.saveResource("blockedcommands.yml", false); } blockedCommandsConfig = YamlConfiguration.loadConfiguration(blockedCommandsFile); blockedCommands = blockedCommandsConfig.getStringList("blocked-commands"); if (blockedCommands == null) { blockedCommands = new ArrayList<>(); } } catch (Exception ignored) { blockedCommands = new ArrayList<>(); } // Registriere Listener und Command plugin.getServer().getPluginManager().registerEvents(this, plugin); plugin.getCommand("sp").setExecutor(this); } /** * Verarbeitet /sp cb Befehle */ @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if (args.length < 2 || !args[0].equalsIgnoreCase("cb")) { return false; // Wird von anderen /sp Subcommands behandelt } String subCommand = args[1].toLowerCase(); switch (subCommand) { case "add": return handleAddCommand(sender, args); case "remove": return handleRemoveCommand(sender, args); case "list": return handleListCommand(sender); default: sender.sendMessage("§cUnbekannter Subcommand! Verfügbare Subcommands: add, remove, list"); return true; } } /** * /sp cb add */ private boolean handleAddCommand(CommandSender sender, String[] args) { if (!sender.hasPermission("survivalplus.commandblocker.add")) { sender.sendMessage("§cDu hast keine Berechtigung für diesen Befehl!"); return true; } if (args.length < 3) { sender.sendMessage("§eBenutzung: /sp cb add "); return true; } String commandToBlock = args[2].toLowerCase().replaceFirst("^/", "").trim(); if (commandToBlock.isEmpty()) { sender.sendMessage("§cBitte gib einen gültigen Befehl an!"); return true; } try { if (blockedCommands.contains(commandToBlock)) { sender.sendMessage("§cDer Befehl §e/" + commandToBlock + "§c ist bereits blockiert!"); return true; } blockedCommands.add(commandToBlock); blockedCommandsConfig.set("blocked-commands", blockedCommands); blockedCommandsConfig.save(blockedCommandsFile); sender.sendMessage("§aDer Befehl §e/" + commandToBlock + "§a wurde zur Blockierliste hinzugefügt."); } catch (Exception ignored) { sender.sendMessage("§cFehler beim Hinzufügen des Befehls!"); } return true; } /** * /sp cb remove */ private boolean handleRemoveCommand(CommandSender sender, String[] args) { if (!sender.hasPermission("survivalplus.commandblocker.remove")) { sender.sendMessage("§cDu hast keine Berechtigung für diesen Befehl!"); return true; } if (args.length < 3) { sender.sendMessage("§eBenutzung: /sp cb remove "); return true; } String commandToUnblock = args[2].toLowerCase().replaceFirst("^/", "").trim(); if (commandToUnblock.isEmpty()) { sender.sendMessage("§cBitte gib einen gültigen Befehl an!"); return true; } try { if (!blockedCommands.contains(commandToUnblock)) { sender.sendMessage("§cDer Befehl §e/" + commandToUnblock + "§c ist nicht blockiert!"); return true; } blockedCommands.remove(commandToUnblock); blockedCommandsConfig.set("blocked-commands", blockedCommands); blockedCommandsConfig.save(blockedCommandsFile); sender.sendMessage("§aDer Befehl §e/" + commandToUnblock + "§a wurde aus der Blockierliste entfernt."); } catch (Exception ignored) { sender.sendMessage("§cFehler beim Entfernen des Befehls!"); } return true; } /** * /sp cb list */ private boolean handleListCommand(CommandSender sender) { if (!sender.hasPermission("survivalplus.commandblocker.list")) { sender.sendMessage("§cDu hast keine Berechtigung für diesen Befehl!"); return true; } try { if (blockedCommands.isEmpty()) { sender.sendMessage("§eEs sind keine Befehle blockiert."); return true; } sender.sendMessage("§6=== Blockierte Befehle ==="); for (String cmd : blockedCommands) { sender.sendMessage("§e- /" + cmd); } sender.sendMessage("§6====================="); } catch (Exception ignored) { sender.sendMessage("§cFehler beim Abrufen der Blockierliste!"); } return true; } /** * Blockiere Befehle, wenn sie in der Liste sind */ @EventHandler public void onPlayerCommand(PlayerCommandPreprocessEvent event) { Player player = event.getPlayer(); if (player.hasPermission("survivalplus.commandblocker.bypass")) { return; // Spieler mit Bypass-Berechtigung ignorieren } try { String command = event.getMessage().toLowerCase().replaceFirst("^/", "").trim(); // Extrahiere den Hauptbefehl (ohne Argumente) String mainCommand = command.split("\\s+")[0]; if (blockedCommands.contains(mainCommand)) { event.setCancelled(true); player.sendMessage("§cDieser Befehl ist blockiert!"); } } catch (Exception ignored) { // Keine Konsolenausgabe } } }