package de.viper.survivalplus.commands; import de.viper.survivalplus.SurvivalPlus; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import java.util.ArrayList; import java.util.List; public class PluginCommand implements CommandExecutor { private final SurvivalPlus plugin; private static final int COMMANDS_PER_PAGE = 5; public PluginCommand(SurvivalPlus plugin) { this.plugin = plugin; } @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { FileConfiguration lang = plugin.getLangConfig(); if (args.length == 0 || args[0].equalsIgnoreCase("help")) { int page = 1; if (args.length > 1 && args[0].equalsIgnoreCase("help")) { try { page = Integer.parseInt(args[1]); if (page < 1) page = 1; } catch (NumberFormatException e) { sender.sendMessage(color(lang.getString("sp.invalid-subcommand", "§cUngültiger Unterbefehl! Verwendung: /sp [reload|help]"))); return true; } } showHelp(sender, page); return true; } if (args[0].equalsIgnoreCase("reload")) { if (!sender.hasPermission("survivalplus.reload")) { sender.sendMessage(color(lang.getString("no-permission", "&cKeine Berechtigung!"))); return true; } plugin.reloadPlugin(); sender.sendMessage(color(lang.getString("plugin.reloaded", "&aPlugin neu geladen."))); return true; } sender.sendMessage(color(lang.getString("sp.invalid-subcommand", "&cUngültiger Unterbefehl!"))); return true; } private void showHelp(CommandSender sender, int page) { FileConfiguration help = plugin.getHelpConfig(); FileConfiguration lang = plugin.getLangConfig(); if (help == null || help.getConfigurationSection("commands") == null) { sender.sendMessage(color(lang.getString("sp.help-not-found", "&cHilfe nicht gefunden."))); return; } List commands = new ArrayList<>(help.getConfigurationSection("commands").getKeys(false)); if (commands.isEmpty()) { sender.sendMessage(color(lang.getString("sp.help-not-found", "&cKeine Befehle verfügbar."))); return; } int totalPages = (int) Math.ceil((double) commands.size() / COMMANDS_PER_PAGE); if (page > totalPages) page = totalPages; if (page < 1) page = 1; sender.sendMessage(color(help.getString("header", "&7===== &eSurvivalPlus Hilfe &7====="))); int startIndex = (page - 1) * COMMANDS_PER_PAGE; int endIndex = Math.min(startIndex + COMMANDS_PER_PAGE, commands.size()); for (int i = startIndex; i < endIndex; i++) { String cmd = commands.get(i); String usage = help.getString("commands." + cmd + ".usage", ""); String description = help.getString("commands." + cmd + ".description", ""); sender.sendMessage(color(usage + " §7- " + description)); } if (sender instanceof Player player) { TextComponent navigation = new TextComponent(); if (page > 1) { TextComponent prev = new TextComponent(color(help.getString("navigation.prev", "« Vorherige "))); prev.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/sp help " + (page - 1))); navigation.addExtra(prev); } else { navigation.addExtra(color(help.getString("navigation.prev-disabled", "« "))); } TextComponent pageInfo = new TextComponent(color(help.getString("navigation.page", " §fSeite {current} von {total} ")) .replace("{current}", String.valueOf(page)) .replace("{total}", String.valueOf(totalPages))); navigation.addExtra(pageInfo); if (page < totalPages) { TextComponent next = new TextComponent(color(help.getString("navigation.next", " Nächste »"))); next.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/sp help " + (page + 1))); navigation.addExtra(next); } else { navigation.addExtra(color(help.getString("navigation.next-disabled", " »"))); } player.spigot().sendMessage(navigation); } else { for (String cmd : commands) { String usage = help.getString("commands." + cmd + ".usage", ""); String description = help.getString("commands." + cmd + ".description", ""); sender.sendMessage(color(usage + " §7- " + description)); } } sender.sendMessage(color(help.getString("footer", "&7=========================="))); } private String color(String input) { return ChatColor.translateAlternateColorCodes('&', input); } }