diff --git a/src/main/java/pro/cloudnode/smp/bankaccounts/BankConfig.java b/src/main/java/pro/cloudnode/smp/bankaccounts/BankConfig.java index 90b20c7..c3ac8ed 100644 --- a/src/main/java/pro/cloudnode/smp/bankaccounts/BankConfig.java +++ b/src/main/java/pro/cloudnode/smp/bankaccounts/BankConfig.java @@ -462,6 +462,56 @@ public int invoiceNotifyInterval() { return Objects.requireNonNull(config.getString("messages.types." + Account.Type.getType(type))); } + // messages.help.bank.header + public @NotNull Optional<@NotNull Component> messagesHelpBankHeader() { + final @Nullable String message = config.getString("messages.help.bank.header"); + if (message == null || message.isEmpty()) return Optional.empty(); + return Optional.of(MiniMessage.miniMessage().deserialize(message)); + } + + // messages.help.bank.commands. + public @NotNull Optional<@NotNull Component> messagesHelpBankCommands(final @NotNull HelpCommandsBank key, final @NotNull String command, final @NotNull String arguments) { + final @Nullable String message = config.getString("messages.help.bank.commands." + key.path); + if (message == null || message.isEmpty()) return Optional.empty(); + return Optional.of(MiniMessage.miniMessage().deserialize( + message + .replace("", command), + Placeholder.unparsed("arguments", arguments) + )); + } + + // messages.help.bank.footer + public @NotNull Optional<@NotNull Component> messagesHelpBankFooter() { + final @Nullable String message = config.getString("messages.help.bank.footer"); + if (message == null || message.isEmpty()) return Optional.empty(); + return Optional.of(MiniMessage.miniMessage().deserialize(message)); + } + + // messages.help.invoice.header + public @NotNull Optional<@NotNull Component> messagesHelpInvoiceHeader() { + final @Nullable String message = config.getString("messages.help.invoice.header"); + if (message == null || message.isEmpty()) return Optional.empty(); + return Optional.of(MiniMessage.miniMessage().deserialize(message)); + } + + // messages.help.invoice.commands. + public @NotNull Optional<@NotNull Component> messagesHelpInvoiceCommands(final @NotNull HelpCommandsInvoice key, final @NotNull String command, final @NotNull String arguments) { + final @Nullable String message = config.getString("messages.help.invoice.commands." + key.path); + if (message == null || message.isEmpty()) return Optional.empty(); + return Optional.of(MiniMessage.miniMessage().deserialize( + message + .replace("", command), + Placeholder.unparsed("arguments", arguments) + )); + } + + // messages.help.invoice.footer + public @NotNull Optional<@NotNull Component> messagesHelpInvoiceFooter() { + final @Nullable String message = config.getString("messages.help.invoice.footer"); + if (message == null || message.isEmpty()) return Optional.empty(); + return Optional.of(MiniMessage.miniMessage().deserialize(message)); + } + // messages.errors.no-accounts public @NotNull Component messagesErrorsNoAccounts() { return MiniMessage.miniMessage().deserialize(Objects.requireNonNull(config.getString("messages.errors.no-accounts"))); @@ -1407,4 +1457,48 @@ public int invoiceNotifyInterval() { .replace("", version) ); } + + public enum HelpCommandsBank { + BALANCE("balance"), + BALANCE_OTHER("balance-other"), + TRANSFER("transfer"), + HISTORY("history"), + CREATE("create"), + CREATE_OTHER("create-other"), + FREEZE("freeze"), + UNFREEZE("unfreeze"), + DELETE("delete"), + INSTRUMENT("instrument"), + WHOIS("whois"), + BALTOP("baltop"), + POS("pos"), + SETBALANCE("setbalance"), + RENAME("rename"), + RELOAD("reload"), + INVOICES("invoices"), + ; + + public final @NotNull String path; + + HelpCommandsBank(final @NotNull String path) { + this.path = path; + } + } + + public enum HelpCommandsInvoice { + CREATE("create"), + CREATE_PLAYER("create-player"), + VIEW("view"), + PAY("pay"), + SEND("send"), + LIST("list"), + LIST_OTHER("list-other"), + ; + + public final @NotNull String path; + + HelpCommandsInvoice(final @NotNull String path) { + this.path = path; + } + } } 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 e43ec78..9e943d7 100644 --- a/src/main/java/pro/cloudnode/smp/bankaccounts/commands/BankCommand.java +++ b/src/main/java/pro/cloudnode/smp/bankaccounts/commands/BankCommand.java @@ -1,7 +1,5 @@ package pro.cloudnode.smp.bankaccounts.commands; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import org.bukkit.Material; import org.bukkit.OfflinePlayer; @@ -12,6 +10,7 @@ import org.jetbrains.annotations.Nullable; import pro.cloudnode.smp.bankaccounts.Account; import pro.cloudnode.smp.bankaccounts.BankAccounts; +import pro.cloudnode.smp.bankaccounts.BankConfig; import pro.cloudnode.smp.bankaccounts.Command; import pro.cloudnode.smp.bankaccounts.Permissions; import pro.cloudnode.smp.bankaccounts.Transaction; @@ -211,7 +210,7 @@ else if (args.length == 3 && sender.hasPermission(Permissions.INSTRUMENT_CREATE_ if (args.length == 0) return overview(sender); final @NotNull String @NotNull [] argsSubset = Arrays.copyOfRange(args, 1, args.length); return switch (args[0]) { - case "help" -> help(sender); + case "help" -> help(sender, label); case "bal", "balance", "account", "accounts" -> balance(sender, Arrays.copyOfRange(args, 1, args.length), label); case "reload" -> reload(sender); @@ -243,45 +242,44 @@ else if (args.length == 3 && sender.hasPermission(Permissions.INSTRUMENT_CREATE_ /** * Plugin help */ - public static @NotNull Message help(final @NotNull CommandSender sender) { - sender.sendMessage(MiniMessage.miniMessage().deserialize("---")); - sender.sendMessage(MiniMessage.miniMessage().deserialize("Available commands:")); - sender.sendMessage(Component.empty()); + public static @NotNull CommandResult help(final @NotNull CommandSender sender, final @NotNull String label) { + BankAccounts.getInstance().config().messagesHelpBankHeader().ifPresent(sender::sendMessage); if (sender.hasPermission(Permissions.BALANCE_SELF)) - sender.sendMessage(MiniMessage.miniMessage().deserialize("/bank balance [account] - Check your accounts")); + BankAccounts.getInstance().config().messagesHelpBankCommands(BankConfig.HelpCommandsBank.BALANCE, label + " balance", "[account]").ifPresent(sender::sendMessage); if (sender.hasPermission(Permissions.BALANCE_OTHER)) - sender.sendMessage(MiniMessage.miniMessage().deserialize("/bank balance --player - List another player's accounts")); + BankAccounts.getInstance().config().messagesHelpBankCommands(BankConfig.HelpCommandsBank.BALANCE, label + " balance", "--player ").ifPresent(sender::sendMessage); if (sender.hasPermission(Permissions.TRANSFER_SELF) || sender.hasPermission(Permissions.TRANSFER_OTHER)) - sender.sendMessage(MiniMessage.miniMessage().deserialize("/bank transfer [description] - Transfer money to another account")); + BankAccounts.getInstance().config().messagesHelpBankCommands(BankConfig.HelpCommandsBank.TRANSFER, label + " transfer", " [description]").ifPresent(sender::sendMessage); if (sender.hasPermission(Permissions.HISTORY)) - sender.sendMessage(MiniMessage.miniMessage().deserialize("/bank transactions [page=1] - List transactions")); + BankAccounts.getInstance().config().messagesHelpBankCommands(BankConfig.HelpCommandsBank.HISTORY, label + " history", " [page=1]").ifPresent(sender::sendMessage); if (sender.hasPermission(Permissions.ACCOUNT_CREATE)) - sender.sendMessage(MiniMessage.miniMessage().deserialize("/bank create - Create a new account")); + BankAccounts.getInstance().config().messagesHelpBankCommands(BankConfig.HelpCommandsBank.CREATE, label + " create", "").ifPresent(sender::sendMessage); if (sender.hasPermission(Permissions.ACCOUNT_CREATE_OTHER)) - sender.sendMessage(MiniMessage.miniMessage().deserialize("/bank create --player - Create an account for another player")); + BankAccounts.getInstance().config().messagesHelpBankCommands(BankConfig.HelpCommandsBank.CREATE, label + " create", " --player ").ifPresent(sender::sendMessage); if (sender.hasPermission(Permissions.FREEZE)) { - sender.sendMessage(MiniMessage.miniMessage().deserialize("/bank freeze - Freeze an account")); - sender.sendMessage(MiniMessage.miniMessage().deserialize("/bank unfreeze - Unfreeze an account")); + BankAccounts.getInstance().config().messagesHelpBankCommands(BankConfig.HelpCommandsBank.FREEZE, label + " freeze", "").ifPresent(sender::sendMessage); + BankAccounts.getInstance().config().messagesHelpBankCommands(BankConfig.HelpCommandsBank.UNFREEZE, label + " unfreeze", "").ifPresent(sender::sendMessage); } if (sender.hasPermission(Permissions.DELETE)) - sender.sendMessage(MiniMessage.miniMessage().deserialize("/bank delete - Delete an account")); + BankAccounts.getInstance().config().messagesHelpBankCommands(BankConfig.HelpCommandsBank.DELETE, label + " delete", "").ifPresent(sender::sendMessage); if (sender.hasPermission(Permissions.INSTRUMENT_CREATE)) - sender.sendMessage(MiniMessage.miniMessage().deserialize("/bank instrument " + (sender.hasPermission(Permissions.INSTRUMENT_CREATE_OTHER) ? " [player]" : "") + " - Create a new instrument")); + BankAccounts.getInstance().config().messagesHelpBankCommands(BankConfig.HelpCommandsBank.INSTRUMENT, label + " instrument", "" + (sender.hasPermission(Permissions.INSTRUMENT_CREATE_OTHER) ? " [player]" : "")).ifPresent(sender::sendMessage); if (sender.hasPermission(Permissions.WHOIS)) - sender.sendMessage(MiniMessage.miniMessage().deserialize("/bank whois - Get information about an account")); + BankAccounts.getInstance().config().messagesHelpBankCommands(BankConfig.HelpCommandsBank.WHOIS, label + " whois", "").ifPresent(sender::sendMessage); if (sender.hasPermission(Permissions.BALTOP)) - sender.sendMessage(MiniMessage.miniMessage().deserialize("/baltop [personal|business|player] [page=1] - Top balance leaderboard")); + BankAccounts.getInstance().config().messagesHelpBankCommands(BankConfig.HelpCommandsBank.BALTOP, "baltop", "[personal|business|player] [page=1]").ifPresent(sender::sendMessage); if (sender.hasPermission(Permissions.POS_CREATE)) - sender.sendMessage(MiniMessage.miniMessage().deserialize("/pos [description] - Create a new point of sale")); + BankAccounts.getInstance().config().messagesHelpBankCommands(BankConfig.HelpCommandsBank.POS, "pos", " [description]").ifPresent(sender::sendMessage); if (sender.hasPermission(Permissions.SET_BALANCE)) - sender.sendMessage(MiniMessage.miniMessage().deserialize("/bank setbalance - Set an account's balance")); + BankAccounts.getInstance().config().messagesHelpBankCommands(BankConfig.HelpCommandsBank.SETBALANCE, label + " setbalance", " ").ifPresent(sender::sendMessage); if (sender.hasPermission(Permissions.SET_NAME)) - sender.sendMessage(MiniMessage.miniMessage().deserialize("/bank setname [name] - Set an account's name")); + BankAccounts.getInstance().config().messagesHelpBankCommands(BankConfig.HelpCommandsBank.RENAME, label + " setname", " [name]").ifPresent(sender::sendMessage); if (sender.hasPermission(Permissions.RELOAD)) - sender.sendMessage(MiniMessage.miniMessage().deserialize("/bank reload - Reload plugin configuration")); + BankAccounts.getInstance().config().messagesHelpBankCommands(BankConfig.HelpCommandsBank.RELOAD, label + " reload", "").ifPresent(sender::sendMessage); if (Stream.of(Permissions.INVOICE_CREATE, Permissions.INVOICE_VIEW, Permissions.INVOICE_SEND, Permissions.TRANSFER_SELF, Permissions.TRANSFER_OTHER).anyMatch(sender::hasPermission)) - sender.sendMessage(MiniMessage.miniMessage().deserialize("/invoice help - See invoicing commands")); - return new Message(sender, "---"); + BankAccounts.getInstance().config().messagesHelpBankCommands(BankConfig.HelpCommandsBank.INVOICES, "invoice help", "").ifPresent(sender::sendMessage); + BankAccounts.getInstance().config().messagesHelpBankFooter().ifPresent(sender::sendMessage); + return CommandResult.DO_NOTHING; } /** diff --git a/src/main/java/pro/cloudnode/smp/bankaccounts/commands/InvoiceCommand.java b/src/main/java/pro/cloudnode/smp/bankaccounts/commands/InvoiceCommand.java index f9f3494..67e365e 100644 --- a/src/main/java/pro/cloudnode/smp/bankaccounts/commands/InvoiceCommand.java +++ b/src/main/java/pro/cloudnode/smp/bankaccounts/commands/InvoiceCommand.java @@ -9,6 +9,7 @@ import org.jetbrains.annotations.Nullable; import pro.cloudnode.smp.bankaccounts.Account; import pro.cloudnode.smp.bankaccounts.BankAccounts; +import pro.cloudnode.smp.bankaccounts.BankConfig; import pro.cloudnode.smp.bankaccounts.Command; import pro.cloudnode.smp.bankaccounts.Invoice; import pro.cloudnode.smp.bankaccounts.Permissions; @@ -125,25 +126,24 @@ else if (args.length == 3) { *

