package com.taxes.commands; import com.taxes.TaxesPlugin; import com.taxes.tax.Tax; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; import org.bukkit.entity.Player; import org.bukkit.util.StringUtil; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class TaxesTabCompleter implements TabCompleter { private final TaxesPlugin plugin; public TaxesTabCompleter(TaxesPlugin plugin) { this.plugin = plugin; } @Override public List onTabComplete(CommandSender sender, Command command, String alias, String[] args) { List completions = new ArrayList<>(); if (args.length == 1) { String cmdName = command.getName().toLowerCase(); if (cmdName.equals("taxes-collect") || cmdName.equals("tax-collect")) { return getAvailableTaxes(sender, args[0], false); } else if (cmdName.equals("taxes-info") || cmdName.equals("tax-info")) { return getAvailableTaxes(sender, args[0], false); } else if (cmdName.equals("taxes-infoall") || cmdName.equals("tax-infoall")) { return getAvailableTaxes(sender, args[0], true); } else if (cmdName.equals("taxes-list") || cmdName.equals("tax-list")) { return Collections.emptyList(); } else if (cmdName.equals("taxes-listall") || cmdName.equals("tax-listall")) { return Collections.emptyList(); } else if (cmdName.equals("taxes-collectall") || cmdName.equals("tax-collectall")) { return Collections.emptyList(); } else if (cmdName.equals("taxes-reload") || cmdName.equals("tax-reload")) { return Collections.emptyList(); } else if (cmdName.equals("taxes") || cmdName.equals("tax")) { return Collections.emptyList(); } } return completions; } /** * Gibt alle verfügbaren Steuern für Tab-Completion zurück * @param sender Der Command-Sender (Player oder Console) * @param input Das aktuelle Input-String für Partial Matching * @param showAll Alle Steuern zeigen (true) oder nur aktivierte (false) * @return Liste der Steuernamen zum Completen */ private List getAvailableTaxes(CommandSender sender, String input, boolean showAll) { List completions = new ArrayList<>(); for (Tax tax : this.plugin.getTaxConfigData().getTaxes()) { // Wenn showAll=false, nur aktivierte Steuern zeigen if (!showAll && !tax.getTaxData().isEnabled()) { continue; } String taxName = tax.getTaxData().getName().getConfigTag(); // StringUtil.copyPartialMatches für Partial String Matching if (StringUtil.startsWithIgnoreCase(taxName, input)) { completions.add(taxName); } } // Alphabetisch sortieren für bessere UX Collections.sort(completions); return completions; } }