Skip to content

Commit 34ca1ed

Browse files
committed
Refactored to use Currency for balance operations
Replaced direct balance manipulation methods with `Currency`-based equivalents for consistency and multi-currency support. Deprecated older methods and introduced `WrappedCurrency` for compatibility with Vault's economy API. Updated placeholders and wrapper classes accordingly.
1 parent dee4109 commit 34ca1ed

File tree

9 files changed

+203
-79
lines changed

9 files changed

+203
-79
lines changed

plugin/src/main/java/net/thenextlvl/service/placeholder/economy/ServiceBankPlaceholderStore.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package net.thenextlvl.service.placeholder.economy;
22

3+
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
34
import net.thenextlvl.service.ServicePlugin;
45
import net.thenextlvl.service.api.economy.bank.Bank;
56
import net.thenextlvl.service.api.economy.bank.BankController;
67
import net.thenextlvl.service.placeholder.api.PlaceholderStore;
78
import org.jspecify.annotations.NullMarked;
89

910
import java.math.BigDecimal;
11+
import java.util.Locale;
1012
import java.util.stream.Collectors;
1113

1214
@NullMarked
@@ -24,12 +26,17 @@ protected void registerResolvers(BankController provider) {
2426

2527
// %serviceio_bank_balance%
2628
registerResolver("bank_balance", (player, matcher) -> {
27-
return provider.getBank(player).map(Bank::getBalance).orElse(BigDecimal.ZERO).toPlainString();
29+
return provider.getBank(player)
30+
.map(bank -> bank.getBalance(provider.getDefaultCurrency()))
31+
.orElse(BigDecimal.ZERO).toPlainString();
2832
});
2933

3034
// %serviceio_bank_balance_formatted%
3135
registerResolver("bank_balance_formatted", (player, matcher) -> {
32-
return provider.format(provider.getBank(player).map(Bank::getBalance).orElse(BigDecimal.ZERO));
36+
var format = provider.getDefaultCurrency().format(provider.getBank(player)
37+
.map(bank -> bank.getBalance(provider.getDefaultCurrency()))
38+
.orElse(BigDecimal.ZERO), Locale.US);
39+
return PlainTextComponentSerializer.plainText().serialize(format);
3340
});
3441

3542
// %serviceio_bank_<world>%
@@ -43,14 +50,20 @@ protected void registerResolvers(BankController provider) {
4350
registerResolver("bank_%s_balance", (player, matcher) -> {
4451
var world = plugin.getServer().getWorld(matcher.group(1));
4552
if (world == null) return null;
46-
return provider.getBank(player, world).map(Bank::getBalance).orElse(BigDecimal.ZERO).toPlainString();
53+
return provider.getBank(player, world)
54+
.map(bank -> bank.getBalance(provider.getDefaultCurrency()))
55+
.orElse(BigDecimal.ZERO)
56+
.toPlainString();
4757
});
48-
58+
4959
// %serviceio_bank_<world>_balance_formatted%
5060
registerResolver("bank_%s_balance_formatted", (player, matcher) -> {
5161
var world = plugin.getServer().getWorld(matcher.group(1));
5262
if (world == null) return null;
53-
return provider.format(provider.getBank(player, world).map(Bank::getBalance).orElse(BigDecimal.ZERO));
63+
var format = provider.getDefaultCurrency().format(provider.getBank(player, world)
64+
.map(bank -> bank.getBalance(provider.getDefaultCurrency()))
65+
.orElse(BigDecimal.ZERO), Locale.US);
66+
return PlainTextComponentSerializer.plainText().serialize(format);
5467
});
5568

5669
// %serviceio_banks%
Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package net.thenextlvl.service.placeholder.economy;
22

3+
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
34
import net.thenextlvl.service.ServicePlugin;
4-
import net.thenextlvl.service.api.economy.Account;
55
import net.thenextlvl.service.api.economy.EconomyController;
66
import net.thenextlvl.service.placeholder.api.PlaceholderStore;
77
import org.jspecify.annotations.NullMarked;
88

99
import java.math.BigDecimal;
10+
import java.util.Locale;
1011

1112
@NullMarked
1213
public class ServiceEconomyPlaceholderStore extends PlaceholderStore<EconomyController> {
@@ -18,26 +19,38 @@ public ServiceEconomyPlaceholderStore(ServicePlugin plugin) {
1819
protected void registerResolvers(EconomyController provider) {
1920
// %serviceio_balance%
2021
registerResolver("balance", (player, matcher) -> {
21-
return provider.getAccount(player).map(Account::getBalance).orElse(BigDecimal.ZERO).toPlainString();
22+
return provider.getAccount(player)
23+
.map(account -> account.getBalance(provider.getDefaultCurrency()))
24+
.orElse(BigDecimal.ZERO)
25+
.toPlainString();
2226
});
2327

2428
// %serviceio_balance_<world>%
2529
registerResolver("balance_%s", (player, matcher) -> {
2630
var world = plugin.getServer().getWorld(matcher.group(1));
2731
if (world == null) return null;
28-
return provider.getAccount(player, world).map(Account::getBalance).orElse(BigDecimal.ZERO).toPlainString();
32+
return provider.getAccount(player, world)
33+
.map(account -> account.getBalance(provider.getDefaultCurrency()))
34+
.orElse(BigDecimal.ZERO)
35+
.toPlainString();
2936
});
3037

3138
// %serviceio_balance_formatted%
3239
registerResolver("balance_formatted", (player, matcher) -> {
33-
return provider.format(provider.getAccount(player).map(Account::getBalance).orElse(BigDecimal.ZERO));
40+
var format = provider.getDefaultCurrency().format(provider.getAccount(player)
41+
.map(account -> account.getBalance(provider.getDefaultCurrency()))
42+
.orElse(BigDecimal.ZERO), Locale.US);
43+
return PlainTextComponentSerializer.plainText().serialize(format);
3444
});
3545

3646
// %serviceio_balance_formatted%
3747
registerResolver("balance_formatted_%s", (player, matcher) -> {
3848
var world = plugin.getServer().getWorld(matcher.group(1));
3949
if (world == null) return null;
40-
return provider.format(provider.getAccount(player, world).map(Account::getBalance).orElse(BigDecimal.ZERO));
50+
var format = provider.getDefaultCurrency().format(provider.getAccount(player, world)
51+
.map(account -> account.getBalance(provider.getDefaultCurrency()))
52+
.orElse(BigDecimal.ZERO), Locale.US);
53+
return PlainTextComponentSerializer.plainText().serialize(format);
4154
});
4255
}
4356
}

plugin/src/main/java/net/thenextlvl/service/wrapper/VaultEconomyServiceWrapper.java

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.thenextlvl.service.wrapper;
22

3+
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
34
import net.milkbowl.vault.economy.Economy;
45
import net.milkbowl.vault.economy.EconomyResponse;
56
import net.thenextlvl.service.api.economy.Account;
@@ -52,22 +53,25 @@ public boolean hasBankSupport() {
5253

5354
@Override
5455
public int fractionalDigits() {
55-
return economyController.fractionalDigits();
56+
return economyController.getDefaultCurrency().getFractionalDigits();
5657
}
5758

5859
@Override
5960
public String format(double amount) {
60-
return economyController.format(amount);
61+
var format = economyController.getDefaultCurrency().format(amount, Locale.US);
62+
return PlainTextComponentSerializer.plainText().serialize(format);
6163
}
6264

6365
@Override
6466
public String currencyNamePlural() {
65-
return economyController.getCurrencyNamePlural(Locale.US);
67+
var name = economyController.getDefaultCurrency().getDisplayNamePlural(Locale.US);
68+
return PlainTextComponentSerializer.plainText().serialize(name);
6669
}
6770

6871
@Override
6972
public String currencyNameSingular() {
70-
return economyController.getCurrencyNameSingular(Locale.US);
73+
var name = economyController.getDefaultCurrency().getDisplayNameSingular(Locale.US);
74+
return PlainTextComponentSerializer.plainText().serialize(name);
7175
}
7276

7377
@Override
@@ -110,7 +114,7 @@ public double getBalance(String playerName, String worldName) {
110114
@Override
111115
public double getBalance(OfflinePlayer player, String worldName) {
112116
return getAccount(player, worldName)
113-
.map(Account::getBalance)
117+
.map(account -> account.getBalance(economyController.getDefaultCurrency()))
114118
.map(Number::doubleValue)
115119
.orElse(0.0);
116120
}
@@ -154,8 +158,8 @@ public EconomyResponse withdrawPlayer(String playerName, String worldName, doubl
154158
@Override
155159
public EconomyResponse withdrawPlayer(OfflinePlayer player, String worldName, double amount) {
156160
return getAccount(player, worldName).map(account -> {
157-
var balance = account.getBalance();
158-
var withdraw = account.withdraw(amount);
161+
var balance = account.getBalance(economyController.getDefaultCurrency());
162+
var withdraw = account.withdraw(amount, economyController.getDefaultCurrency());
159163
var responseType = amount != 0 && balance.equals(withdraw) ? FAILURE : SUCCESS;
160164
return new EconomyResponse(amount, withdraw.doubleValue(), responseType, null);
161165
}).orElseGet(() -> new EconomyResponse(amount, 0, FAILURE, null));
@@ -180,8 +184,8 @@ public EconomyResponse depositPlayer(String name, String worldName, double amoun
180184
@Override
181185
public EconomyResponse depositPlayer(OfflinePlayer player, String worldName, double amount) {
182186
return getAccount(player, worldName).map(account -> {
183-
var balance = account.getBalance();
184-
var deposit = account.deposit(amount);
187+
var balance = account.getBalance(economyController.getDefaultCurrency());
188+
var deposit = account.deposit(amount, economyController.getDefaultCurrency());
185189
var responseType = amount != 0 && balance.equals(deposit) ? FAILURE : SUCCESS;
186190
return new EconomyResponse(amount, deposit.doubleValue(), responseType, null);
187191
}).orElseGet(() -> new EconomyResponse(amount, 0, FAILURE, null));
@@ -211,7 +215,8 @@ public EconomyResponse deleteBank(String name) {
211215
public EconomyResponse bankBalance(String name) {
212216
try {
213217
var bank = bankController().tryGetBank(name).get();
214-
return new EconomyResponse(0, bank.getBalance().doubleValue(), SUCCESS, null);
218+
var balance = bank.getBalance(economyController.getDefaultCurrency());
219+
return new EconomyResponse(0, balance.doubleValue(), SUCCESS, null);
215220
} catch (InterruptedException | ExecutionException e) {
216221
return new EconomyResponse(0, 0, FAILURE, e.getMessage());
217222
}
@@ -221,7 +226,7 @@ public EconomyResponse bankBalance(String name) {
221226
public EconomyResponse bankHas(String name, double amount) {
222227
try {
223228
var bank = bankController().tryGetBank(name).get();
224-
var balance = bank.getBalance().doubleValue();
229+
var balance = bank.getBalance(economyController.getDefaultCurrency()).doubleValue();
225230
var response = balance >= amount ? SUCCESS : FAILURE;
226231
return new EconomyResponse(amount, balance, response, null);
227232
} catch (InterruptedException | ExecutionException e) {
@@ -233,7 +238,7 @@ public EconomyResponse bankHas(String name, double amount) {
233238
public EconomyResponse bankWithdraw(String name, double amount) {
234239
try {
235240
var bank = bankController().tryGetBank(name).get();
236-
var balance = bank.withdraw(amount).doubleValue();
241+
var balance = bank.withdraw(amount, economyController.getDefaultCurrency()).doubleValue();
237242
var response = balance >= amount ? SUCCESS : FAILURE;
238243
return new EconomyResponse(amount, balance, response, null);
239244
} catch (InterruptedException | ExecutionException e) {
@@ -245,7 +250,7 @@ public EconomyResponse bankWithdraw(String name, double amount) {
245250
public EconomyResponse bankDeposit(String name, double amount) {
246251
try {
247252
var bank = bankController().tryGetBank(name).get();
248-
var balance = bank.deposit(amount).doubleValue();
253+
var balance = bank.deposit(amount, economyController.getDefaultCurrency()).doubleValue();
249254
var response = balance >= amount ? SUCCESS : FAILURE;
250255
return new EconomyResponse(amount, balance, response, null);
251256
} catch (InterruptedException | ExecutionException e) {
@@ -264,7 +269,8 @@ public EconomyResponse isBankOwner(String name, OfflinePlayer player) {
264269
try {
265270
var bank = bankController().tryGetBank(name).get();
266271
var response = player != null && bank.getOwner().equals(player.getUniqueId()) ? SUCCESS : FAILURE;
267-
return new EconomyResponse(0, bank.getBalance().doubleValue(), response, null);
272+
var balance = bank.getBalance(economyController.getDefaultCurrency());
273+
return new EconomyResponse(0, balance.doubleValue(), response, null);
268274
} catch (InterruptedException | ExecutionException e) {
269275
return new EconomyResponse(0, 0, FAILURE, e.getMessage());
270276
}
@@ -281,7 +287,8 @@ public EconomyResponse isBankMember(String name, OfflinePlayer player) {
281287
try {
282288
var bank = bankController().tryGetBank(name).get();
283289
var response = player != null && bank.isMember(player.getUniqueId()) ? SUCCESS : FAILURE;
284-
return new EconomyResponse(0, bank.getBalance().doubleValue(), response, null);
290+
var balance = bank.getBalance(economyController.getDefaultCurrency());
291+
return new EconomyResponse(0, balance.doubleValue(), response, null);
285292
} catch (InterruptedException | ExecutionException e) {
286293
return new EconomyResponse(0, 0, FAILURE, e.getMessage());
287294
}

plugin/src/main/java/net/thenextlvl/service/wrapper/service/BankServiceWrapper.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.thenextlvl.service.ServicePlugin;
66
import net.thenextlvl.service.api.economy.bank.Bank;
77
import net.thenextlvl.service.api.economy.bank.BankController;
8+
import net.thenextlvl.service.api.economy.currency.Currency;
89
import net.thenextlvl.service.wrapper.service.model.WrappedBank;
910
import org.bukkit.OfflinePlayer;
1011
import org.bukkit.World;
@@ -23,21 +24,18 @@ public class BankServiceWrapper implements BankController {
2324
private final Economy economy;
2425
private final Plugin provider;
2526
private final ServicePlugin plugin;
27+
private final Currency currency;
2628

2729
public BankServiceWrapper(Economy economy, Plugin provider, ServicePlugin plugin) {
30+
this.currency = new WrappedCurrency(economy);
2831
this.economy = economy;
2932
this.plugin = plugin;
3033
this.provider = provider;
3134
}
3235

3336
@Override
34-
public String format(Number amount) {
35-
return economy.format(amount.doubleValue());
36-
}
37-
38-
@Override
39-
public int fractionalDigits() {
40-
return economy.fractionalDigits();
37+
public Currency getDefaultCurrency() {
38+
return currency;
4139
}
4240

4341
@Override
@@ -105,7 +103,7 @@ public CompletableFuture<Boolean> deleteBank(UUID uuid, World world) {
105103
@Override
106104
public @Unmodifiable Set<Bank> getBanks() {
107105
return economy.getBanks().stream()
108-
.map(bank -> new WrappedBank(bank, null, economy, plugin))
106+
.map(bank -> new WrappedBank(this, bank, null, economy, plugin))
109107
.collect(Collectors.toUnmodifiableSet());
110108
}
111109

@@ -116,7 +114,7 @@ public CompletableFuture<Boolean> deleteBank(UUID uuid, World world) {
116114

117115
@Override
118116
public Optional<Bank> getBank(String name) {
119-
return Optional.of(new WrappedBank(name, null, economy, plugin));
117+
return Optional.of(new WrappedBank(this, name, null, economy, plugin));
120118
}
121119

122120
@Override

plugin/src/main/java/net/thenextlvl/service/wrapper/service/EconomyServiceWrapper.java

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import net.milkbowl.vault.economy.Economy;
44
import net.thenextlvl.service.ServicePlugin;
55
import net.thenextlvl.service.api.economy.Account;
6+
import net.thenextlvl.service.api.economy.currency.Currency;
67
import net.thenextlvl.service.api.economy.EconomyController;
78
import net.thenextlvl.service.wrapper.service.model.WrappedAccount;
89
import org.bukkit.OfflinePlayer;
@@ -12,7 +13,6 @@
1213
import org.jspecify.annotations.NullMarked;
1314

1415
import java.util.Arrays;
15-
import java.util.Locale;
1616
import java.util.Optional;
1717
import java.util.Set;
1818
import java.util.UUID;
@@ -21,36 +21,18 @@
2121

2222
@NullMarked
2323
public class EconomyServiceWrapper implements EconomyController {
24+
private final Currency currency;
2425
private final Economy economy;
2526
private final Plugin provider;
2627
private final ServicePlugin plugin;
2728

2829
public EconomyServiceWrapper(Economy economy, Plugin provider, ServicePlugin plugin) {
30+
this.currency = new WrappedCurrency(economy);
2931
this.economy = economy;
3032
this.plugin = plugin;
3133
this.provider = provider;
3234
}
3335

34-
@Override
35-
public String format(Number amount) {
36-
return economy.format(amount.doubleValue());
37-
}
38-
39-
@Override
40-
public String getCurrencyNamePlural(Locale locale) {
41-
return economy.currencyNamePlural();
42-
}
43-
44-
@Override
45-
public String getCurrencyNameSingular(Locale locale) {
46-
return economy.currencyNameSingular();
47-
}
48-
49-
@Override
50-
public String getCurrencySymbol() {
51-
return "";
52-
}
53-
5436
@Override
5537
public CompletableFuture<@Unmodifiable Set<Account>> loadAccounts() {
5638
return CompletableFuture.completedFuture(getAccounts());
@@ -60,20 +42,20 @@ public String getCurrencySymbol() {
6042
public @Unmodifiable Set<Account> getAccounts() {
6143
return Arrays.stream(plugin.getServer().getOfflinePlayers())
6244
.filter(economy::hasAccount)
63-
.map(player -> new WrappedAccount(null, economy, player))
45+
.map(player -> new WrappedAccount(this, null, economy, player))
6446
.collect(Collectors.toUnmodifiableSet());
6547
}
6648

6749
@Override
6850
public Optional<Account> getAccount(OfflinePlayer player) {
6951
if (!economy.hasAccount(player)) return Optional.empty();
70-
return Optional.of(new WrappedAccount(null, economy, player));
52+
return Optional.of(new WrappedAccount(this, null, economy, player));
7153
}
7254

7355
@Override
7456
public Optional<Account> getAccount(OfflinePlayer player, World world) {
7557
if (!economy.hasAccount(player, world.getName())) return Optional.empty();
76-
return Optional.of(new WrappedAccount(world, economy, player));
58+
return Optional.of(new WrappedAccount(this, world, economy, player));
7759
}
7860

7961
@Override
@@ -139,8 +121,8 @@ public CompletableFuture<Boolean> deleteAccount(UUID uuid, World world) {
139121
}
140122

141123
@Override
142-
public int fractionalDigits() {
143-
return economy.fractionalDigits();
124+
public Currency getDefaultCurrency() {
125+
return currency;
144126
}
145127

146128
@Override

0 commit comments

Comments
 (0)