EcoCommand.java 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package me.lethunderhawk.economy.command;
  2. import me.lethunderhawk.economy.EconomyModule;
  3. import me.lethunderhawk.economy.api.EconomyAPI;
  4. import me.lethunderhawk.economy.shop.ShopGUI;
  5. import me.lethunderhawk.fluxapi.util.command.CommandNode;
  6. import me.lethunderhawk.fluxapi.util.command.CustomCommand;
  7. import me.lethunderhawk.fluxapi.util.gui.InventoryManager;
  8. import net.kyori.adventure.text.Component;
  9. import net.kyori.adventure.text.format.NamedTextColor;
  10. import org.bukkit.Bukkit;
  11. import org.bukkit.command.CommandSender;
  12. import org.bukkit.entity.Player;
  13. import java.util.Collections;
  14. import java.util.List;
  15. import java.util.stream.Collectors;
  16. public class EcoCommand extends CustomCommand {
  17. private static final List<String> AMOUNTS = List.of("1", "5", "10", "50", "100", "500", "1000");
  18. private final EconomyModule module;
  19. public EcoCommand(EconomyModule module) {
  20. super(module);
  21. this.module = module;
  22. }
  23. @Override
  24. public CommandNode getRootCommand(){
  25. return new CommandNode("eco", "Main economy command", null);
  26. }
  27. @Override
  28. public void createCommands() {
  29. CommandNode set = registerSubCommand("set", "Set the balance of a player", this::setEco);
  30. set.setTabCompleter(this::completeAllEcoCommands);
  31. CommandNode add = registerSubCommand("add", "Add any amount to the balance of a player", this::addEco);
  32. add.setTabCompleter(this::completeAllEcoCommands);
  33. CommandNode remove = registerSubCommand("remove", "Remove any amount of the balance of a player", this::removeEco);
  34. remove.setTabCompleter(this::completeAllEcoCommands);
  35. CommandNode get = registerSubCommand("get", "Get the balance of a player", this::getBalance);
  36. get.setTabCompleter(this::completePlayers);
  37. //CommandNode shop = registerSubCommand("shop", "Open the main Shop", this::openShop);
  38. }
  39. private void openShop(CommandSender sender, String[] strings) {
  40. if(!(sender instanceof Player p)) return;
  41. InventoryManager.openFor(p, new ShopGUI(p));
  42. }
  43. private List<String> completePlayers(CommandSender sender, String[] args){
  44. String partial = args[1].toLowerCase();
  45. return Bukkit.getOnlinePlayers().stream()
  46. .map(Player::getName)
  47. .filter(name -> name.toLowerCase().startsWith(partial))
  48. .collect(Collectors.toList());
  49. }
  50. /**
  51. * @param args The full arguments list
  52. * @return The completion in following format: /eco [action] [List of players] [amount]
  53. */
  54. private List<String> completeAllEcoCommands(CommandSender sender, String[] args){
  55. if (args.length == 2) {
  56. return completePlayers(sender, args);
  57. }
  58. // /eco <action> <player> <amount>
  59. if (args.length == 3) {
  60. String partial = args[2].toLowerCase();
  61. return AMOUNTS.stream()
  62. .filter(s -> s.startsWith(partial))
  63. .collect(Collectors.toList());
  64. }
  65. return Collections.emptyList();
  66. }
  67. private void getBalance(CommandSender commandSender, String[] strings) {
  68. Player target = Bukkit.getPlayer(strings[0]);
  69. if (target == null) {
  70. module.sendText(commandSender, Component.text("Spieler nicht gefunden.", NamedTextColor.RED));
  71. }else{
  72. module.sendText(commandSender, Component.text("Spieler " + target.getName() + " hat " + getAPI().getMoney(target.getUniqueId()), NamedTextColor.GRAY));
  73. }
  74. }
  75. private void removeEco(CommandSender commandSender, String[] strings) {
  76. if(!commandSender.isOp()) return;
  77. Player target = Bukkit.getPlayer(strings[0]);
  78. if (target == null) {
  79. module.sendText(commandSender, Component.text("Spieler nicht gefunden.", NamedTextColor.RED));
  80. }else{
  81. getAPI().removeMoney(target.getUniqueId(), Double.parseDouble(strings[1]));
  82. }
  83. }
  84. private void addEco(CommandSender commandSender, String[] strings) {
  85. if(!commandSender.isOp()) return;
  86. Player target = Bukkit.getPlayer(strings[0]);
  87. if (target == null) {
  88. module.sendText(commandSender, Component.text("Spieler nicht gefunden.", NamedTextColor.RED));
  89. }else{
  90. getAPI().addMoney(target.getUniqueId(), Double.parseDouble(strings[1]));
  91. }
  92. }
  93. private void setEco(CommandSender commandSender, String[] strings) {
  94. if(!commandSender.isOp()) return;
  95. Player target = Bukkit.getPlayer(strings[0]);
  96. if (target == null) {
  97. module.sendText(commandSender, Component.text("Spieler nicht gefunden.", NamedTextColor.RED));
  98. }else{
  99. getAPI().setMoney(target.getUniqueId(), Double.parseDouble(strings[1]));
  100. }
  101. }
  102. private EconomyAPI getAPI(){
  103. return module.getEconomyAPI();
  104. }
  105. }