package me.lethunderhawk.bazaarflux.util.command; import org.bukkit.command.CommandSender; import java.util.*; import java.util.function.BiConsumer; import java.util.function.BiFunction; public class CommandNode { private final String name; private final String description; private BiConsumer executor; private BiFunction> tabCompleter; private Map subCommands = new HashMap<>(); private CommandNode parent; public CommandNode(String name, String description, BiConsumer executor) { this.name = name; this.description = description; this.executor = executor; } public CommandNode registerSubCommand(String name, String description, BiConsumer executor) { CommandNode subCommand = new CommandNode(name, description, executor); subCommand.parent = this; subCommands.put(name.toLowerCase(), subCommand); return subCommand; } public void addSubCommand(CommandNode subCommand) { subCommand.parent = this; subCommands.put(subCommand.getName().toLowerCase(), subCommand); } public void addSubCommands(CommandNode... subCommandNodes) { for(CommandNode subCommand : subCommandNodes) { subCommand.parent = this; subCommands.put(subCommand.getName().toLowerCase(), subCommand); } } public CommandNode getSubCommand(String name) { return subCommands.get(name.toLowerCase()); } public boolean hasSubCommand(String name) { return subCommands.containsKey(name.toLowerCase()); } public Collection getSubCommands() { return subCommands.values(); } public List getSubCommandNames() { return new ArrayList<>(subCommands.keySet()); } public void setTabCompleter(BiFunction> tabCompleter) { this.tabCompleter = tabCompleter; } // Getters public String getName() { return name; } public String getDescription() { return description; } public BiConsumer getExecutor() { return executor; } public BiFunction> getTabCompleter() { return tabCompleter; } public CommandNode getParent() { return parent; } public void setExecutor(BiConsumer executor) { this.executor = executor; } }