Adds the classes necessary for the new scrapper Partly implements some scrapper functionality Restructures some classes to reduce code duplication Moves some classes to make some classes easier to find Adds a bunch of TODOs where things have an unfinished implementation
155 lines
5.4 KiB
Java
155 lines
5.4 KiB
Java
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 <p>The services manager to use for finding a Vault provider</p>
|
|
* @param logger <p>The logger to use for logging</p>
|
|
* @return <p>True if Vault was successfully set up</p>
|
|
*/
|
|
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 player <p>The player holding an item</p>
|
|
* @return <p>Whether the player cannot pay for the reforge</p>
|
|
*/
|
|
public static boolean cannotPayForHeldItemReforge(@NotNull Player player) {
|
|
return !(economy.getBalance(player) - getHeldItemCost(player) >= 0);
|
|
}
|
|
|
|
/**
|
|
* Gets the human-readable cost of the given player's held item
|
|
*
|
|
* @param player <p>The player holding an item</p>
|
|
* @return <p>The formatted cost</p>
|
|
*/
|
|
public static String formatCost(@NotNull Player player) {
|
|
double cost = getHeldItemCost(player);
|
|
return economy.format(cost);
|
|
}
|
|
|
|
/**
|
|
* Withdraws the reforging cost from the given player
|
|
*
|
|
* <p>The cost is automatically calculated from the item in the player's main hand.</p>
|
|
*
|
|
* @param player <p>The player to withdraw from</p>
|
|
*/
|
|
public static void withdraw(@NotNull Player player) {
|
|
economy.withdrawPlayer(player, getHeldItemCost(player));
|
|
}
|
|
|
|
/**
|
|
* Gets the cost of the item in the given player's main hand
|
|
*
|
|
* @param player <p>The player to calculate the cost for</p>
|
|
* @return <p>The calculated cost</p>
|
|
*/
|
|
private static double getHeldItemCost(@NotNull Player player) {
|
|
return getCost(player.getInventory().getItemInMainHand());
|
|
}
|
|
|
|
/**
|
|
* Gets the cost of repairing the given item
|
|
*
|
|
* @param item <p>The item to be repaired</p>
|
|
* @return <p>The cost of the repair</p>
|
|
*/
|
|
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 item <p>The item to calculate enchantment cost for</p>
|
|
* @return <p>The resulting enchantment cost</p>
|
|
*/
|
|
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 servicesManager <p>The services manager to use for finding a Vault provider</p>
|
|
* @param logger <p>The logger to use for logging</p>
|
|
* @return <p>True if Vault was successfully set up</p>
|
|
*/
|
|
private static boolean setupVault(@NotNull ServicesManager servicesManager, @NotNull Logger logger) {
|
|
// Setup Vault
|
|
RegisteredServiceProvider<Economy> economyProvider = servicesManager.getRegistration(Economy.class);
|
|
if (economyProvider != null) {
|
|
economy = economyProvider.getProvider();
|
|
return true;
|
|
} else {
|
|
// Disable if no economy plugin was found
|
|
logger.log(Level.SEVERE, "Failed to load an economy plugin. Disabling...");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
}
|