Skip to content

Commit 51849d1

Browse files
committed
Decoupled CurrencyHolder from controllers and services
Refactored `EconomyController`, `BankController`, and related APIs to delegate currency management to `CurrencyHolder`. Removed deprecated methods from `Account` and `CurrencyHolder`. Updated implementations and placeholder resolvers to align with the changes. Bumped version to 3.0.0-pre4.
1 parent 80b8c6f commit 51849d1

File tree

13 files changed

+84
-202
lines changed

13 files changed

+84
-202
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ plugins {
55
}
66

77
group = "net.thenextlvl.services"
8-
version = "3.0.0-pre3"
8+
version = "3.0.0-pre4"
99

1010
java {
1111
toolchain.languageVersion = JavaLanguageVersion.of(21)

plugin/src/main/java/net/thenextlvl/service/ServicePlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ private void loadServiceEconomyWrapper() {
212212
services.register(EconomyController.class, wrapper, economy.getPlugin(), economy.getPriority());
213213

214214
if (!economy.getProvider().hasBankSupport()) return;
215-
var banks = new BankServiceWrapper(economy.getProvider(), economy.getPlugin(), this);
215+
var banks = new BankServiceWrapper(wrapper.getCurrencyHolder(), economy.getProvider(), economy.getPlugin(), this);
216216
services.register(BankController.class, banks, economy.getPlugin(), economy.getPriority());
217217
});
218218
}

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ public ServiceBankPlaceholderStore(ServicePlugin plugin) {
1919

2020
@Override
2121
protected void registerResolvers(BankController provider) {
22+
// todo: currency based placeholders
23+
2224
// %serviceio_bank%
2325
registerResolver("bank", (player, matcher) -> {
2426
return provider.getBank(player).map(Bank::getName).orElse("");
@@ -27,14 +29,14 @@ protected void registerResolvers(BankController provider) {
2729
// %serviceio_bank_balance%
2830
registerResolver("bank_balance", (player, matcher) -> {
2931
return provider.getBank(player)
30-
.map(bank -> bank.getBalance(provider.getDefaultCurrency()))
32+
.map(bank -> bank.getBalance(provider.getCurrencyHolder().getDefaultCurrency()))
3133
.orElse(BigDecimal.ZERO).toPlainString();
3234
});
3335

3436
// %serviceio_bank_balance_formatted%
3537
registerResolver("bank_balance_formatted", (player, matcher) -> {
36-
var format = provider.getDefaultCurrency().format(provider.getBank(player)
37-
.map(bank -> bank.getBalance(provider.getDefaultCurrency()))
38+
var format = provider.getCurrencyHolder().getDefaultCurrency().format(provider.getBank(player)
39+
.map(bank -> bank.getBalance(provider.getCurrencyHolder().getDefaultCurrency()))
3840
.orElse(BigDecimal.ZERO), Locale.US);
3941
return PlainTextComponentSerializer.plainText().serialize(format);
4042
});
@@ -51,7 +53,7 @@ protected void registerResolvers(BankController provider) {
5153
var world = plugin.getServer().getWorld(matcher.group(1));
5254
if (world == null) return null;
5355
return provider.getBank(player, world)
54-
.map(bank -> bank.getBalance(provider.getDefaultCurrency()))
56+
.map(bank -> bank.getBalance(provider.getCurrencyHolder().getDefaultCurrency()))
5557
.orElse(BigDecimal.ZERO)
5658
.toPlainString();
5759
});
@@ -60,8 +62,8 @@ protected void registerResolvers(BankController provider) {
6062
registerResolver("bank_%s_balance_formatted", (player, matcher) -> {
6163
var world = plugin.getServer().getWorld(matcher.group(1));
6264
if (world == null) return null;
63-
var format = provider.getDefaultCurrency().format(provider.getBank(player, world)
64-
.map(bank -> bank.getBalance(provider.getDefaultCurrency()))
65+
var format = provider.getCurrencyHolder().getDefaultCurrency().format(provider.getBank(player, world)
66+
.map(bank -> bank.getBalance(provider.getCurrencyHolder().getDefaultCurrency()))
6567
.orElse(BigDecimal.ZERO), Locale.US);
6668
return PlainTextComponentSerializer.plainText().serialize(format);
6769
});

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ protected void registerResolvers(EconomyController provider) {
2020
// %serviceio_balance%
2121
registerResolver("balance", (player, matcher) -> {
2222
return provider.getAccount(player)
23-
.map(account -> account.getBalance(provider.getDefaultCurrency()))
23+
.map(account -> account.getBalance(provider.getCurrencyHolder().getDefaultCurrency()))
2424
.orElse(BigDecimal.ZERO)
2525
.toPlainString();
2626
});
@@ -30,15 +30,15 @@ protected void registerResolvers(EconomyController provider) {
3030
var world = plugin.getServer().getWorld(matcher.group(1));
3131
if (world == null) return null;
3232
return provider.getAccount(player, world)
33-
.map(account -> account.getBalance(provider.getDefaultCurrency()))
33+
.map(account -> account.getBalance(provider.getCurrencyHolder().getDefaultCurrency()))
3434
.orElse(BigDecimal.ZERO)
3535
.toPlainString();
3636
});
3737

3838
// %serviceio_balance_formatted%
3939
registerResolver("balance_formatted", (player, matcher) -> {
40-
var format = provider.getDefaultCurrency().format(provider.getAccount(player)
41-
.map(account -> account.getBalance(provider.getDefaultCurrency()))
40+
var format = provider.getCurrencyHolder().getDefaultCurrency().format(provider.getAccount(player)
41+
.map(account -> account.getBalance(provider.getCurrencyHolder().getDefaultCurrency()))
4242
.orElse(BigDecimal.ZERO), Locale.US);
4343
return PlainTextComponentSerializer.plainText().serialize(format);
4444
});
@@ -47,8 +47,8 @@ protected void registerResolvers(EconomyController provider) {
4747
registerResolver("balance_formatted_%s", (player, matcher) -> {
4848
var world = plugin.getServer().getWorld(matcher.group(1));
4949
if (world == null) return null;
50-
var format = provider.getDefaultCurrency().format(provider.getAccount(player, world)
51-
.map(account -> account.getBalance(provider.getDefaultCurrency()))
50+
var format = provider.getCurrencyHolder().getDefaultCurrency().format(provider.getAccount(player, world)
51+
.map(account -> account.getBalance(provider.getCurrencyHolder().getDefaultCurrency()))
5252
.orElse(BigDecimal.ZERO), Locale.US);
5353
return PlainTextComponentSerializer.plainText().serialize(format);
5454
});

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

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import net.thenextlvl.service.api.economy.EconomyController;
88
import net.thenextlvl.service.api.economy.bank.Bank;
99
import net.thenextlvl.service.api.economy.bank.BankController;
10+
import net.thenextlvl.service.api.economy.currency.CurrencyHolder;
1011
import org.bukkit.OfflinePlayer;
1112
import org.bukkit.plugin.Plugin;
1213
import org.jspecify.annotations.NonNull;
@@ -29,6 +30,10 @@ public VaultEconomyServiceWrapper(@NonNull EconomyController economyController,
2930
this.economyController = economyController;
3031
this.plugin = plugin;
3132
}
33+
34+
private CurrencyHolder currencyHolder() {
35+
return economyController.getCurrencyHolder();
36+
}
3237

3338
@Override
3439
public boolean isEnabled() {
@@ -52,24 +57,24 @@ public boolean hasBankSupport() {
5257

5358
@Override
5459
public int fractionalDigits() {
55-
return economyController.getDefaultCurrency().getFractionalDigits();
60+
return currencyHolder().getDefaultCurrency().getFractionalDigits();
5661
}
5762

5863
@Override
5964
public String format(double amount) {
60-
var format = economyController.getDefaultCurrency().format(amount, Locale.US);
65+
var format = currencyHolder().getDefaultCurrency().format(amount, Locale.US);
6166
return PlainTextComponentSerializer.plainText().serialize(format);
6267
}
6368

6469
@Override
6570
public String currencyNamePlural() {
66-
return economyController.getDefaultCurrency().getDisplayNamePlural(Locale.US)
71+
return currencyHolder().getDefaultCurrency().getDisplayNamePlural(Locale.US)
6772
.map(PlainTextComponentSerializer.plainText()::serialize).orElse("");
6873
}
6974

7075
@Override
7176
public String currencyNameSingular() {
72-
return economyController.getDefaultCurrency().getDisplayNameSingular(Locale.US)
77+
return currencyHolder().getDefaultCurrency().getDisplayNameSingular(Locale.US)
7378
.map(PlainTextComponentSerializer.plainText()::serialize).orElse("");
7479
}
7580

@@ -113,7 +118,7 @@ public double getBalance(String playerName, String worldName) {
113118
@Override
114119
public double getBalance(OfflinePlayer player, String worldName) {
115120
return getAccount(player, worldName)
116-
.map(account -> account.getBalance(economyController.getDefaultCurrency()))
121+
.map(account -> account.getBalance(currencyHolder().getDefaultCurrency()))
117122
.map(Number::doubleValue)
118123
.orElse(0.0);
119124
}
@@ -157,8 +162,8 @@ public EconomyResponse withdrawPlayer(String playerName, String worldName, doubl
157162
@Override
158163
public EconomyResponse withdrawPlayer(OfflinePlayer player, String worldName, double amount) {
159164
return getAccount(player, worldName).map(account -> {
160-
var balance = account.getBalance(economyController.getDefaultCurrency());
161-
var withdraw = account.withdraw(amount, economyController.getDefaultCurrency());
165+
var balance = account.getBalance(currencyHolder().getDefaultCurrency());
166+
var withdraw = account.withdraw(amount, currencyHolder().getDefaultCurrency());
162167
var responseType = amount != 0 && balance.equals(withdraw) ? FAILURE : SUCCESS;
163168
return new EconomyResponse(amount, withdraw.doubleValue(), responseType, null);
164169
}).orElseGet(() -> new EconomyResponse(amount, 0, FAILURE, null));
@@ -183,8 +188,8 @@ public EconomyResponse depositPlayer(String name, String worldName, double amoun
183188
@Override
184189
public EconomyResponse depositPlayer(OfflinePlayer player, String worldName, double amount) {
185190
return getAccount(player, worldName).map(account -> {
186-
var balance = account.getBalance(economyController.getDefaultCurrency());
187-
var deposit = account.deposit(amount, economyController.getDefaultCurrency());
191+
var balance = account.getBalance(currencyHolder().getDefaultCurrency());
192+
var deposit = account.deposit(amount, currencyHolder().getDefaultCurrency());
188193
var responseType = amount != 0 && balance.equals(deposit) ? FAILURE : SUCCESS;
189194
return new EconomyResponse(amount, deposit.doubleValue(), responseType, null);
190195
}).orElseGet(() -> new EconomyResponse(amount, 0, FAILURE, null));
@@ -213,15 +218,15 @@ public EconomyResponse deleteBank(String name) {
213218
@Override
214219
public EconomyResponse bankBalance(String name) {
215220
return bankController().tryGetBank(name).join().map(bank -> {
216-
var balance = bank.getBalance(economyController.getDefaultCurrency());
221+
var balance = bank.getBalance(currencyHolder().getDefaultCurrency());
217222
return new EconomyResponse(0, balance.doubleValue(), SUCCESS, null);
218223
}).orElseGet(() -> new EconomyResponse(0, 0, FAILURE, null));
219224
}
220225

221226
@Override
222227
public EconomyResponse bankHas(String name, double amount) {
223228
return bankController().tryGetBank(name).join().map(bank -> {
224-
var balance = bank.getBalance(economyController.getDefaultCurrency()).doubleValue();
229+
var balance = bank.getBalance(currencyHolder().getDefaultCurrency()).doubleValue();
225230
var response = balance >= amount ? SUCCESS : FAILURE;
226231
return new EconomyResponse(amount, balance, response, null);
227232
}).orElseGet(() -> new EconomyResponse(0, 0, FAILURE, null));
@@ -230,7 +235,7 @@ public EconomyResponse bankHas(String name, double amount) {
230235
@Override
231236
public EconomyResponse bankWithdraw(String name, double amount) {
232237
return bankController().tryGetBank(name).join().map(bank -> {
233-
var balance = bank.withdraw(amount, economyController.getDefaultCurrency()).doubleValue();
238+
var balance = bank.withdraw(amount, currencyHolder().getDefaultCurrency()).doubleValue();
234239
var response = balance >= amount ? SUCCESS : FAILURE;
235240
return new EconomyResponse(amount, balance, response, null);
236241
}).orElseGet(() -> new EconomyResponse(0, 0, FAILURE, null));
@@ -239,7 +244,7 @@ public EconomyResponse bankWithdraw(String name, double amount) {
239244
@Override
240245
public EconomyResponse bankDeposit(String name, double amount) {
241246
return bankController().tryGetBank(name).join().map(bank -> {
242-
var balance = bank.deposit(amount, economyController.getDefaultCurrency()).doubleValue();
247+
var balance = bank.deposit(amount, currencyHolder().getDefaultCurrency()).doubleValue();
243248
var response = balance >= amount ? SUCCESS : FAILURE;
244249
return new EconomyResponse(amount, balance, response, null);
245250
}).orElseGet(() -> new EconomyResponse(0, 0, FAILURE, null));
@@ -255,7 +260,7 @@ public EconomyResponse isBankOwner(String name, String playerName) {
255260
public EconomyResponse isBankOwner(String name, OfflinePlayer player) {
256261
return bankController().tryGetBank(name).join().map(bank -> {
257262
var response = player != null && bank.getOwner().equals(player.getUniqueId()) ? SUCCESS : FAILURE;
258-
var balance = bank.getBalance(economyController.getDefaultCurrency());
263+
var balance = bank.getBalance(currencyHolder().getDefaultCurrency());
259264
return new EconomyResponse(0, balance.doubleValue(), response, null);
260265
}).orElseGet(() -> new EconomyResponse(0, 0, FAILURE, null));
261266
}
@@ -270,7 +275,7 @@ public EconomyResponse isBankMember(String name, String playerName) {
270275
public EconomyResponse isBankMember(String name, OfflinePlayer player) {
271276
return bankController().tryGetBank(name).join().map(bank -> {
272277
var response = player != null && bank.isMember(player.getUniqueId()) ? SUCCESS : FAILURE;
273-
var balance = bank.getBalance(economyController.getDefaultCurrency());
278+
var balance = bank.getBalance(currencyHolder().getDefaultCurrency());
274279
return new EconomyResponse(0, balance.doubleValue(), response, null);
275280
}).orElseGet(() -> new EconomyResponse(0, 0, FAILURE, null));
276281
}

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

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
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;
8+
import net.thenextlvl.service.api.economy.currency.CurrencyHolder;
99
import net.thenextlvl.service.wrapper.service.model.WrappedBank;
10-
import net.thenextlvl.service.wrapper.service.model.WrappedCurrency;
1110
import org.bukkit.OfflinePlayer;
1211
import org.bukkit.World;
1312
import org.bukkit.plugin.Plugin;
@@ -23,21 +22,21 @@
2322

2423
@NullMarked
2524
public class BankServiceWrapper implements BankController {
25+
private final CurrencyHolder holder;
2626
private final Economy economy;
2727
private final Plugin provider;
2828
private final ServicePlugin plugin;
29-
private final Currency currency;
3029

31-
public BankServiceWrapper(Economy economy, Plugin provider, ServicePlugin plugin) {
32-
this.currency = new WrappedCurrency(economy);
30+
public BankServiceWrapper(CurrencyHolder holder, Economy economy, Plugin provider, ServicePlugin plugin) {
31+
this.holder = holder;
3332
this.economy = economy;
3433
this.plugin = plugin;
3534
this.provider = provider;
3635
}
3736

3837
@Override
39-
public Currency getDefaultCurrency() {
40-
return currency;
38+
public CurrencyHolder getCurrencyHolder() {
39+
return holder;
4140
}
4241

4342
@Override
@@ -80,13 +79,13 @@ public CompletableFuture<Boolean> deleteBank(UUID uuid, @Nullable World world) {
8079
@Override
8180
public @Unmodifiable Set<Bank> getBanks(@Nullable World world) {
8281
return world != null ? Set.of() : economy.getBanks().stream()
83-
.map(bank -> new WrappedBank(this, bank, null, economy, plugin))
82+
.map(bank -> new WrappedBank(bank, null, economy, plugin))
8483
.collect(Collectors.toUnmodifiableSet());
8584
}
8685

8786
@Override
8887
public Optional<Bank> getBank(String name) {
89-
return Optional.of(new WrappedBank(this, name, null, economy, plugin));
88+
return Optional.of(new WrappedBank(name, null, economy, plugin));
9089
}
9190

9291
@Override

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

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.thenextlvl.service.api.economy.Account;
66
import net.thenextlvl.service.api.economy.EconomyController;
77
import net.thenextlvl.service.api.economy.currency.Currency;
8+
import net.thenextlvl.service.api.economy.currency.CurrencyHolder;
89
import net.thenextlvl.service.wrapper.service.model.WrappedAccount;
910
import net.thenextlvl.service.wrapper.service.model.WrappedCurrency;
1011
import org.bukkit.OfflinePlayer;
@@ -23,18 +24,23 @@
2324

2425
@NullMarked
2526
public class EconomyServiceWrapper implements EconomyController {
26-
private final Currency currency;
27+
private final CurrencyHolder holder;
2728
private final Economy economy;
2829
private final Plugin provider;
2930
private final ServicePlugin plugin;
3031

3132
public EconomyServiceWrapper(Economy economy, Plugin provider, ServicePlugin plugin) {
32-
this.currency = new WrappedCurrency(economy);
33+
this.holder = new WrappedCurrencyHolder(economy);
3334
this.economy = economy;
3435
this.plugin = plugin;
3536
this.provider = provider;
3637
}
3738

39+
@Override
40+
public CurrencyHolder getCurrencyHolder() {
41+
return holder;
42+
}
43+
3844
@Override
3945
public CompletableFuture<@Unmodifiable Set<Account>> loadAccounts(@Nullable World world) {
4046
return CompletableFuture.completedFuture(getAccounts(world));
@@ -44,14 +50,14 @@ public EconomyServiceWrapper(Economy economy, Plugin provider, ServicePlugin plu
4450
public @Unmodifiable Set<Account> getAccounts(@Nullable World world) {
4551
return Arrays.stream(plugin.getServer().getOfflinePlayers())
4652
.filter(player -> economy.hasAccount(player, world != null ? world.getName() : null))
47-
.map(player -> new WrappedAccount(this, world, economy, player))
53+
.map(player -> new WrappedAccount(world, economy, player))
4854
.collect(Collectors.toUnmodifiableSet());
4955
}
5056

5157
@Override
5258
public Optional<Account> getAccount(OfflinePlayer player, @Nullable World world) {
5359
if (!economy.hasAccount(player, world != null ? world.getName() : null)) return Optional.empty();
54-
return Optional.of(new WrappedAccount(this, world, economy, player));
60+
return Optional.of(new WrappedAccount(world, economy, player));
5561
}
5662

5763
@Override
@@ -94,11 +100,6 @@ public boolean hasMultiWorldSupport() {
94100
return false;
95101
}
96102

97-
@Override
98-
public Currency getDefaultCurrency() {
99-
return currency;
100-
}
101-
102103
@Override
103104
public Plugin getPlugin() {
104105
return provider;
@@ -108,4 +109,17 @@ public Plugin getPlugin() {
108109
public String getName() {
109110
return economy.getName();
110111
}
112+
113+
private static class WrappedCurrencyHolder implements CurrencyHolder {
114+
private final Currency currency;
115+
116+
private WrappedCurrencyHolder(Economy economy) {
117+
this.currency = new WrappedCurrency(economy);
118+
}
119+
120+
@Override
121+
public Currency getDefaultCurrency() {
122+
return currency;
123+
}
124+
}
111125
}

0 commit comments

Comments
 (0)