Skip to content

Commit cf2a278

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 af3c132 commit cf2a278

File tree

10 files changed

+62
-180
lines changed

10 files changed

+62
-180
lines changed

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() {
22+
// todo: currency based placeholders
23+
2224
// %serviceio_bank%
2325
registerResolver("bank", (provider, player, matcher) -> {
2426
return provider.getBank(player).map(Bank::getName).orElse("");
@@ -27,14 +29,14 @@ protected void registerResolvers() {
2729
// %serviceio_bank_balance%
2830
registerResolver("bank_balance", (provider, 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", (provider, 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() {
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() {
6062
registerResolver("bank_%s_balance_formatted", (provider, 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() {
2020
// %serviceio_balance%
2121
registerResolver("balance", (provider, 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() {
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", (provider, 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() {
4747
registerResolver("balance_formatted_%s", (provider, 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/service/BankServiceWrapper.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import net.milkbowl.vault.economy.EconomyResponse;
55
import net.thenextlvl.service.api.economy.bank.Bank;
66
import net.thenextlvl.service.api.economy.bank.BankController;
7+
import net.thenextlvl.service.api.economy.currency.CurrencyHolder;
78
import net.thenextlvl.service.wrapper.service.model.WrappedBank;
8-
import net.thenextlvl.service.wrapper.service.model.WrappedCurrency;
99
import org.bukkit.OfflinePlayer;
1010
import org.bukkit.World;
1111
import org.bukkit.plugin.Plugin;
@@ -21,19 +21,20 @@
2121

2222
@NullMarked
2323
public class BankServiceWrapper implements BankController, Wrapper {
24+
private final CurrencyHolder holder;
2425
private final Economy economy;
2526
private final Plugin provider;
2627
private final Currency currency;
2728

28-
public BankServiceWrapper(Economy economy, Plugin provider) {
29-
this.currency = new WrappedCurrency(economy);
29+
public BankServiceWrapper(CurrencyHolder holder, Economy economy, Plugin provider) {
30+
this.holder = holder;
3031
this.economy = economy;
3132
this.provider = provider;
3233
}
3334

3435
@Override
35-
public Currency getDefaultCurrency() {
36-
return currency;
36+
public CurrencyHolder getCurrencyHolder() {
37+
return holder;
3738
}
3839

3940
@Override
@@ -74,9 +75,9 @@ public CompletableFuture<Boolean> deleteBank(UUID uuid, @Nullable World world) {
7475
}
7576

7677
@Override
77-
public @Unmodifiable Set<Bank> getBanks() {
78-
return economy.getBanks().stream()
79-
.map(bank -> new WrappedBank(this, bank, null, economy, plugin))
78+
public @Unmodifiable Set<Bank> getBanks(@Nullable World world) {
79+
return world != null ? Set.of() : economy.getBanks().stream()
80+
.map(bank -> new WrappedBank(bank, null, economy, plugin))
8081
.collect(Collectors.toUnmodifiableSet());
8182
}
8283

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
@@ -3,6 +3,7 @@
33
import net.milkbowl.vault.economy.Economy;
44
import net.thenextlvl.service.api.economy.Account;
55
import net.thenextlvl.service.api.economy.EconomyController;
6+
import net.thenextlvl.service.api.economy.currency.Currency;
67
import net.thenextlvl.service.wrapper.service.model.WrappedAccount;
78
import net.thenextlvl.service.wrapper.service.model.WrappedCurrency;
89
import org.bukkit.OfflinePlayer;
@@ -21,16 +22,21 @@
2122

2223
@NullMarked
2324
public class EconomyServiceWrapper implements EconomyController, Wrapper {
24-
private final Currency currency;
25+
private final CurrencyHolder holder;
2526
private final Economy economy;
2627
private final Plugin provider;
2728

2829
public EconomyServiceWrapper(Economy economy, Plugin provider) {
29-
this.currency = new WrappedCurrency(economy);
30+
this.holder = new WrappedCurrencyHolder(economy);
3031
this.economy = economy;
3132
this.provider = provider;
3233
}
3334

35+
@Override
36+
public CurrencyHolder getCurrencyHolder() {
37+
return holder;
38+
}
39+
3440
@Override
3541
public CompletableFuture<@Unmodifiable Set<Account>> loadAccounts(@Nullable World world) {
3642
return CompletableFuture.completedFuture(getAccounts(world));
@@ -40,14 +46,14 @@ public EconomyServiceWrapper(Economy economy, Plugin provider) {
4046
public @Unmodifiable Set<Account> getAccounts(@Nullable World world) {
4147
return Arrays.stream(provider.getServer().getOfflinePlayers())
4248
.filter(player -> economy.hasAccount(player, world != null ? world.getName() : null))
43-
.map(player -> new WrappedAccount(this, world, economy, player))
49+
.map(player -> new WrappedAccount(world, economy, player))
4450
.collect(Collectors.toUnmodifiableSet());
4551
}
4652

4753
@Override
4854
public Optional<Account> getAccount(OfflinePlayer player, @Nullable World world) {
4955
if (!economy.hasAccount(player, world != null ? world.getName() : null)) return Optional.empty();
50-
return Optional.of(new WrappedAccount(this, world, economy, player));
56+
return Optional.of(new WrappedAccount(world, economy, player));
5157
}
5258

5359
@Override
@@ -90,11 +96,6 @@ public boolean hasMultiWorldSupport() {
9096
return false;
9197
}
9298

93-
@Override
94-
public Currency getDefaultCurrency() {
95-
return currency;
96-
}
97-
9899
@Override
99100
public Plugin getPlugin() {
100101
return provider;
@@ -104,4 +105,17 @@ public Plugin getPlugin() {
104105
public String getName() {
105106
return economy.getName() + " Wrapper";
106107
}
108+
109+
private static class WrappedCurrencyHolder implements CurrencyHolder {
110+
private final Currency currency;
111+
112+
private WrappedCurrencyHolder(Economy economy) {
113+
this.currency = new WrappedCurrency(economy);
114+
}
115+
116+
@Override
117+
public Currency getDefaultCurrency() {
118+
return currency;
119+
}
120+
}
107121
}

plugin/src/main/java/net/thenextlvl/service/wrapper/service/model/WrappedAccount.java

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
import net.milkbowl.vault.economy.Economy;
44
import net.thenextlvl.service.api.economy.Account;
55
import net.thenextlvl.service.api.economy.currency.Currency;
6-
import net.thenextlvl.service.api.economy.currency.CurrencyHolder;
7-
import net.thenextlvl.service.api.economy.EconomyController;
86
import org.bukkit.OfflinePlayer;
97
import org.bukkit.World;
108
import org.jspecify.annotations.NullMarked;
@@ -16,23 +14,16 @@
1614

1715
@NullMarked
1816
public class WrappedAccount implements Account {
19-
private final EconomyController controller;
2017
private final @Nullable World world;
2118
private final Economy economy;
2219
private final OfflinePlayer holder;
2320

24-
public WrappedAccount(EconomyController controller, @Nullable World world, Economy economy, OfflinePlayer holder) {
25-
this.controller = controller;
21+
public WrappedAccount(@Nullable World world, Economy economy, OfflinePlayer holder) {
2622
this.world = world;
2723
this.economy = economy;
2824
this.holder = holder;
2925
}
3026

31-
@Override
32-
public CurrencyHolder getHolder() {
33-
return controller;
34-
}
35-
3627
@Override
3728
public BigDecimal deposit(Number amount, Currency currency) {
3829
var response = economy.depositPlayer(holder, world != null ? world.getName() : null, amount.doubleValue());

plugin/src/main/java/net/thenextlvl/service/wrapper/service/model/WrappedBank.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import net.thenextlvl.service.ServicePlugin;
55
import net.thenextlvl.service.api.economy.bank.Bank;
66
import net.thenextlvl.service.api.economy.currency.Currency;
7-
import net.thenextlvl.service.api.economy.currency.CurrencyHolder;
87
import org.bukkit.OfflinePlayer;
98
import org.bukkit.World;
109
import org.bukkit.plugin.Plugin;
@@ -33,11 +32,6 @@ public WrappedBank(String name, @Nullable World world, Economy economy, Plugin p
3332
this.provider = provider;
3433
}
3534

36-
@Override
37-
public CurrencyHolder getHolder() {
38-
return controller;
39-
}
40-
4135
@Override
4236
public BigDecimal deposit(Number amount, Currency currency) {
4337
return new BigDecimal(economy.bankDeposit(name, amount.doubleValue()).balance);

src/main/java/net/thenextlvl/service/api/economy/Account.java

Lines changed: 1 addition & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package net.thenextlvl.service.api.economy;
22

33
import net.thenextlvl.service.api.economy.currency.Currency;
4-
import net.thenextlvl.service.api.economy.currency.CurrencyHolder;
54
import org.bukkit.World;
6-
import org.jetbrains.annotations.Contract;
75
import org.jspecify.annotations.NullMarked;
86

97
import java.math.BigDecimal;
@@ -16,28 +14,7 @@
1614
* @since 1.0.0
1715
*/
1816
@NullMarked
19-
public interface Account extends Comparable<Account> {
20-
/**
21-
* Retrieves the associated {@code CurrencyHolder} for the account.
22-
*
23-
* @return the {@code CurrencyHolder} capable of managing currencies for the account
24-
* @since 3.0.0
25-
*/
26-
@Contract(pure = true)
27-
CurrencyHolder getHolder();
28-
29-
/**
30-
* Deposits the specified amount into the account balance.
31-
*
32-
* @param amount the amount to be deposited
33-
* @return the new balance after the deposit
34-
* @deprecated use {@link #deposit(Number, Currency)}
35-
*/
36-
@Deprecated(forRemoval = true, since = "3.0.0")
37-
default BigDecimal deposit(Number amount) {
38-
return deposit(amount, getHolder().getDefaultCurrency());
39-
}
40-
17+
public interface Account {
4118
/**
4219
* Deposits the specified amount of the given currency into the account balance.
4320
*
@@ -50,17 +27,6 @@ default BigDecimal deposit(Number amount, Currency currency) {
5027
return setBalance(getBalance(currency).add(BigDecimal.valueOf(amount.doubleValue())), currency);
5128
}
5229

53-
/**
54-
* Retrieves the balance of the account.
55-
*
56-
* @return the balance of the account
57-
* @deprecated use {@link #getBalance(Currency)}
58-
*/
59-
@Deprecated(forRemoval = true, since = "3.0.0")
60-
default BigDecimal getBalance() {
61-
return getBalance(getHolder().getDefaultCurrency());
62-
}
63-
6430
/**
6531
* Retrieves the balance of the account for the specified currency.
6632
*
@@ -70,18 +36,6 @@ default BigDecimal getBalance() {
7036
*/
7137
BigDecimal getBalance(Currency currency);
7238

73-
/**
74-
* Withdraws the specified amount from the account balance.
75-
*
76-
* @param amount the amount to be withdrawn
77-
* @return the new balance after the withdrawal
78-
* @deprecated use {@link #withdraw(Number, Currency)}
79-
*/
80-
@Deprecated(forRemoval = true, since = "3.0.0")
81-
default BigDecimal withdraw(Number amount) {
82-
return withdraw(amount, getHolder().getDefaultCurrency());
83-
}
84-
8539
/**
8640
* Withdraws the specified amount of the given currency from the account balance.
8741
*
@@ -108,20 +62,6 @@ default BigDecimal withdraw(Number amount, Currency currency) {
10862
*/
10963
UUID getOwner();
11064

111-
/**
112-
* Compares this account to the specified account based on their balance.
113-
*
114-
* @param account the account to be compared
115-
* @return a negative integer, zero, or a positive integer if this account is
116-
* less than, equal to, or greater than the specified account
117-
* @deprecated use {@link #compareTo(Account, Currency)}
118-
*/
119-
@Override
120-
@Deprecated(forRemoval = true, since = "3.0.0")
121-
default int compareTo(Account account) {
122-
return compareTo(account, getHolder().getDefaultCurrency());
123-
}
124-
12565
/**
12666
* Compares this account with another account based on their balances in the specified currency.
12767
*
@@ -135,17 +75,6 @@ default int compareTo(Account account, Currency currency) {
13575
return getBalance(currency).compareTo(account.getBalance(currency));
13676
}
13777

138-
/**
139-
* Sets the balance of the account to the specified value.
140-
*
141-
* @param balance the new balance of the account
142-
* @deprecated use {@link #setBalance(Number, Currency)}
143-
*/
144-
@Deprecated(forRemoval = true, since = "3.0.0")
145-
default void setBalance(Number balance) {
146-
setBalance(balance, getHolder().getDefaultCurrency());
147-
}
148-
14978
/**
15079
* Sets the balance of the account to the specified value in the given currency.
15180
*

0 commit comments

Comments
 (0)