diff --git a/README.md b/README.md index 2d6dceb..0db9875 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,15 @@ A multi-account economy plugin. ## Permissions -| Permission | Command | Description | Recommended group | -|------------------------------|--------------|------------------------------------------|-------------------| -| `bank.command` | `bank` | Required to use any bank command | `default` | -| `bank.balance.self` | `balance` | List your accounts and check own balance | `default` | -| `bank.account.create` | `create` | Create a new account | `default` | -| `bank.reload` | `reload` | Reload the plugin | `admin` | -| `bank.account.create.other` | `create` | Create a new account for another player | `admin` | -| `bank.account.create.bypass` | `create` | Bypass the maximum account limit | `admin` | -| `bank.set.balance` | `setbalance` | Set the balance of an account | `admin` | \ No newline at end of file +| Permission | Command | Description | Recommended group | +|------------------------------|--------------|----------------------------------------------------|-------------------| +| `bank.command` | `bank` | Required to use any bank command | `default` | +| `bank.balance.self` | `balance` | List your accounts and check own balance | `default` | +| `bank.account.create` | `create` | Create a new account | `default` | +| `bank.set.name` | `setname` | Set the name of an account | `default` | +| `bank.reload` | `reload` | Reload the plugin | `admin` | +| `bank.account.create.other` | `create` | Create a new account for another player | `admin` | +| `bank.account.create.bypass` | `create` | Bypass the maximum account limit | `admin` | +| `bank.set.balance` | `setbalance` | Set the balance of an account | `admin` | +| `bank.set.name.other` | `setname` | Set the name of an account owned by another player | `admin` | +| `bank.set.name.personal` | `setname` | Allow renaming personal accounts (not recommended) | `admin` | \ No newline at end of file diff --git a/src/main/java/pro/cloudnode/smp/bankaccounts/commands/BankCommand.java b/src/main/java/pro/cloudnode/smp/bankaccounts/commands/BankCommand.java index 78e4eb2..33bcdc9 100644 --- a/src/main/java/pro/cloudnode/smp/bankaccounts/commands/BankCommand.java +++ b/src/main/java/pro/cloudnode/smp/bankaccounts/commands/BankCommand.java @@ -39,6 +39,7 @@ public ArrayList onTabComplete(@NotNull CommandSender sender, @NotNull C if (sender.hasPermission("bank.reload")) suggestions.add("reload"); if (sender.hasPermission("bank.account.create")) suggestions.addAll(Arrays.asList("create", "new")); if (sender.hasPermission("bank.set.balance")) suggestions.addAll(Arrays.asList("setbal", "setbalance")); + if (sender.hasPermission("bank.set.name")) suggestions.addAll(Arrays.asList("setname", "rename")); } else { switch (args[0]) { @@ -81,6 +82,13 @@ else if (args.length == 4 && args[2].equals("--player") && sender.hasPermission( } if (args.length == 3) suggestions.add("Infinity"); } + case "setname", "rename" -> { + if (!sender.hasPermission("bank.set.name")) return suggestions; + if (args.length == 2) { + Account[] accounts = sender.hasPermission("bank.set.name.other") ? Account.get() : Account.get(BankAccounts.getOfflinePlayer(sender)); + for (Account account : accounts) suggestions.add(account.id); + } + } } } return suggestions; @@ -97,6 +105,7 @@ else switch (args[0]) { case "reload" -> reload(sender); case "create", "new" -> create(sender, Arrays.copyOfRange(args, 1, args.length), label); case "setbal", "setbalance" -> setBalance(sender, Arrays.copyOfRange(args, 1, args.length), label); + case "setname", "rename" -> setName(sender, Arrays.copyOfRange(args, 1, args.length), label); default -> sender.sendMessage(MiniMessage.miniMessage().deserialize(BankAccounts.getInstance().getConfig().getString("messages.errors.unknown-command"))); } } @@ -124,6 +133,7 @@ public static void help(@NotNull CommandSender sender, @NotNull String label) { if (sender.hasPermission("bank.account.create")) sender.sendMessage(MiniMessage.miniMessage().deserialize("/bank create [PERSONAL|BUSINESS] - Create a new account")); if (sender.hasPermission("bank.account.create.other")) sender.sendMessage(MiniMessage.miniMessage().deserialize("/bank create [PERSONAL|BUSINESS] --player [player] - Create an account for another player")); if (sender.hasPermission("bank.set.balance")) sender.sendMessage(MiniMessage.miniMessage().deserialize("/bank setbalance [account] [balance] - Set an account's balance")); + if (sender.hasPermission("bank.set.name")) sender.sendMessage(MiniMessage.miniMessage().deserialize("/bank setname [account] [name] - Set an account's name")); if (sender.hasPermission("bank.reload")) sender.sendMessage(MiniMessage.miniMessage().deserialize("/bank reload - Reload plugin configuration")); sender.sendMessage(MiniMessage.miniMessage().deserialize("---")); } @@ -286,6 +296,41 @@ public static void setBalance(@NotNull CommandSender sender, String[] args, Stri } } + /** + * Set account name + */ + public static void setName(@NotNull CommandSender sender, String[] args, String label) { + if (!sender.hasPermission("bank.set.name")) { + sender.sendMessage(MiniMessage.miniMessage().deserialize(Objects.requireNonNull(BankAccounts.getInstance().getConfig().getString("messages.errors.no-permission")))); + return; + } + if (args.length < 2) { + sender.sendMessage(MiniMessage.miniMessage().deserialize("(!) Usage: / setname " + (args.length > 0 ? args[0] : "") + " ", + Placeholder.unparsed("command", label) + )); + return; + } + Optional account = Account.get(args[0]); + if (account.isEmpty()) + sender.sendMessage(MiniMessage.miniMessage().deserialize(Objects.requireNonNull(BankAccounts.getInstance().getConfig().getString("messages.errors.account-not-found")))); + else { + if (!sender.hasPermission("bank.set.name.other") && !account.get().owner.getUniqueId().equals(BankAccounts.getOfflinePlayer(sender).getUniqueId())) { + sender.sendMessage(MiniMessage.miniMessage().deserialize(Objects.requireNonNull(BankAccounts.getInstance().getConfig().getString("messages.errors.no-permission")))); + return; + } + if (!sender.hasPermission("bank.set.name.personal") && account.get().type == Account.Type.PERSONAL) { + sender.sendMessage(MiniMessage.miniMessage().deserialize(Objects.requireNonNull(BankAccounts.getInstance().getConfig().getString("messages.errors.rename-personal")))); + return; + } + String name = String.join(" ", Arrays.copyOfRange(args, 1, args.length)).trim(); + name = name.length() > 32 ? name.substring(0, 32) : name; + name = name.length() == 0 ? null : name; + account.get().name = name; + account.get().save(); + sender.sendMessage(accountPlaceholders(Objects.requireNonNull(BankAccounts.getInstance().getConfig().getString("messages.name-set")), account.get())); + } + } + /** * Account placeholders * @param string String to deserialize with MiniMessage and apply placeholders to diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 767776d..a7f8b96 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -83,6 +83,7 @@ messages: # the account type # the account limit for that type max-accounts: "(!) You cannot open more than accounts." + rename-personal: "(!) You cannot rename personal accounts." # Account balance # Available placeholders: @@ -111,3 +112,6 @@ messages: # Balance set (same placeholders as balance) balance-set: "(!) Successfully set (, ) balance to " + + # Account name set (same placeholders as balance) + name-set: "(!) Successfully renamed account "