/* * ReActions, Minecraft bukkit plugin * (c)2012-2017, fromgate, fromgate@gmail.com * http://dev.bukkit.org/server-mods/reactions/ * * This file is part of ReActions. * * ReActions is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * ReActions is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with ReActions. If not, see <http://www.gnorg/licenses/>. * */ package me.fromgate.reactions.externals; import com.greatmancode.craftconomy3.Cause; import com.greatmancode.craftconomy3.Common; import com.greatmancode.craftconomy3.account.Account; import com.greatmancode.craftconomy3.account.Balance; import com.greatmancode.craftconomy3.currency.Currency; import com.greatmancode.craftconomy3.tools.interfaces.Loader; import me.fromgate.reactions.util.message.M; import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; import java.util.HashMap; import java.util.Map; public class RACraftConomy { private static boolean enabled = false; private static Common craftconomy = null; public static void init() { enabled = isCraftconomyInstalled(); if (enabled) M.logMessage("CraftConomy connected"); } public static boolean isEnabled() { return enabled; } private static boolean isCraftconomyInstalled() { Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin("Craftconomy3"); try { if (plugin != null) { craftconomy = (Common) ((Loader) plugin).getCommon(); return (craftconomy != null); } } catch (Throwable ignored) { } return false; } public static double getBalance(String accountName, String currencyName, String worldName) { if (!enabled) return 0; Currency currency = craftconomy.getCurrencyManager().getCurrency(currencyName); if (currency == null) craftconomy.getCurrencyManager().getDefaultCurrency(); Account account = getAccount(accountName); String world = getWorldName(worldName); return account.getBalance(world, currency.getName()); } public static boolean hasAmount(String accountName, double amount, String currencyName, String worldName) { if (!enabled) return false; Account account = getAccount(accountName); if (account == null) return false; if (account.hasInfiniteMoney()) return true; Currency currency = craftconomy.getCurrencyManager().getCurrency(currencyName); if (currency == null) currency = craftconomy.getCurrencyManager().getDefaultCurrency(); return getAccount(accountName).hasEnough(amount, getWorldName(worldName), currency.getName()); } public static boolean creditAccount(String accountTo, String accountFrom, double amount, String currencyName, String worldName) { if (!enabled) return false; if (accountTo.isEmpty()) return false; Account account = getAccount(accountTo); if (account == null) return false; Currency currency = craftconomy.getCurrencyManager().getCurrency(currencyName); if (currency == null) currency = craftconomy.getCurrencyManager().getDefaultCurrency(); String world = getWorldName(worldName); if (!accountFrom.isEmpty() && !withdrawAccount(accountFrom, amount, currency.getName(), world)) return false; account.deposit(amount, world, currency.getName(), Cause.PLUGIN, null); return true; } public static boolean debitAccount(String accountFrom, String accountTo, double amount, String currencyName, String worldName) { if (accountFrom.isEmpty()) return false; if (!withdrawAccount(accountFrom, amount, currencyName, getWorldName(worldName))) return false; creditAccount(accountTo, "", amount, currencyName, getWorldName(worldName)); return true; } public static boolean debitAccount(String accountFrom, String accountTo, double amount, String currencyName) { return debitAccount(accountFrom, accountTo, amount, currencyName, getWorldName("default")); } public static boolean debitAccount(String accountFrom, String accountTo, double amount) { return debitAccount(accountFrom, accountTo, amount, getDefaultCurrency(), getWorldName("default")); } public static boolean withdrawAccount(String accountStr, double amount, String currencyName, String worldName) { if (!enabled) return false; if (accountStr.isEmpty()) return false; Account account = getAccount(accountStr); if (account == null) return false; if (account.hasInfiniteMoney()) return true; Currency currency = craftconomy.getCurrencyManager().getCurrency(currencyName); if (currency == null) currency = craftconomy.getCurrencyManager().getDefaultCurrency(); String world = getWorldName(worldName); if (!hasAmount(accountStr, amount, currency.getName(), world)) return false; account.withdraw(amount, world, currency.getName(), Cause.PLUGIN, null); return true; } public static String getWorldName(String worldName) { return craftconomy.getWorldGroupManager().getWorldGroupName(worldName); } public static String getDefaultCurrency() { return craftconomy.getCurrencyManager().getDefaultCurrency().getName(); } public static Map<String, String> getAllBalances(String accountStr) { String worldDef = Bukkit.getWorlds().get(0).getName(); Map<String, String> balances = new HashMap<>(); if (accountStr.isEmpty()) return balances; Account account = getAccount(accountStr); if (account == null) return balances; for (Balance balance : account.getAllBalance()) { String key = "money." + (balance.getWorld().equalsIgnoreCase(worldDef) ? "" : balance.getWorld() + ".") + balance.getCurrency().getName(); String amount = craftconomy.format(balance.getWorld(), balance.getCurrency(), balance.getBalance()); balances.put(key, amount); if (balance.getWorld().equals(worldDef) && balance.getCurrency().equals(craftconomy.getCurrencyManager().getDefaultCurrency())) balances.put("money", amount); } return balances; } public static String format(double amount, String currencyName, String worldName) { if (!enabled) return Double.toString(amount); Currency currency = currencyName.isEmpty() ? craftconomy.getCurrencyManager().getDefaultCurrency() : craftconomy.getCurrencyManager().getCurrency(currencyName); if (currency == null) return Double.toString(amount); return craftconomy.format(getWorldName(worldName), currency, amount); } private static Account getAccount(String name, boolean bank) { if (!enabled) return null; return craftconomy.getAccountManager().getAccount(name, bank); } private static Account getAccount(String name) { return name.startsWith("bank:") ? getAccount(name.split("bank:")[1], true) : getAccount(name, false); } }