refactor
This commit is contained in:
		@@ -1,5 +1,5 @@
 | 
			
		||||
name: Blacksmith
 | 
			
		||||
author: aPunch
 | 
			
		||||
version: 1.0
 | 
			
		||||
main: net.apunch.blacksmith.Blacksmith
 | 
			
		||||
main: net.apunch.blacksmith.BlacksmithPlugin
 | 
			
		||||
depend: [Citizens, Vault]
 | 
			
		||||
@@ -1,140 +1,241 @@
 | 
			
		||||
package net.apunch.blacksmith;
 | 
			
		||||
 | 
			
		||||
import java.util.logging.Level;
 | 
			
		||||
 | 
			
		||||
import net.apunch.blacksmith.util.Settings;
 | 
			
		||||
import net.apunch.blacksmith.util.Settings.Setting;
 | 
			
		||||
 | 
			
		||||
import net.citizensnpcs.api.CitizensAPI;
 | 
			
		||||
import net.citizensnpcs.api.util.DataKey;
 | 
			
		||||
import net.milkbowl.vault.economy.Economy;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Calendar;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Random;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
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.java.JavaPlugin;
 | 
			
		||||
 | 
			
		||||
public class Blacksmith extends JavaPlugin {
 | 
			
		||||
    private Settings config;
 | 
			
		||||
    private Economy economy;
 | 
			
