package com.craftaro.skyblock.bank; import com.craftaro.core.hooks.EconomyManager; import com.craftaro.core.hooks.economies.Economy; import com.craftaro.skyblock.SkyBlock; import com.craftaro.skyblock.config.FileManager; import com.craftaro.skyblock.island.Island; import com.craftaro.skyblock.playerdata.PlayerData; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; public class BankManager { private final HashMap> log; private final SkyBlock plugin; public FileConfiguration lang; public BankManager(SkyBlock plugin) { this.plugin = plugin; this.lang = this.plugin.getLanguage(); this.log = new HashMap<>(); loadTransactions(); } /*public List getTransactions(Player player) { if (log.containsKey(player.getUniqueId())&&log.get(player.getUniqueId())!=null&&!log.get(player.getUniqueId()).isEmpty()) { List lore = new ArrayList<>(); List transactions = log.get(player.getUniqueId()); int size = transactions.size()>10 ? 10 : transactions.size(); for (int i = 0;i lore = new ArrayList<>(); lore.add(lang.getString("Menu.Bank.Item.Log.Empty")); return lore; } }*/ public List getTransactions(Player player) { return getTransactions(player.getUniqueId()); } public List getTransactions(UUID uuid) { if (this.log.containsKey(uuid) && this.log.get(uuid) != null && !this.log.get(uuid).isEmpty()) { return new ArrayList<>(this.log.get(uuid)); } else { return new ArrayList<>(); } } public void addTransaction(Player p, Transaction transaction) { if (this.log.containsKey(p.getUniqueId())) { this.log.get(p.getUniqueId()).add(transaction); } else { List t = new ArrayList<>(); t.add(transaction); this.log.put(p.getUniqueId(), t); } } private void loadTransactions() { Map playerDataStorage = SkyBlock.getInstance().getPlayerDataManager().getPlayerData(); synchronized (playerDataStorage) { for (UUID uid : playerDataStorage.keySet()) { this.log.put(uid, playerDataStorage.get(uid).getTransactions()); } } } public List getBalanceLore(Player player) { Economy economy = this.plugin.getEconomyManager().getEconomy(); List result = new ArrayList<>(); result.add("Some error occurred while loading your balance!"); Island island = SkyBlock.getPlugin(SkyBlock.class).getIslandManager().getIsland(player); result.add("If this is null then its a easy to fix bug: " + island.toString()); if (island != null) { double accountBalance = 0; if (economy != null) { accountBalance = economy.getBalance(player); } result.clear(); result.add(player.getDisplayName() + "'s balance is " + EconomyManager.formatEconomy(accountBalance)); result.add(player.getDisplayName() + "'s island has " + EconomyManager.formatEconomy(island.getBankBalance())); } return result; } public List getTransactionList(Player player) { return getTransactionList(player.getUniqueId()); } public List getTransactionList(UUID uuid) { return this.log.get(uuid); } public BankResponse deposit(Player player, Island island, double amt, boolean admin) { Economy economy = this.plugin.getEconomyManager().getEconomy(); FileManager fileManager = this.plugin.getFileManager(); // Make sure the amount is positive if (amt <= 0) { return BankResponse.NEGATIVE_AMOUNT; } // If decimals aren't allowed, check for them if (!this.plugin.getConfiguration().getBoolean("Island.Bank.AllowDecimals")) { int intAmt = (int) amt; if (intAmt != amt) { return BankResponse.DECIMALS_NOT_ALLOWED; } } if (!admin) { if (economy == null || !economy.hasBalance(player, amt)) { if (economy == null) { this.plugin.getLogger().warning("No compatible economy plugin found – Please check your configuration"); } return BankResponse.NOT_ENOUGH_MONEY; } economy.withdrawBalance(player, amt); } island.addToBank(amt); Transaction t = new Transaction(); t.player = player; t.amount = (float) amt; t.timestamp = Calendar.getInstance().getTime(); t.action = Transaction.Type.DEPOSIT; t.visibility = admin ? Transaction.Visibility.ADMIN : Transaction.Visibility.USER; this.addTransaction(player, t); return BankResponse.SUCCESS; } public BankResponse withdraw(Player player, Island island, double amt, boolean admin) { Economy economy = this.plugin.getEconomyManager().getEconomy(); // Make sure the amount is positive if (amt <= 0) { return BankResponse.NEGATIVE_AMOUNT; } // If decimals aren't allowed, check for them if (!this.plugin.getConfiguration().getBoolean("Island.Bank.AllowDecimals")) { int intAmt = (int) amt; if (intAmt != amt) { return BankResponse.DECIMALS_NOT_ALLOWED; } } if (!admin) { if (economy == null || amt > island.getBankBalance()) { if (economy == null) { this.plugin.getLogger().warning("No compatible economy plugin found – Please check your configuration"); } return BankResponse.NOT_ENOUGH_MONEY; } economy.deposit(player, amt); } island.removeFromBank(amt); Transaction t = new Transaction(); t.player = player; t.amount = (float) amt; t.timestamp = Calendar.getInstance().getTime(); t.action = Transaction.Type.WITHDRAW; t.visibility = admin ? Transaction.Visibility.ADMIN : Transaction.Visibility.USER; this.addTransaction(player, t); return BankResponse.SUCCESS; } public enum BankResponse { NOT_ENOUGH_MONEY, DECIMALS_NOT_ALLOWED, NEGATIVE_AMOUNT, SUCCESS } }