package net.knarcraft.blacksmith.command.scrapper; import net.knarcraft.blacksmith.config.scrapper.ScrapperSetting; import net.knarcraft.blacksmith.util.TabCompleteValuesHelper; import net.knarcraft.knarlib.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 scrapper editing command */ public class ScrapperEditTabCompleter implements TabCompleter { @Override public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { if (!sender.hasPermission("blacksmith.edit")) { return new ArrayList<>(); } List npcSettings = new ArrayList<>(); for (ScrapperSetting setting : ScrapperSetting.values()) { if (setting.isPerNPC()) { npcSettings.add(setting.getCommandName()); } } if (args.length == 1) { return TabCompletionHelper.filterMatchingContains(npcSettings, args[0]); } else { if (npcSettings.contains(args[0]) && args.length == 2) { return tabCompleteCommandValues(args[0], args[1]); } else { return new ArrayList<>(); } } } /** * 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 @Nullable List tabCompleteCommandValues(@NotNull String commandName, @NotNull String commandValue) { ScrapperSetting setting = ScrapperSetting.getSetting(commandName); if (setting != null) { return TabCompletionHelper.filterMatchingContains(TabCompleteValuesHelper.getTabCompletions( setting.getValueType()), commandValue); } else { return null; } } }