		||||
import net.apunch.blacksmith.util.Settings.Setting;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onDisable() {
 | 
			
		||||
        config.save();
 | 
			
		||||
import net.citizensnpcs.api.npc.NPC;
 | 
			
		||||
import net.citizensnpcs.api.trait.Character;
 | 
			
		||||
import net.citizensnpcs.api.trait.SaveId;
 | 
			
		||||
import net.citizensnpcs.api.util.DataKey;
 | 
			
		||||
 | 
			
		||||
        getLogger().log(Level.INFO, " v" + getDescription().getVersion() + " disabled.");
 | 
			
		||||
@SaveId("blacksmith")
 | 
			
		||||
public class Blacksmith extends Character {
 | 
			
		||||
    private static final int[] enchantments = new int[Enchantment.values().length];
 | 
			
		||||
 | 
			
		||||
    private final BlacksmithPlugin plugin;
 | 
			
		||||
    private final List<Material> reforgeableItems = new ArrayList<Material>();
 | 
			
		||||
    private final Map<String, Calendar> cooldowns = new HashMap<String, Calendar>();
 | 
			
		||||
    private ReforgeSession session;
 | 
			
		||||
 | 
			
		||||
    // Defaults
 | 
			
		||||
    private String busyWithPlayerMsg = Setting.BUSY_WITH_PLAYER_MESSAGE.asString();
 | 
			
		||||
    private String busyReforgingMsg = Setting.BUSY_WITH_REFORGE_MESSAGE.asString();
 | 
			
		||||
    private String costMsg = Setting.COST_MESSAGE.asString();
 | 
			
		||||
    private String invalidItemMsg = Setting.INVALID_ITEM_MESSAGE.asString();
 | 
			
		||||
    private String startReforgeMsg = Setting.START_REFORGE_MESSAGE.asString();
 | 
			
		||||
    private String successMsg = Setting.SUCCESS_MESSAGE.asString();
 | 
			
		||||
    private String failMsg = Setting.FAIL_MESSAGE.asString();
 | 
			
		||||
    private String insufficientFundsMsg = Setting.INSUFFICIENT_FUNDS_MESSAGE.asString();
 | 
			
		||||
    private String cooldownUnexpiredMsg = Setting.COOLDOWN_UNEXPIRED_MESSAGE.asString();
 | 
			
		||||
    private int minReforgeDelay = Setting.MIN_REFORGE_DELAY.asInt();
 | 
			
		||||
    private int maxReforgeDelay = Setting.MAX_REFORGE_DELAY.asInt();
 | 
			
		||||
    private int reforgeCooldown = Setting.REFORGE_COOLDOWN.asInt();
 | 
			
		||||
    private int failChance = Setting.FAIL_CHANCE.asInt();
 | 
			
		||||
    private int maxEnchantments = Setting.MAX_ENCHANTMENTS.asInt();
 | 
			
		||||
    private boolean dropItem = Setting.DROP_ITEM.asBoolean();
 | 
			
		||||
 | 
			
		||||
    public Blacksmith() {
 | 
			
		||||
        plugin = (BlacksmithPlugin) Bukkit.getServer().getPluginManager().getPlugin("Blacksmith");
 | 
			
		||||
        int i = 0;
 | 
			
		||||
        for (Enchantment enchantment : Enchantment.values())
 | 
			
		||||
            enchantments[i++] = enchantment.getId();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onEnable() {
 | 
			
		||||
        config = new Settings(this);
 | 
			
		||||
        config.load();
 | 
			
		||||
    public void load(DataKey key) {
 | 
			
		||||
        for (DataKey sub : key.getRelative("reforgeable-items").getIntegerSubKeys())
 | 
			
		||||
            if (Material.getMaterial(sub.getString("").toUpperCase().replace('-', '_')) != null)
 | 
			
		||||
                reforgeableItems.add(Material.getMaterial(sub.getString("").toUpperCase().replace('-', '_')));
 | 
			
		||||
 | 
			
		||||
        // Setup Vault
 | 
			
		||||
        RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(
 | 
			
		||||
                Economy.class);
 | 
			
		||||
        if (economyProvider != null)
 | 
			
		||||
            economy = economyProvider.getProvider();
 | 
			
		||||
 | 
			
		||||
        CitizensAPI.getCharacterManager().register(BlacksmithCharacter.class);
 | 
			
		||||
 | 
			
		||||
        getLogger().log(Level.INFO, " v" + getDescription().getVersion() + " enabled.");
 | 
			
		||||
        // Override defaults if they exist
 | 
			
		||||
        if (key.keyExists("messages.busy-with-player"))
 | 
			
		||||
            busyWithPlayerMsg = key.getString("messages.busy-with-player");
 | 
			
		||||
        if (key.keyExists("messages.busy-with-reforge"))
 | 
			
		||||
            busyReforgingMsg = key.getString("messages.busy-with-reforge");
 | 
			
		||||
        if (key.keyExists("messages.cost"))
 | 
			
		||||
            costMsg = key.getString("messages.cost");
 | 
			
		||||
        if (key.keyExists("messages.invalid-item"))
 | 
			
		||||
            invalidItemMsg = key.getString("messages.invalid-item");
 | 
			
		||||
        if (key.keyExists("messages.start-reforge"))
 | 
			
		||||
            startReforgeMsg = key.getString("messages.start-reforge");
 | 
			
		||||
        if (key.keyExists("messages.successful-reforge"))
 | 
			
		||||
            successMsg = key.getString("messages.successful-reforge");
 | 
			
		||||
        if (key.keyExists("messages.fail-reforge"))
 | 
			
		||||
            failMsg = key.getString("messages.fail-reforge");
 | 
			
		||||
        if (key.keyExists("messages.insufficient-funds"))
 | 
			
		||||
            insufficientFundsMsg = key.getString("messages.insufficient-funds");
 | 
			
		||||
        if (key.keyExists("messages.cooldown-not-expired"))
 | 
			
		||||
            cooldownUnexpiredMsg = key.getString("messages.cooldown-not-expired");
 | 
			
		||||
        if (key.keyExists("delays-in-seconds.minimum"))
 | 
			
		||||
            minReforgeDelay = key.getInt("delays-in-seconds.minimum");
 | 
			
		||||
        if (key.keyExists("delays-in-seconds.maximum"))
 | 
			
		||||
            maxReforgeDelay = key.getInt("delays-in-seconds.maximum");
 | 
			
		||||
        if (key.keyExists("delays-in-seconds.reforge-cooldown"))
 | 
			
		||||
            reforgeCooldown = key.getInt("delays-in-seconds.reforge-cooldown");
 | 
			
		||||
        if (key.keyExists("percent-chance-to-fail-reforge"))
 | 
			
		||||
            failChance = key.getInt("percent-chance-to-fail-reforge");
 | 
			
		||||
        if (key.keyExists("maximum-enchantments"))
 | 
			
		||||
            maxEnchantments = key.getInt("maximum-enchantments");
 | 
			
		||||
        if (key.keyExists("drop-item"))
 | 
			
		||||
            dropItem = key.getBoolean("drop-item");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isTool(ItemStack item) {
 | 
			
		||||
        switch (item.getType()) {
 | 
			
		||||
        case WOOD_PICKAXE:
 | 
			
		||||
        case WOOD_SPADE:
 | 
			
		||||
        case WOOD_HOE:
 | 
			
		||||
        case WOOD_SWORD:
 | 
			
		||||
        case WOOD_AXE:
 | 
			
		||||
        case STONE_PICKAXE:
 | 
			
		||||
        case STONE_SPADE:
 | 
			
		||||
        case STONE_HOE:
 | 
			
		||||
        case STONE_SWORD:
 | 
			
		||||
        case STONE_AXE:
 | 
			
		||||
        case GOLD_PICKAXE:
 | 
			
		||||
        case GOLD_SPADE:
 | 
			
		||||
        case GOLD_HOE:
 | 
			
		||||
        case GOLD_SWORD:
 | 
			
		||||
        case GOLD_AXE:
 | 
			
		||||
        case IRON_PICKAXE:
 | 
			
		||||
        case IRON_SPADE:
 | 
			
		||||
        case IRON_HOE:
 | 
			
		||||
        case IRON_SWORD:
 | 
			
		||||
        case IRON_AXE:
 | 
			
		||||
        case DIAMOND_PICKAXE:
 | 
			
		||||
        case DIAMOND_SPADE:
 | 
			
		||||
        case DIAMOND_HOE:
 | 
			
		||||
        case DIAMOND_SWORD:
 | 
			
		||||
        case DIAMOND_AXE:
 | 
			
		||||
        case BOW:
 | 
			
		||||
        case FLINT_AND_STEEL:
 | 
			
		||||
        case FISHING_ROD:
 | 
			
		||||
        case SHEARS:
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onRightClick(NPC npc, Player player) {
 | 
			
		||||
        if (!player.hasPermission("blacksmith.reforge"))
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        if (cooldowns.get(player.getName()) != null) {
 | 
			
		||||
            if (!Calendar.getInstance().after(cooldowns.get(player.getName()))) {
 | 
			
		||||
                npc.chat(player, cooldownUnexpiredMsg);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            cooldowns.remove(player.getName());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ItemStack hand = player.getItemInHand();
 | 
			
		||||
        if (session != null) {
 | 
			
		||||
            if (!session.isInSession(player)) {
 | 
			
		||||
                npc.chat(busyWithPlayerMsg);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (session.isRunning()) {
 | 
			
		||||
                npc.chat(player, busyReforgingMsg);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (session.handleClick())
 | 
			
		||||
                session = null;
 | 
			
		||||
            else
 | 
			
		||||
                reforge(npc, player);
 | 
			
		||||
        } else {
 | 
			
		||||
            if ((!plugin.isTool(hand) && !plugin.isArmor(hand))
 | 
			
		||||
                    || (!reforgeableItems.isEmpty() && !reforgeableItems.contains(hand.getType()))) {
 | 
			
		||||
                npc.chat(player, invalidItemMsg);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            session = new ReforgeSession(player, npc);
 | 
			
		||||
            npc.chat(player, costMsg.replace("<price>", plugin.formatCost(player)).replace("<item>",
 | 
			
		||||
                    hand.getType().name().toLowerCase().replace('_', ' ')));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void save(DataKey key) {
 | 
			
		||||
        for (int i = 0; i < reforgeableItems.size(); i++)
 | 
			
		||||
            key.getRelative("reforgeable-items").setString(String.valueOf(i),
 | 
			
		||||
                    reforgeableItems.get(i).name().toLowerCase().replace('_', '-'));
 | 
			
		||||
 | 
			
		||||
        key.setString("messages.busy-with-player", busyWithPlayerMsg);
 | 
			
		||||
        key.setString("messages.busy-with-reforge", busyReforgingMsg);
 | 
			
		||||
        key.setString("messages.cost", costMsg);
 | 
			
		||||
        key.setString("messages.invalid-item", invalidItemMsg);
 | 
			
		||||
        key.setString("messages.start-reforge", startReforgeMsg);
 | 
			
		||||
        key.setString("messages.successful-reforge", successMsg);
 | 
			
		||||
        key.setString("messages.fail-reforge", failMsg);
 | 
			
		||||
        key.setString("messages.insufficient-funds", insufficientFundsMsg);
 | 
			
		||||
        key.setString("messages.cooldown-not-expired", cooldownUnexpiredMsg);
 | 
			
		||||
        key.setInt("delays-in-seconds.minimum", minReforgeDelay);
 | 
			
		||||
        key.setInt("delays-in-seconds.maximum", maxReforgeDelay);
 | 
			
		||||
        key.setInt("delays-in-seconds.reforge-cooldown", reforgeCooldown);
 | 
			
		||||
        key.setInt("percent-chance-to-fail-reforge", failChance);
 | 
			
		||||
        key.setInt("maximum-enchantments", maxEnchantments);
 | 
			
		||||
        key.setBoolean("drop-item", dropItem);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getInsufficientFundsMessage() {
 | 
			
		||||
        return insufficientFundsMsg;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void reforge(NPC npc, Player player) {
 | 
			
		||||
        npc.chat(player, startReforgeMsg);
 | 
			
		||||
        plugin.withdraw(player);
 | 
			
		||||
        session.setTask(plugin.getServer().getScheduler().scheduleAsyncDelayedTask(plugin,
 | 
			
		||||
                new ReforgeTask(npc, player), (new Random().nextInt(maxReforgeDelay) + minReforgeDelay) * 20));
 | 
			
		||||
        if (npc.getBukkitEntity() instanceof Player)
 | 
			
		||||
            ((Player) npc.getBukkitEntity()).setItemInHand(player.getItemInHand());
 | 
			
		||||
        player.setItemInHand(null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private class ReforgeTask implements Runnable {
 | 
			
		||||
        private final NPC npc;
 | 
			
		||||
        private final Player player;
 | 
			
		||||
        private final ItemStack reforge;
 | 
			
		||||
 | 
			
		||||
        private ReforgeTask(NPC npc, Player player) {
 | 
			
		||||
            this.npc = npc;
 | 
			
		||||
            this.player = player;
 | 
			
		||||
            reforge = player.getItemInHand();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        @Override
 | 
			
		||||
        public void run() {
 | 
			
		||||
            npc.chat(player, reforgeItemInHand() ? successMsg : failMsg);
 | 
			
		||||
            if (npc.getBukkitEntity() instanceof Player)
 | 
			
		||||
                ((Player) npc.getBukkitEntity()).setItemInHand(null);
 | 
			
		||||
            if (dropItem)
 | 
			
		||||
                player.getWorld().dropItemNaturally(npc.getBukkitEntity().getLocation(), reforge);
 | 
			
		||||
            else {
 | 
			
		||||
                for (ItemStack stack : player.getInventory().addItem(reforge).values())
 | 
			
		||||
                    player.getWorld().dropItemNaturally(npc.getBukkitEntity().getLocation(), stack);
 | 
			
		||||
            }
 | 
			
		||||
            session = null;
 | 
			
		||||
            // Start cooldown
 | 
			
		||||
            Calendar wait = Calendar.getInstance();
 | 
			
		||||
            wait.add(Calendar.SECOND, reforgeCooldown);
 | 
			
		||||
            cooldowns.put(player.getName(), wait);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private boolean reforgeItemInHand() {
 | 
			
		||||
            Random random = new Random();
 | 
			
		||||
            if (random.nextInt(100) < failChance) {
 | 
			
		||||
                for (Enchantment enchantment : reforge.getEnchantments().keySet()) {
 | 
			
		||||
                    // Remove or downgrade enchantments
 | 
			
		||||
                    if (random.nextBoolean())
 | 
			
		||||
                        reforge.removeEnchantment(enchantment);
 | 
			
		||||
                    else {
 | 
			
		||||
                        if (reforge.getEnchantmentLevel(enchantment) > 1) {
 | 
			
		||||
                            reforge.removeEnchantment(enchantment);
 | 
			
		||||
                            reforge.addEnchantment(enchantment, 1);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                // Damage the item
 | 
			
		||||
                short durability = (short) (reforge.getDurability() + reforge.getDurability() * random.nextInt(8));
 | 
			
		||||
                short maxDurability = reforge.getType().getMaxDurability();
 | 
			
		||||
                if (durability <= 0)
 | 
			
		||||
                    durability = (short) (maxDurability / 3);
 | 
			
		||||
                else if (reforge.getDurability() + durability > maxDurability)
 | 
			
		||||
                    durability = (short) (maxDurability - random.nextInt(maxDurability - 25));
 | 
			
		||||
                reforge.setDurability(durability);
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
            // Add random enchantments
 | 
			
		||||
            int chance = 10;
 | 
			
		||||
            if (reforge.getDurability() == 0)
 | 
			
		||||
                chance *= 4;
 | 
			
		||||
            else
 | 
			
		||||
                reforge.setDurability((short) 0);
 | 
			
		||||
            for (int i = 0; i < chance; i++) {
 | 
			
		||||
                if (reforge.getEnchantments().keySet().size() == maxEnchantments)
 | 
			
		||||
                    break;
 | 
			
		||||
                Enchantment enchantment = Enchantment.getById(enchantments[random.nextInt(enchantments.length)]);
 | 
			
		||||
                if (enchantment.canEnchantItem(reforge))
 | 
			
		||||
                    reforge.addEnchantment(enchantment, random.nextInt(enchantment.getMaxLevel()) + 1);
 | 
			
		||||
            }
 | 
			
		||||
            return true;
 | 
			
		||||
        default:
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isArmor(ItemStack item) {
 | 
			
		||||
        switch (item.getType()) {
 | 
			
		||||
        case LEATHER_HELMET:
 | 
			
		||||
        case LEATHER_CHESTPLATE:
 | 
			
		||||
        case LEATHER_LEGGINGS:
 | 
			
		||||
        case LEATHER_BOOTS:
 | 
			
		||||
        case CHAINMAIL_HELMET:
 | 
			
		||||
        case CHAINMAIL_CHESTPLATE:
 | 
			
		||||
        case CHAINMAIL_LEGGINGS:
 | 
			
		||||
        case CHAINMAIL_BOOTS:
 | 
			
		||||
        case GOLD_HELMET:
 | 
			
		||||
        case GOLD_CHESTPLATE:
 | 
			
		||||
        case GOLD_LEGGINGS:
 | 
			
		||||
        case GOLD_BOOTS:
 | 
			
		||||
        case IRON_HELMET:
 | 
			
		||||
        case IRON_CHESTPLATE:
 | 
			
		||||
        case IRON_LEGGINGS:
 | 
			
		||||
        case IRON_BOOTS:
 | 
			
		||||
        case DIAMOND_HELMET:
 | 
			
		||||
        case DIAMOND_CHESTPLATE:
 | 
			
		||||
        case DIAMOND_LEGGINGS:
 | 
			
		||||
        case DIAMOND_BOOTS:
 | 
			
		||||
            return true;
 | 
			
		||||
        default:
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean doesPlayerHaveEnough(Player player) {
 | 
			
		||||
        return economy.getBalance(player.getName()) - getCost(player.getItemInHand()) >= 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String formatCost(Player player) {
 | 
			
		||||
        return economy.format(getCost(player.getItemInHand()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void withdraw(Player player) {
 | 
			
		||||
        economy.withdrawPlayer(player.getName(), getCost(player.getItemInHand()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private double getCost(ItemStack item) {
 | 
			
		||||
        DataKey root = config.getConfig().getKey("");
 | 
			
		||||
        double price = Setting.BASE_PRICE.asDouble();
 | 
			
		||||
        if (root.keyExists("base-prices." + item.getType().name().toLowerCase().replace('_', '-')))
 | 
			
		||||
            price = root.getDouble("base-prices." + item.getType().name().toLowerCase().replace('_', '-'));
 | 
			
		||||
 | 
			
		||||
        // Adjust price based on durability and enchantments
 | 
			
		||||
        price += (item.getType().getMaxDurability() - item.getDurability());
 | 
			
		||||
 | 
			
		||||
        double enchantmentModifier = Setting.ENCHANTMENT_MODIFIER.asDouble();
 | 
			
		||||
        for (Enchantment enchantment : item.getEnchantments().keySet()) {
 | 
			
		||||
            if (root.keyExists("enchantment-modifiers." + enchantment.getName().toLowerCase().replace('_', '-')))
 | 
			
		||||
                enchantmentModifier = root.getDouble("enchantment-modifiers."
 | 
			
		||||
                        + enchantment.getName().toLowerCase().replace('_', '-'));
 | 
			
		||||
            price += enchantmentModifier * item.getEnchantmentLevel(enchantment);
 | 
			
		||||
        }
 | 
			
		||||
        return price;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,241 +0,0 @@
 | 
			
		||||
package net.apunch.blacksmith;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Calendar;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Random;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
import org.bukkit.enchantments.Enchantment;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
 | 
			
		||||
import net.apunch.blacksmith.util.Settings.Setting;
 | 
			
		||||
 | 
			
		||||
import net.citizensnpcs.api.npc.NPC;
 | 
			
		||||
import net.citizensnpcs.api.trait.Character;
 | 
			
		||||
import net.citizensnpcs.api.trait.SaveId;
 | 
			
		||||
import net.citizensnpcs.api.util.DataKey;
 | 
			
		||||
 | 
			
		||||
@SaveId("blacksmith")
 | 
			
		||||
public class BlacksmithCharacter extends Character {
 | 
			
		||||
    private static final int[] enchantments = new int[Enchantment.values().length];
 | 
			
		||||
 | 
			
		||||
    private final Blacksmith plugin;
 | 
			
		||||
    private final List<Material> reforgeableItems = new ArrayList<Material>();
 | 
			
		||||
    private final Map<String, Calendar> cooldowns = new HashMap<String, Calendar>();
 | 
			
		||||
    private ReforgeSession session;
 | 
			
		||||
 | 
			
		||||
    // Defaults
 | 
			
		||||
    private String busyWithPlayerMsg = Setting.BUSY_WITH_PLAYER_MESSAGE.asString();
 | 
			
		||||
    private String busyReforgingMsg = Setting.BUSY_WITH_REFORGE_MESSAGE.asString();
 | 
			
		||||
    private String costMsg = Setting.COST_MESSAGE.asString();
 | 
			
		||||
    private String invalidItemMsg = Setting.INVALID_ITEM_MESSAGE.asString();
 | 
			
		||||
    private String startReforgeMsg = Setting.START_REFORGE_MESSAGE.asString();
 | 
			
		||||
    private String successMsg = Setting.SUCCESS_MESSAGE.asString();
 | 
			
		||||
    private String failMsg = Setting.FAIL_MESSAGE.asString();
 | 
			
		||||
    private String insufficientFundsMsg = Setting.INSUFFICIENT_FUNDS_MESSAGE.asString();
 | 
			
		||||
    private String cooldownUnexpiredMsg = Setting.COOLDOWN_UNEXPIRED_MESSAGE.asString();
 | 
			
		||||
    private int minReforgeDelay = Setting.MIN_REFORGE_DELAY.asInt();
 | 
			
		||||
    private int maxReforgeDelay = Setting.MAX_REFORGE_DELAY.asInt();
 | 
			
		||||
    private int reforgeCooldown = Setting.REFORGE_COOLDOWN.asInt();
 | 
			
		||||
    private int failChance = Setting.FAIL_CHANCE.asInt();
 | 
			
		||||
    private int maxEnchantments = Setting.MAX_ENCHANTMENTS.asInt();
 | 
			
		||||
    private boolean dropItem = Setting.DROP_ITEM.asBoolean();
 | 
			
		||||
 | 
			
		||||
    public BlacksmithCharacter() {
 | 
			
		||||
        plugin = (Blacksmith) Bukkit.getServer().getPluginManager().getPlugin("Blacksmith");
 | 
			
		||||
        int i = 0;
 | 
			
		||||
        for (Enchantment enchantment : Enchantment.values())
 | 
			
		||||
            enchantments[i++] = enchantment.getId();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void load(DataKey key) {
 | 
			
		||||
        for (DataKey sub : key.getRelative("reforgeable-items").getIntegerSubKeys())
 | 
			
		||||
            if (Material.getMaterial(sub.getString("").toUpperCase().replace('-', '_')) != null)
 | 
			
		||||
                reforgeableItems.add(Material.getMaterial(sub.getString("").toUpperCase().replace('-', '_')));
 | 
			
		||||
 | 
			
		||||
        // Override defaults if they exist
 | 
			
		||||
        if (key.keyExists("messages.busy-with-player"))
 | 
			
		||||
            busyWithPlayerMsg = key.getString("messages.busy-with-player");
 | 
			
		||||
        if (key.keyExists("messages.busy-with-reforge"))
 | 
			
		||||
            busyReforgingMsg = key.getString("messages.busy-with-reforge");
 | 
			
		||||
        if (key.keyExists("messages.cost"))
 | 
			
		||||
            costMsg = key.getString("messages.cost");
 | 
			
		||||
        if (key.keyExists("messages.invalid-item"))
 | 
			
		||||
            invalidItemMsg = key.getString("messages.invalid-item");
 | 
			
		||||
        if (key.keyExists("messages.start-reforge"))
 | 
			
		||||
            startReforgeMsg = key.getString("messages.start-reforge");
 | 
			
		||||
        if (key.keyExists("messages.successful-reforge"))
 | 
			
		||||
            successMsg = key.getString("messages.successful-reforge");
 | 
			
		||||
        if (key.keyExists("messages.fail-reforge"))
 | 
			
		||||
            failMsg = key.getString("messages.fail-reforge");
 | 
			
		||||
        if (key.keyExists("messages.insufficient-funds"))
 | 
			
		||||
            insufficientFundsMsg = key.getString("messages.insufficient-funds");
 | 
			
		||||
        if (key.keyExists("messages.cooldown-not-expired"))
 | 
			
		||||
            cooldownUnexpiredMsg = key.getString("messages.cooldown-not-expired");
 | 
			
		||||
        if (key.keyExists("delays-in-seconds.minimum"))
 | 
			
		||||
            minReforgeDelay = key.getInt("delays-in-seconds.minimum");
 | 
			
		||||
        if (key.keyExists("delays-in-seconds.maximum"))
 | 
			
		||||
            maxReforgeDelay = key.getInt("delays-in-seconds.maximum");
 | 
			
		||||
        if (key.keyExists("delays-in-seconds.reforge-cooldown"))
 | 
			
		||||
            reforgeCooldown = key.getInt("delays-in-seconds.reforge-cooldown");
 | 
			
		||||
        if (key.keyExists("percent-chance-to-fail-reforge"))
 | 
			
		||||
            failChance = key.getInt("percent-chance-to-fail-reforge");
 | 
			
		||||
        if (key.keyExists("maximum-enchantments"))
 | 
			
		||||
            maxEnchantments = key.getInt("maximum-enchantments");
 | 
			
		||||
        if (key.keyExists("drop-item"))
 | 
			
		||||
            dropItem = key.getBoolean("drop-item");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onRightClick(NPC npc, Player player) {
 | 
			
		||||
        if (!player.hasPermission("blacksmith.reforge"))
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        if (cooldowns.get(player.getName()) != null) {
 | 
			
		||||
            if (!Calendar.getInstance().after(cooldowns.get(player.getName()))) {
 | 
			
		||||
                npc.chat(player, cooldownUnexpiredMsg);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            cooldowns.remove(player.getName());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ItemStack hand = player.getItemInHand();
 | 
			
		||||
        if (session != null) {
 | 
			
		||||
            if (!session.isInSession(player)) {
 | 
			
		||||
                npc.chat(busyWithPlayerMsg);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (session.isRunning()) {
 | 
			
		||||
                npc.chat(player, busyReforgingMsg);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (session.handleClick())
 | 
			
		||||
                session = null;
 | 
			
		||||
            else
 | 
			
		||||
                reforge(npc, player);
 | 
			
		||||
        } else {
 | 
			
		||||
            if ((!plugin.isTool(hand) && !plugin.isArmor(hand))
 | 
			
		||||
                    || (!reforgeableItems.isEmpty() && !reforgeableItems.contains(hand.getType()))) {
 | 
			
		||||
                npc.chat(player, invalidItemMsg);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            session = new ReforgeSession(player, npc);
 | 
			
		||||
            npc.chat(player, costMsg.replace("<price>", plugin.formatCost(player)).replace("<item>",
 | 
			
		||||
                    hand.getType().name().toLowerCase().replace('_', ' ')));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void save(DataKey key) {
 | 
			
		||||
        for (int i = 0; i < reforgeableItems.size(); i++)
 | 
			
		||||
            key.getRelative("reforgeable-items").setString(String.valueOf(i),
 | 
			
		||||
                    reforgeableItems.get(i).name().toLowerCase().replace('_', '-'));
 | 
			
		||||
 | 
			
		||||
        key.setString("messages.busy-with-player", busyWithPlayerMsg);
 | 
			
		||||
        key.setString("messages.busy-with-reforge", busyReforgingMsg);
 | 
			
		||||
        key.setString("messages.cost", costMsg);
 | 
			
		||||
        key.setString("messages.invalid-item", invalidItemMsg);
 | 
			
		||||
        key.setString("messages.start-reforge", startReforgeMsg);
 | 
			
		||||
        key.setString("messages.successful-reforge", successMsg);
 | 
			
		||||
        key.setString("messages.fail-reforge", failMsg);
 | 
			
		||||
        key.setString("messages.insufficient-funds", insufficientFundsMsg);
 | 
			
		||||
        key.setString("messages.cooldown-not-expired", cooldownUnexpiredMsg);
 | 
			
		||||
        key.setInt("delays-in-seconds.minimum", minReforgeDelay);
 | 
			
		||||
        key.setInt("delays-in-seconds.maximum", maxReforgeDelay);
 | 
			
		||||
        key.setInt("delays-in-seconds.reforge-cooldown", reforgeCooldown);
 | 
			
		||||
        key.setInt("percent-chance-to-fail-reforge", failChance);
 | 
			
		||||
        key.setInt("maximum-enchantments", maxEnchantments);
 | 
			
		||||
        key.setBoolean("drop-item", dropItem);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getInsufficientFundsMessage() {
 | 
			
		||||
        return insufficientFundsMsg;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void reforge(NPC npc, Player player) {
 | 
			
		||||
        npc.chat(player, startReforgeMsg);
 | 
			
		||||
        plugin.withdraw(player);
 | 
			
		||||
        session.setTask(plugin.getServer().getScheduler().scheduleAsyncDelayedTask(plugin,
 | 
			
		||||
                new ReforgeTask(npc, player), (new Random().nextInt(maxReforgeDelay) + minReforgeDelay) * 20));
 | 
			
		||||
        if (npc.getBukkitEntity() instanceof Player)
 | 
			
		||||
            ((Player) npc.getBukkitEntity()).setItemInHand(player.getItemInHand());
 | 
			
		||||
        player.setItemInHand(null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private class ReforgeTask implements Runnable {
 | 
			
		||||
        private final NPC npc;
 | 
			
		||||
        private final Player player;
 | 
			
		||||
        private final ItemStack reforge;
 | 
			
		||||
 | 
			
		||||
        private ReforgeTask(NPC npc, Player player) {
 | 
			
		||||
            this.npc = npc;
 | 
			
		||||
            this.player = player;
 | 
			
		||||
            reforge = player.getItemInHand();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        @Override
 | 
			
		||||
        public void run() {
 | 
			
		||||
            npc.chat(player, reforgeItemInHand() ? successMsg : failMsg);
 | 
			
		||||
            if (npc.getBukkitEntity() instanceof Player)
 | 
			
		||||
                ((Player) npc.getBukkitEntity()).setItemInHand(null);
 | 
			
		||||
            if (dropItem)
 | 
			
		||||
                player.getWorld().dropItemNaturally(npc.getBukkitEntity().getLocation(), reforge);
 | 
			
		||||
            else {
 | 
			
		||||
                for (ItemStack stack : player.getInventory().addItem(reforge).values())
 | 
			
		||||
                    player.getWorld().dropItemNaturally(npc.getBukkitEntity().getLocation(), stack);
 | 
			
		||||
            }
 | 
			
		||||
            session = null;
 | 
			
		||||
            // Start cooldown
 | 
			
		||||
            Calendar wait = Calendar.getInstance();
 | 
			
		||||
            wait.add(Calendar.SECOND, reforgeCooldown);
 | 
			
		||||
            cooldowns.put(player.getName(), wait);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private boolean reforgeItemInHand() {
 | 
			
		||||
            Random random = new Random();
 | 
			
		||||
            if (random.nextInt(100) < failChance) {
 | 
			
		||||
                for (Enchantment enchantment : reforge.getEnchantments().keySet()) {
 | 
			
		||||
                    // Remove or downgrade enchantments
 | 
			
		||||
                    if (random.nextBoolean())
 | 
			
		||||
                        reforge.removeEnchantment(enchantment);
 | 
			
		||||
                    else {
 | 
			
		||||
                        if (reforge.getEnchantmentLevel(enchantment) > 1) {
 | 
			
		||||
                            reforge.removeEnchantment(enchantment);
 | 
			
		||||
                            reforge.addEnchantment(enchantment, 1);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                // Damage the item
 | 
			
		||||
                short durability = (short) (reforge.getDurability() + reforge.getDurability() * random.nextInt(8));
 | 
			
		||||
                short maxDurability = reforge.getType().getMaxDurability();
 | 
			
		||||
                if (durability <= 0)
 | 
			
		||||
                    durability = (short) (maxDurability / 3);
 | 
			
		||||
                else if (reforge.getDurability() + durability > maxDurability)
 | 
			
		||||
                    durability = (short) (maxDurability - random.nextInt(maxDurability - 25));
 | 
			
		||||
                reforge.setDurability(durability);
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
            // Add random enchantments
 | 
			
		||||
            int chance = 10;
 | 
			
		||||
            if (reforge.getDurability() == 0)
 | 
			
		||||
                chance *= 4;
 | 
			
		||||
            else
 | 
			
		||||
                reforge.setDurability((short) 0);
 | 
			
		||||
            for (int i = 0; i < chance; i++) {
 | 
			
		||||
                if (reforge.getEnchantments().keySet().size() == maxEnchantments)
 | 
			
		||||
                    break;
 | 
			
		||||
                Enchantment enchantment = Enchantment.getById(enchantments[random.nextInt(enchantments.length)]);
 | 
			
		||||
                if (enchantment.canEnchantItem(reforge))
 | 
			
		||||
                    reforge.addEnchantment(enchantment, random.nextInt(enchantment.getMaxLevel()) + 1);
 | 
			
		||||
            }
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										140
									
								
								src/net/apunch/blacksmith/BlacksmithPlugin.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										140
									
								
								src/net/apunch/blacksmith/BlacksmithPlugin.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,140 @@
 | 
			
		||||
package net.apunch.blacksmith;
 | 
			
		||||
 | 
			
		||||
import java.util.logging.Level;
 | 
			
		||||
 | 
			
		||||
import net.apunch.blacksmith.util.Settings;
 | 
			
		||||
import net.apunch.blacksmith.util.Settings.Setting;
 | 
			
		||||
 | 
			
		||||
import net.citizensnpcs.api.CitizensAPI;
 | 
			
		||||
import net.citizensnpcs.api.util.DataKey;
 | 
			
		||||
import net.milkbowl.vault.economy.Economy;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.enchantments.Enchantment;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
import org.bukkit.plugin.RegisteredServiceProvider;
 | 
			
		||||
import org.bukkit.plugin.java.JavaPlugin;
 | 
			
		||||
 | 
			
		||||
public class BlacksmithPlugin extends JavaPlugin {
 | 
			
		||||
    private Settings config;
 | 
			
		||||
    private Economy economy;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onDisable() {
 | 
			
		||||
        config.save();
 | 
			
		||||
 | 
			
		||||
        getLogger().log(Level.INFO, " v" + getDescription().getVersion() + " disabled.");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onEnable() {
 | 
			
		||||
        config = new Settings(this);
 | 
			
		||||
        config.load();
 | 
			
		||||
 | 
			
		||||
        // Setup Vault
 | 
			
		||||
        RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(
 | 
			
		||||
                Economy.class);
 | 
			
		||||
        if (economyProvider != null)
 | 
			
		||||
            economy = economyProvider.getProvider();
 | 
			
		||||
 | 
			
		||||
        CitizensAPI.getCharacterManager().register(Blacksmith.class);
 | 
			
		||||
 | 
			
		||||
        getLogger().log(Level.INFO, " v" + getDescription().getVersion() + " enabled.");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isTool(ItemStack item) {
 | 
			
		||||
        switch (item.getType()) {
 | 
			
		||||
        case WOOD_PICKAXE:
 | 
			
		||||
        case WOOD_SPADE:
 | 
			
		||||
        case WOOD_HOE:
 | 
			
		||||
        case WOOD_SWORD:
 | 
			
		||||
        case WOOD_AXE:
 | 
			
		||||
        case STONE_PICKAXE:
 | 
			
		||||
        case STONE_SPADE:
 | 
			
		||||
        case STONE_HOE:
 | 
			
		||||
        case STONE_SWORD:
 | 
			
		||||
        case STONE_AXE:
 | 
			
		||||
        case GOLD_PICKAXE:
 | 
			
		||||
        case GOLD_SPADE:
 | 
			
		||||
        case GOLD_HOE:
 | 
			
		||||
        case GOLD_SWORD:
 | 
			
		||||
        case GOLD_AXE:
 | 
			
		||||
        case IRON_PICKAXE:
 | 
			
		||||
        case IRON_SPADE:
 | 
			
		||||
        case IRON_HOE:
 | 
			
		||||
        case IRON_SWORD:
 | 
			
		||||
        case IRON_AXE:
 | 
			
		||||
        case DIAMOND_PICKAXE:
 | 
			
		||||
        case DIAMOND_SPADE:
 | 
			
		||||
        case DIAMOND_HOE:
 | 
			
		||||
        case DIAMOND_SWORD:
 | 
			
		||||
        case DIAMOND_AXE:
 | 
			
		||||
        case BOW:
 | 
			
		||||
        case FLINT_AND_STEEL:
 | 
			
		||||
        case FISHING_ROD:
 | 
			
		||||
        case SHEARS:
 | 
			
		||||
            return true;
 | 
			
		||||
        default:
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isArmor(ItemStack item) {
 | 
			
		||||
        switch (item.getType()) {
 | 
			
		||||
        case LEATHER_HELMET:
 | 
			
		||||
        case LEATHER_CHESTPLATE:
 | 
			
		||||
        case LEATHER_LEGGINGS:
 | 
			
		||||
        case LEATHER_BOOTS:
 | 
			
		||||
        case CHAINMAIL_HELMET:
 | 
			
		||||
        case CHAINMAIL_CHESTPLATE:
 | 
			
		||||
        case CHAINMAIL_LEGGINGS:
 | 
			
		||||
        case CHAINMAIL_BOOTS:
 | 
			
		||||
        case GOLD_HELMET:
 | 
			
		||||
        case GOLD_CHESTPLATE:
 | 
			
		||||
        case GOLD_LEGGINGS:
 | 
			
		||||
        case GOLD_BOOTS:
 | 
			
		||||
        case IRON_HELMET:
 | 
			
		||||
        case IRON_CHESTPLATE:
 | 
			
		||||
        case IRON_LEGGINGS:
 | 
			
		||||
        case IRON_BOOTS:
 | 
			
		||||
        case DIAMOND_HELMET:
 | 
			
		||||
        case DIAMOND_CHESTPLATE:
 | 
			
		||||
        case DIAMOND_LEGGINGS:
 | 
			
		||||
        case DIAMOND_BOOTS:
 | 
			
		||||
            return true;
 | 
			
		||||
        default:
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean doesPlayerHaveEnough(Player player) {
 | 
			
		||||
        return economy.getBalance(player.getName()) - getCost(player.getItemInHand()) >= 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String formatCost(Player player) {
 | 
			
		||||
        return economy.format(getCost(player.getItemInHand()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void withdraw(Player player) {
 | 
			
		||||
        economy.withdrawPlayer(player.getName(), getCost(player.getItemInHand()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private double getCost(ItemStack item) {
 | 
			
		||||
        DataKey root = config.getConfig().getKey("");
 | 
			
		||||
        double price = Setting.BASE_PRICE.asDouble();
 | 
			
		||||
        if (root.keyExists("base-prices." + item.getType().name().toLowerCase().replace('_', '-')))
 | 
			
		||||
            price = root.getDouble("base-prices." + item.getType().name().toLowerCase().replace('_', '-'));
 | 
			
		||||
 | 
			
		||||
        // Adjust price based on durability and enchantments
 | 
			
		||||
        price += (item.getType().getMaxDurability() - item.getDurability());
 | 
			
		||||
 | 
			
		||||
        double enchantmentModifier = Setting.ENCHANTMENT_MODIFIER.asDouble();
 | 
			
		||||
        for (Enchantment enchantment : item.getEnchantments().keySet()) {
 | 
			
		||||
            if (root.keyExists("enchantment-modifiers." + enchantment.getName().toLowerCase().replace('_', '-')))
 | 
			
		||||
                enchantmentModifier = root.getDouble("enchantment-modifiers."
 | 
			
		||||
                        + enchantment.getName().toLowerCase().replace('_', '-'));
 | 
			
		||||
            price += enchantmentModifier * item.getEnchantmentLevel(enchantment);
 | 
			
		||||
        }
 | 
			
		||||
        return price;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -6,7 +6,7 @@ import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
 | 
			
		||||
public class ReforgeSession {
 | 
			
		||||
    private final Blacksmith plugin;
 | 
			
		||||
    private final BlacksmithPlugin plugin;
 | 
			
		||||
    private final Player player;
 | 
			
		||||
    private final ItemStack reforge;
 | 
			
		||||
    private final NPC npc;
 | 
			
		||||
@@ -17,7 +17,7 @@ public class ReforgeSession {
 | 
			
		||||
        reforge = player.getItemInHand();
 | 
			
		||||
        this.npc = npc;
 | 
			
		||||
 | 
			
		||||
        plugin = (Blacksmith) player.getServer().getPluginManager().getPlugin("Blacksmith");
 | 
			
		||||
        plugin = (BlacksmithPlugin) player.getServer().getPluginManager().getPlugin("Blacksmith");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Return is the session should end
 | 
			
		||||
@@ -28,7 +28,7 @@ public class ReforgeSession {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        if (!plugin.doesPlayerHaveEnough(player)) {
 | 
			
		||||
            npc.chat(player, ((BlacksmithCharacter) npc.getCharacter()).getInsufficientFundsMessage());
 | 
			
		||||
            npc.chat(player, ((Blacksmith) npc.getCharacter()).getInsufficientFundsMessage());
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@ package net.apunch.blacksmith.util;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
 | 
			
		||||
import net.apunch.blacksmith.Blacksmith;
 | 
			
		||||
import net.apunch.blacksmith.BlacksmithPlugin;
 | 
			
		||||
 | 
			
		||||
import net.citizensnpcs.api.util.DataKey;
 | 
			
		||||
import net.citizensnpcs.api.util.YamlStorage;
 | 
			
		||||
@@ -10,7 +10,7 @@ import net.citizensnpcs.api.util.YamlStorage;
 | 
			
		||||
public class Settings {
 | 
			
		||||
    private final YamlStorage config;
 | 
			
		||||
 | 
			
		||||
    public Settings(Blacksmith plugin) {
 | 
			
		||||
    public Settings(BlacksmithPlugin plugin) {
 | 
			
		||||
        config = new YamlStorage(plugin.getDataFolder() + File.separator + "config.yml", "Blacksmith Configuration");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user