package me.lethunderhawk.economy.command; import me.lethunderhawk.bazaarflux.util.command.CommandNode; import me.lethunderhawk.bazaarflux.util.command.CustomCommand; import me.lethunderhawk.economy.EconomyModule; import me.lethunderhawk.economy.api.EconomyAPI; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; public class EcoCommand extends CustomCommand { private static final List AMOUNTS = List.of("1", "5", "10", "50", "100", "500", "1000"); private final EconomyModule module; public EcoCommand(EconomyModule module) { super(new CommandNode("eco", "Main economy command", null), module); this.module = module; } @Override public void createCommands() { CommandNode set = registerCommand("set", "Set the balance of a player", this::setEco); set.setTabCompleter(this::completeAllEcoCommands); CommandNode add = registerCommand("add", "Add any amount to the balance of a player", this::addEco); add.setTabCompleter(this::completeAllEcoCommands); CommandNode remove = registerCommand("remove", "Remove any amount of the balance of a player", this::removeEco); remove.setTabCompleter(this::completeAllEcoCommands); CommandNode get = registerCommand("get", "Get the balance of a player", this::getBalance); get.setTabCompleter(this::completePlayers); } private List completePlayers(CommandSender sender, String[] args){ String partial = args[1].toLowerCase(); return Bukkit.getOnlinePlayers().stream() .map(Player::getName) .filter(name -> name.toLowerCase().startsWith(partial)) .collect(Collectors.toList()); } /** * @param args The full arguments list * @return The completion in following format: /eco [action] [List of players] [amount] */ private List completeAllEcoCommands(CommandSender sender, String[] args){ if (args.length == 2) { return completePlayers(sender, args); } // /eco if (args.length == 3) { String partial = args[2].toLowerCase(); return AMOUNTS.stream() .filter(s -> s.startsWith(partial)) .collect(Collectors.toList()); } return Collections.emptyList(); } private void getBalance(CommandSender commandSender, String[] strings) { Player target = Bukkit.getPlayer(strings[0]); if (target == null) { module.sendText(commandSender, Component.text("Spieler nicht gefunden.", NamedTextColor.RED)); }else{ module.sendText(commandSender, Component.text("Spieler " + target.getName() + " hat " + getAPI().getMoney(target.getUniqueId()), NamedTextColor.GRAY)); } } private void removeEco(CommandSender commandSender, String[] strings) { } private void addEco(CommandSender commandSender, String[] strings) { if(!commandSender.isOp()) return; Player target = Bukkit.getPlayer(strings[0]); if (target == null) { module.sendText(commandSender, Component.text("Spieler nicht gefunden.", NamedTextColor.RED)); }else{ getAPI().addMoney(target.getUniqueId(), Long.parseLong(strings[1])); } } private void setEco(CommandSender commandSender, String[] strings) { if(!commandSender.isOp()) return; Player target = Bukkit.getPlayer(strings[0]); if (target == null) { module.sendText(commandSender, Component.text("Spieler nicht gefunden.", NamedTextColor.RED)); }else{ getAPI().setMoney(target.getUniqueId(), Long.parseLong(strings[1])); } } private EconomyAPI getAPI(){ return module.getEconomyAPI(); } }