CommandNode.java 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package me.lethunderhawk.bazaarflux.util.command;
  2. import org.bukkit.command.CommandSender;
  3. import java.util.*;
  4. import java.util.function.BiConsumer;
  5. import java.util.function.BiFunction;
  6. public class CommandNode {
  7. private final String name;
  8. private final String description;
  9. private BiConsumer<CommandSender, String[]> executor;
  10. private BiFunction<CommandSender, String[], List<String>> tabCompleter;
  11. private Map<String, CommandNode> subCommands = new HashMap<>();
  12. private CommandNode parent;
  13. public CommandNode(String name, String description, BiConsumer<CommandSender, String[]> executor) {
  14. this.name = name;
  15. this.description = description;
  16. this.executor = executor;
  17. }
  18. public CommandNode registerSubCommand(String name, String description, BiConsumer<CommandSender, String[]> executor) {
  19. CommandNode subCommand = new CommandNode(name, description, executor);
  20. subCommand.parent = this;
  21. subCommands.put(name.toLowerCase(), subCommand);
  22. return subCommand;
  23. }
  24. public void addSubCommand(CommandNode subCommand) {
  25. subCommand.parent = this;
  26. subCommands.put(subCommand.getName().toLowerCase(), subCommand);
  27. }
  28. public void addSubCommands(CommandNode... subCommandNodes) {
  29. for(CommandNode subCommand : subCommandNodes) {
  30. subCommand.parent = this;
  31. subCommands.put(subCommand.getName().toLowerCase(), subCommand);
  32. }
  33. }
  34. public CommandNode getSubCommand(String name) {
  35. return subCommands.get(name.toLowerCase());
  36. }
  37. public boolean hasSubCommand(String name) {
  38. return subCommands.containsKey(name.toLowerCase());
  39. }
  40. public Collection<CommandNode> getSubCommands() {
  41. return subCommands.values();
  42. }
  43. public List<String> getSubCommandNames() {
  44. return new ArrayList<>(subCommands.keySet());
  45. }
  46. public void setTabCompleter(BiFunction<CommandSender, String[], List<String>> tabCompleter) {
  47. this.tabCompleter = tabCompleter;
  48. }
  49. // Getters
  50. public String getName() { return name; }
  51. public String getDescription() { return description; }
  52. public BiConsumer<CommandSender, String[]> getExecutor() { return executor; }
  53. public BiFunction<CommandSender, String[], List<String>> getTabCompleter() { return tabCompleter; }
  54. public CommandNode getParent() { return parent; }
  55. public void setExecutor(BiConsumer<CommandSender, String[]> executor) {
  56. this.executor = executor;
  57. }
  58. }