package net.knarcraft.blacksmith.command; import net.knarcraft.blacksmith.config.GlobalSetting; import net.knarcraft.blacksmith.config.NPCSetting; import net.knarcraft.blacksmith.util.TabCompleteValuesHelper; import net.knarcraft.blacksmith.util.TabCompletionHelper; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; /** * The tab completer for the command used for changing global configuration options */ public class BlackSmithConfigTabCompleter implements TabCompleter { @Nullable @Override public List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { if (args.length == 1) { if (!sender.hasPermission("blacksmith.admin")) { return new ArrayList<>(); } List availableCommands = new ArrayList<>(); availableCommands.add("reload"); for (NPCSetting setting : NPCSetting.values()) { availableCommands.add(setting.getCommandName()); } for (GlobalSetting globalSetting : GlobalSetting.values()) { availableCommands.add(globalSetting.getCommandName()); } return TabCompletionHelper.filterMatchingContains(availableCommands, args[0]); } else if (args.length == 2) { return tabCompleteCommandValues(args[0], args[1]); } return null; } /** * Tab completes the values available for the given command * * @param commandName

The name of the used command

* @param commandValue

The command value used to filter tab-completions

* @return

Some valid options for the command's argument

*/ private List tabCompleteCommandValues(String commandName, String commandValue) { if (commandName.equalsIgnoreCase("reload")) { return new ArrayList<>(); } for (GlobalSetting globalSetting : GlobalSetting.values()) { if (globalSetting.getCommandName().equalsIgnoreCase(commandName)) { return TabCompletionHelper.filterMatchingContains(TabCompleteValuesHelper.getTabCompletions( globalSetting.getValueType()), commandValue); } } for (NPCSetting npcSetting : NPCSetting.values()) { if (npcSetting.getCommandName().equalsIgnoreCase(commandName)) { return TabCompletionHelper.filterMatchingContains(TabCompleteValuesHelper.getTabCompletions( npcSetting.getValueType()), commandValue); } } return null; } }