From f8140ad3d6309a1b7e5bc755c9161406106805b8 Mon Sep 17 00:00:00 2001 From: OmerBenGera Date: Fri, 8 Apr 2022 15:11:44 +0300 Subject: [PATCH] Fixed detection of bank limits with bank interest not being correct (#1037) --- .../superiorskyblock/api/island/bank/IslandBank.java | 7 +++++++ .../bgsoftware/superiorskyblock/island/SIsland.java | 2 +- .../superiorskyblock/island/bank/SIslandBank.java | 11 +++++++++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/API/src/main/java/com/bgsoftware/superiorskyblock/api/island/bank/IslandBank.java b/API/src/main/java/com/bgsoftware/superiorskyblock/api/island/bank/IslandBank.java index 203a505c3..5cfa44fb3 100644 --- a/API/src/main/java/com/bgsoftware/superiorskyblock/api/island/bank/IslandBank.java +++ b/API/src/main/java/com/bgsoftware/superiorskyblock/api/island/bank/IslandBank.java @@ -38,6 +38,13 @@ public interface IslandBank { */ BankTransaction depositAdminMoney(CommandSender commandSender, BigDecimal amount); + /** + * Whether it's possible to deposit money into the bank without exceeding the bank limit. + * + * @param amount The amount of money to deposit. + */ + boolean canDepositMoney(BigDecimal amount); + /** * Withdraw money from the bank. * diff --git a/src/main/java/com/bgsoftware/superiorskyblock/island/SIsland.java b/src/main/java/com/bgsoftware/superiorskyblock/island/SIsland.java index 03cdd1e18..ebb86ab21 100644 --- a/src/main/java/com/bgsoftware/superiorskyblock/island/SIsland.java +++ b/src/main/java/com/bgsoftware/superiorskyblock/island/SIsland.java @@ -1691,7 +1691,7 @@ public boolean giveInterest(boolean checkOnlineOwner) { BigDecimal balanceToGive = balance.multiply(new BigDecimal(BuiltinModules.BANK.bankInterestPercentage / 100D)); // If the money that will be given exceeds limit, we want to give money later. - if (balanceToGive.add(balance).compareTo(getBankLimit()) > 0) { + if (!islandBank.canDepositMoney(balanceToGive)) { giveInterestFailed = true; return false; } diff --git a/src/main/java/com/bgsoftware/superiorskyblock/island/bank/SIslandBank.java b/src/main/java/com/bgsoftware/superiorskyblock/island/bank/SIslandBank.java index b4e65f7cc..b01152ccc 100644 --- a/src/main/java/com/bgsoftware/superiorskyblock/island/bank/SIslandBank.java +++ b/src/main/java/com/bgsoftware/superiorskyblock/island/bank/SIslandBank.java @@ -37,6 +37,7 @@ public final class SIslandBank implements IslandBank { private static final SuperiorSkyblockPlugin plugin = SuperiorSkyblockPlugin.getPlugin(); private static final BigDecimal MONEY_FAILURE = BigDecimal.valueOf(-1); + private static final BigDecimal NO_BANK_LIMIT = BigDecimal.valueOf(-1); private static final UUID CONSOLE_UUID = UUID.fromString("00000000-0000-0000-0000-000000000000"); private final AtomicReference balance = new AtomicReference<>(BigDecimal.ZERO); @@ -88,8 +89,7 @@ public BankTransaction depositMoney(SuperiorPlayer superiorPlayer, BigDecimal am failureReason = eventResult.getResult(); } else if (playerBalance.compareTo(amount) < 0) { failureReason = "Not enough money"; - } else if (island.getBankLimit().compareTo(BigDecimal.valueOf(-1)) > 0 && - this.balance.get().add(amount).compareTo(island.getBankLimit()) > 0) { + } else if (!canDepositMoney(amount)) { failureReason = "Exceed bank limit"; } else { EconomyProvider.EconomyResult result = plugin.getProviders() @@ -151,6 +151,13 @@ public BankTransaction depositAdminMoney(CommandSender commandSender, BigDecimal return bankTransaction; } + @Override + public boolean canDepositMoney(BigDecimal amount) { + Preconditions.checkNotNull(amount, "amount parameter cannot be null."); + return this.island.getBankLimit().compareTo(NO_BANK_LIMIT) <= 0 || + this.balance.get().add(amount).compareTo(this.island.getBankLimit()) > 0; + } + @Override public BankTransaction withdrawMoney(SuperiorPlayer superiorPlayer, BigDecimal amount, @Nullable List commandsToExecute) { Preconditions.checkNotNull(superiorPlayer, "superiorPlayer parameter cannot be null.");