{@code /invoice help}

*/ public static @NotNull CommandResult help(final @NotNull CommandSender sender, final @NotNull String label) { - sender.sendMessage(MiniMessage.miniMessage().deserialize("---")); - sender.sendMessage(MiniMessage.miniMessage().deserialize("Available commands:")); - sender.sendMessage(Component.empty()); + BankAccounts.getInstance().config().messagesHelpInvoiceHeader().ifPresent(sender::sendMessage); if (sender.hasPermission(Permissions.INVOICE_CREATE)) { - sender.sendMessage(MiniMessage.miniMessage().deserialize("/" + label + " create [description] - Create an invoice")); - sender.sendMessage(MiniMessage.miniMessage().deserialize("/" + label + " create [description] --player - Create and send invoice to player")); + BankAccounts.getInstance().config().messagesHelpInvoiceCommands(BankConfig.HelpCommandsInvoice.CREATE, label + " create", " [description]").ifPresent(sender::sendMessage); + BankAccounts.getInstance().config().messagesHelpInvoiceCommands(BankConfig.HelpCommandsInvoice.CREATE_PLAYER, label + " create", " [description] --player ").ifPresent(sender::sendMessage); } if (sender.hasPermission(Permissions.INVOICE_VIEW)) - sender.sendMessage(MiniMessage.miniMessage().deserialize("/" + label + " view - View invoice details")); + BankAccounts.getInstance().config().messagesHelpInvoiceCommands(BankConfig.HelpCommandsInvoice.VIEW, label + " view", "").ifPresent(sender::sendMessage); if (sender.hasPermission(Permissions.TRANSFER_SELF) || sender.hasPermission(Permissions.TRANSFER_OTHER)) - sender.sendMessage(MiniMessage.miniMessage().deserialize("/" + label + " pay - Pay an invoice")); + BankAccounts.getInstance().config().messagesHelpInvoiceCommands(BankConfig.HelpCommandsInvoice.PAY, label + " pay", " ").ifPresent(sender::sendMessage); if (sender.hasPermission(Permissions.INVOICE_SEND)) - sender.sendMessage(MiniMessage.miniMessage().deserialize("/" + label + " send - Send an invoice to a player")); + BankAccounts.getInstance().config().messagesHelpInvoiceCommands(BankConfig.HelpCommandsInvoice.SEND, label + " send", " ").ifPresent(sender::sendMessage); if (sender.hasPermission(Permissions.INVOICE_VIEW)) { - sender.sendMessage(MiniMessage.miniMessage().deserialize("/" + label + " list [all|sent|received] [page] - List invoices")); + BankAccounts.getInstance().config().messagesHelpInvoiceCommands(BankConfig.HelpCommandsInvoice.LIST, label + " list", "[all|sent|received] [page]").ifPresent(sender::sendMessage); if (sender.hasPermission(Permissions.INVOICE_VIEW_OTHER)) - sender.sendMessage(MiniMessage.miniMessage().deserialize("/" + label + " list [all|sent|received] [page] --player - List invoices of player")); + BankAccounts.getInstance().config().messagesHelpInvoiceCommands(BankConfig.HelpCommandsInvoice.LIST_OTHER, label + " list", "[all|sent|received] [page] --player ").ifPresent(sender::sendMessage); } - return new Message(sender, "---"); + BankAccounts.getInstance().config().messagesHelpInvoiceFooter().ifPresent(sender::sendMessage); + return CommandResult.DO_NOTHING; } /** diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index b68118a..d8aa646 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -298,6 +298,63 @@ messages: # Vault integration account used to integrate payments with other plugins 2: Checking + help: + # Messages in /bank help + bank: + # Shown before any commands + # Set to nothing, e.g. "header:" (without quotes) to disable + header: | + --- + Available commands: + # Each command is only shown if the player has permission to use it. + # Set to nothing, e.g. "balance:" (without quotes) to disable a command + # Placeholders: + # - - The base command name (e.g. "bank send"). + # - - The command usage arguments (e.g. " [description]"). + commands: + balance: >/ - List your accounts and check balances. + balance-other: --player >/ - List another player's accounts. + transfer: >/ - Transfer money to another account. + history: >/ - List transactions. + create: >/ - Open a new bank account. + create-other: >/ - Open a new account for another player. + freeze: >/ - Freeze/disable an account. + unfreeze: >/ - Unfreeze/unblock an account. + delete: >/ - Close a bank account. + instrument: >/ - Create a payment instrument (bank card). + whois: >/ - Get information about an account. + baltop: >/ - Top balances leaderboard. + pos: >/ - Create new Point Of Sale. + setbalance: >/ - Set an account's balance. + rename: >/ - Set an account's name. + reload: >/ - Reload the plugin configuration. + invoices: >/ - See invoicing commands. + # Shown after all commands + # Set to nothing, e.g. "footer:" (without quotes) to disable + footer: --- + # Messages in /invoice help + invoice: + # Shown before any commands + # Set to nothing, e.g. "header:" (without quotes) to disable + header: | + --- + Available commands: + # Each command is only shown if the player has permission to use it. + # Set to nothing, e.g. "create:" (without quotes) to disable a command + # Placeholders: + # - - The base command name (e.g. "invoice create"). + # - - The command usage arguments (e.g. " [description]"). + commands: + create: >/ - Create an invoice that anyone can pay. + create-player: >/ - Create and send an invoice for a specific player. + view: >/ - View an invoice. + pay: >/ - Pay an invoice. + send: >/ - Send an invoice to a player. + list: >/ - List your invoices. + list-other: >/ - List another invoices of player. + # Shown after all commands + # Set to nothing, e.g. "footer:" (without quotes) to disable + footer: --- # Errors errors: # You have no accounts