From f06cac624e559a69109110ae38edecc9144e836b Mon Sep 17 00:00:00 2001 From: Zefir Kirilov Date: Tue, 25 Mar 2025 17:56:14 +0200 Subject: [PATCH 1/7] feat: add placeholders for player total balance --- .../integrations/PAPIIntegration.java | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java b/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java index ed6fe06e..da6173a9 100644 --- a/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java +++ b/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java @@ -6,6 +6,9 @@ import pro.cloudnode.smp.bankaccounts.Account; import pro.cloudnode.smp.bankaccounts.BankAccounts; +import java.math.BigDecimal; +import java.util.Arrays; + public final class PAPIIntegration extends PlaceholderExpansion { @Override public @NotNull String getIdentifier() { @@ -38,10 +41,28 @@ public String onRequest(final @NotNull OfflinePlayer player, final @NotNull Stri if (args.length < 1) return null; return switch (args[0]) { - case "balance" -> args.length < 2 ? null : switch (args[1]) { - case "formatted" -> args.length != 3 ? null : Account.get(Account.Tag.from(args[2])).map(value -> BankAccounts.formatCurrency(value.balance)).orElse(null); - default -> Account.get(Account.Tag.from(args[1])).map(value -> String.valueOf(value.balance)).orElse(null); - }; + case "balance" -> { + if (args.length == 1) + yield String.valueOf( + Arrays.stream(Account.get(player)) + .map(account -> account.balance) + .reduce(BigDecimal.ZERO, BigDecimal::add) + ); + yield switch (args[1]) { + case "formatted" -> { + if (args.length == 3) + yield Account.get(Account.Tag.from(args[2])).map(value -> BankAccounts.formatCurrency(value.balance)).orElse(null); + if (args.length == 2) + yield BankAccounts.formatCurrency( + Arrays.stream(Account.get(player)) + .map(account -> account.balance) + .reduce(BigDecimal.ZERO, BigDecimal::add) + ); + yield null; + } + default -> Account.get(Account.Tag.from(args[1])).map(value -> String.valueOf(value.balance)).orElse(null); + }; + } case "owner" -> args.length < 2 ? null : Account.get(Account.Tag.from(args[1])).map(value -> value.owner.getName()).orElse(null); case "type" -> args.length < 2 ? null : Account.get(Account.Tag.from(args[1])).map(value -> value.type.getName()).orElse(null); case "name" -> args.length < 2 ? null : Account.get(Account.Tag.from(args[1])).map(value -> value.name).orElse(null); From 4b79e954babb48f095657281d5d831446dc2495c Mon Sep 17 00:00:00 2001 From: Zefir Kirilov Date: Tue, 25 Mar 2025 17:56:39 +0200 Subject: [PATCH 2/7] chore: improve placeholder owner, type, and name handling logic --- .../smp/bankaccounts/integrations/PAPIIntegration.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java b/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java index da6173a9..c733e06e 100644 --- a/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java +++ b/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java @@ -63,9 +63,9 @@ yield switch (args[1]) { default -> Account.get(Account.Tag.from(args[1])).map(value -> String.valueOf(value.balance)).orElse(null); }; } - case "owner" -> args.length < 2 ? null : Account.get(Account.Tag.from(args[1])).map(value -> value.owner.getName()).orElse(null); - case "type" -> args.length < 2 ? null : Account.get(Account.Tag.from(args[1])).map(value -> value.type.getName()).orElse(null); - case "name" -> args.length < 2 ? null : Account.get(Account.Tag.from(args[1])).map(value -> value.name).orElse(null); + case "owner" -> args.length != 2 ? null : Account.get(Account.Tag.from(args[1])).map(value -> value.owner.getName()).orElse(null); + case "type" -> args.length != 2 ? null : Account.get(Account.Tag.from(args[1])).map(value -> value.type.getName()).orElse(null); + case "name" -> args.length != 2 ? null : Account.get(Account.Tag.from(args[1])).map(value -> value.name).orElse(null); default -> null; }; } From bda4cd2e579599bc99ae80524ca4457f5071355f Mon Sep 17 00:00:00 2001 From: Zefir Kirilov Date: Tue, 25 Mar 2025 18:28:47 +0200 Subject: [PATCH 3/7] feat: add placeholders for accounts list --- .../bankaccounts/integrations/PAPIIntegration.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java b/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java index c733e06e..1099e29a 100644 --- a/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java +++ b/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java @@ -8,6 +8,7 @@ import java.math.BigDecimal; import java.util.Arrays; +import java.util.stream.Collectors; public final class PAPIIntegration extends PlaceholderExpansion { @Override @@ -66,6 +67,18 @@ yield switch (args[1]) { case "owner" -> args.length != 2 ? null : Account.get(Account.Tag.from(args[1])).map(value -> value.owner.getName()).orElse(null); case "type" -> args.length != 2 ? null : Account.get(Account.Tag.from(args[1])).map(value -> value.type.getName()).orElse(null); case "name" -> args.length != 2 ? null : Account.get(Account.Tag.from(args[1])).map(value -> value.name).orElse(null); + case "account" -> { + if (args.length == 2) { + final @NotNull Account @NotNull [] accounts = Account.get(player); + yield switch (args[1]) { + case "list" -> Arrays.stream(accounts).map(account -> account.id).collect(Collectors.joining(", ")); + case "names" -> Arrays.stream(accounts).map(Account::name).collect(Collectors.joining(", ")); + case "count" -> String.valueOf(accounts.length); + default -> null; + }; + } + yield null; + } default -> null; }; } From f877b3f71bedb4dfdff97b436d60ede53464da79 Mon Sep 17 00:00:00 2001 From: Zefir Kirilov Date: Tue, 25 Mar 2025 18:35:30 +0200 Subject: [PATCH 4/7] chore: remove comment with placeholders list moving to the repo wiki on GitHub --- .../smp/bankaccounts/integrations/PAPIIntegration.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java b/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java index 1099e29a..82c300f7 100644 --- a/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java +++ b/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java @@ -26,16 +26,6 @@ public final class PAPIIntegration extends PlaceholderExpansion { return BankAccounts.getInstance().getPluginMeta().getVersion(); } - /** - * Adds the following placeholders: - *
    - *
  • %bankaccounts_balance_<accountID>% - returns balance of account with specified ID
  • - *
  • %bankaccounts_balance_formatted_<accountID>% - returns formatted balance of account with specified ID
  • - *
  • %bankaccounts_owner_<accountID>% - returns name of the owner of account with specified ID
  • - *
  • %bankaccounts_type_<accountID>% - returns type of account with specified ID
  • - *
  • %bankaccounts_name_<accountID>% - returns name of account with specified ID
  • - *
- */ @Override public String onRequest(final @NotNull OfflinePlayer player, final @NotNull String params) { final @NotNull String[] args = params.split("_"); From 853a3b49bd9b27bca4d72f2888f5075d07a31a80 Mon Sep 17 00:00:00 2001 From: Zefir Kirilov Date: Tue, 25 Mar 2025 19:10:35 +0200 Subject: [PATCH 5/7] =?UTF-8?q?feat:=20add=20=E2=80=98short=E2=80=99=20for?= =?UTF-8?q?matting=20for=20placeholders?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bankaccounts/integrations/PAPIIntegration.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java b/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java index 82c300f7..79af8249 100644 --- a/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java +++ b/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java @@ -51,6 +51,17 @@ yield switch (args[1]) { ); yield null; } + case "short" -> { + if (args.length == 3) + yield Account.get(Account.Tag.from(args[2])).map(value -> BankAccounts.formatCurrencyShort(value.balance)).orElse(null); + if (args.length == 2) + yield BankAccounts.formatCurrencyShort( + Arrays.stream(Account.get(player)) + .map(account -> account.balance) + .reduce(BigDecimal.ZERO, BigDecimal::add) + ); + yield null; + } default -> Account.get(Account.Tag.from(args[1])).map(value -> String.valueOf(value.balance)).orElse(null); }; } From c3d7444d7a29325189773536ea50ad6577c64932 Mon Sep 17 00:00:00 2001 From: Zefir Kirilov Date: Tue, 25 Mar 2025 19:26:02 +0200 Subject: [PATCH 6/7] fix: use Account#name() to get account name or fall-back to ID --- .../smp/bankaccounts/integrations/PAPIIntegration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java b/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java index 79af8249..d785d092 100644 --- a/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java +++ b/src/main/java/pro/cloudnode/smp/bankaccounts/integrations/PAPIIntegration.java @@ -67,7 +67,7 @@ yield switch (args[1]) { } case "owner" -> args.length != 2 ? null : Account.get(Account.Tag.from(args[1])).map(value -> value.owner.getName()).orElse(null); case "type" -> args.length != 2 ? null : Account.get(Account.Tag.from(args[1])).map(value -> value.type.getName()).orElse(null); - case "name" -> args.length != 2 ? null : Account.get(Account.Tag.from(args[1])).map(value -> value.name).orElse(null); + case "name" -> args.length != 2 ? null : Account.get(Account.Tag.from(args[1])).map(Account::name).orElse(null); case "account" -> { if (args.length == 2) { final @NotNull Account @NotNull [] accounts = Account.get(player); From 14c4635127584c40147e6141d312c6a61c4df448 Mon Sep 17 00:00:00 2001 From: Zefir Kirilov Date: Tue, 25 Mar 2025 19:34:02 +0200 Subject: [PATCH 7/7] docs: mention PlaceholderAPI support in README --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 4ce323f5..b766e18c 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,11 @@ enabling compatibility with third-party plugins that support Vault. You can create a [Point of Sale](https://github.com/cloudnode-pro/BankAccounts/wiki/POS), which is a type of single-use chest shop. Players can pay using a bank card (`/bank card`). +### PlaceholderAPI Support + +BankAccounts provides several *PlaceholderAPI* placeholders that you can use. See +the [Placeholders Wiki](https://github.com/cloudnode-pro/BankAccounts/wiki/Placeholders) for an exhaustive list. + ### Extensive Configuration All functionality is fully configurable. See [default config](https://github.com/cloudnode-pro/BankAccounts/blob/master/src/main/resources/config.yml).