Files
Survival-Plus/src/main/java/de/viper/survivalplus/commands/PluginCommand.java

128 lines
5.3 KiB
Java

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