package net.knarcraft.blacksmith.manager; import net.knarcraft.blacksmith.BlacksmithPlugin; import net.knarcraft.blacksmith.config.blacksmith.GlobalBlacksmithSettings; import net.knarcraft.blacksmith.util.ItemHelper; import net.milkbowl.vault.economy.Economy; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.ServicesManager; import org.jetbrains.annotations.NotNull; import java.util.logging.Level; import java.util.logging.Logger; /** * A class which deals with everything economy */ public class EconomyManager { private static Economy economy; private EconomyManager() { } /** * Sets up Vault economy support * * @param servicesManager
The services manager to use for finding a Vault provider
* @param loggerThe logger to use for logging
* @returnTrue if Vault was successfully set up
*/ public static boolean setUp(@NotNull ServicesManager servicesManager, @NotNull Logger logger) { //If already set up, there is nothing to do if (economy != null) { return true; } return setupVault(servicesManager, logger); } /** * Gets whether the given player cannot pay for re-forging their held item * * @param playerThe player holding an item
* @returnWhether the player cannot pay for the reforge
*/ public static boolean cannotPayForHeldItemReforge(@NotNull Player player) { return economy.getBalance(player) - getHeldItemCost(player) < 0; } /** * Gets whether the given player cannot pay for salvaging an item * * @param playerThe player holding an item
* @returnWhether the player cannot pay for the salvage
*/ public static boolean cannotPayForSalvage(@NotNull Player player) { return economy.getBalance(player) - BlacksmithPlugin.getInstance().getGlobalScrapperSettings().getCost() < 0; } /** * Gets the human-readable cost of the given player's held item * * @param playerThe player holding an item
* @returnThe formatted cost
*/ @NotNull public static String formatBlacksmithCost(@NotNull Player player) { double cost = getHeldItemCost(player); return economy.format(cost); } /** * Gets the human-readable cost of salvaging an item * * @returnThe formatted cost
*/ @NotNull public static String formatScrapperCost() { double cost = BlacksmithPlugin.getInstance().getGlobalScrapperSettings().getCost(); return economy.format(cost); } /** * Withdraws the reforging cost from the given player * *The cost is automatically calculated from the item in the player's main hand.
* * @param playerThe player to withdraw from
*/ public static void withdrawBlacksmith(@NotNull Player player) { double cost = getHeldItemCost(player); if (cost > 0) { economy.withdrawPlayer(player, cost); } } /** * Withdraws the salvaging cost from the given player * * @param playerThe player to withdraw from
*/ public static void withdrawScrapper(Player player) { double cost = BlacksmithPlugin.getInstance().getGlobalScrapperSettings().getCost(); if (cost > 0) { economy.withdrawPlayer(player, cost); } } /** * Gets the cost of the item in the given player's main hand * * @param playerThe player to calculate the cost for
* @returnThe calculated cost
*/ private static double getHeldItemCost(@NotNull Player player) { return getCost(player.getInventory().getItemInMainHand()); } /** * Gets the cost of repairing the given item * * @param itemThe item to be repaired
* @returnThe cost of the repair
*/ private static double getCost(@NotNull ItemStack item) { GlobalBlacksmithSettings globalBlacksmithSettings = BlacksmithPlugin.getInstance().getGlobalBlacksmithSettings(); Material material = item.getType(); //Calculate the base price double price = globalBlacksmithSettings.getBasePrice(material); // Adjust price based on durability double pricePerDurabilityPoint = globalBlacksmithSettings.getPricePerDurabilityPoint(material); if (globalBlacksmithSettings.getUseNaturalCost()) { //Cost increases with damage price += ((double) ItemHelper.getDamage(item)) * pricePerDurabilityPoint; } else { //Cost decreases with damage price += ((double) ItemHelper.getDurability(item)) * pricePerDurabilityPoint; } //Increase price for any enchantments price += getEnchantmentCost(item); //Override the cost for anvils if (ItemHelper.isAnvil(material, true)) { price = globalBlacksmithSettings.getAnvilCost(material); } return price; } /** * Gets the cost resulting from all enchantments on the given item * * @param itemThe item to calculate enchantment cost for
* @returnThe resulting enchantment cost
*/ private static double getEnchantmentCost(@NotNull ItemStack item) { GlobalBlacksmithSettings settings = BlacksmithPlugin.getInstance().getGlobalBlacksmithSettings(); double price = 0; for (Enchantment enchantment : item.getEnchantments().keySet()) { price += settings.getEnchantmentCost(enchantment) * item.getEnchantmentLevel(enchantment); } return price; } /** * Sets up Vault for economy * * @param servicesManagerThe services manager to use for finding a Vault provider
* @param loggerThe logger to use for logging
* @returnTrue if Vault was successfully set up
*/ private static boolean setupVault(@NotNull ServicesManager servicesManager, @NotNull Logger logger) { // Setup Vault RegisteredServiceProvider