package net.minecraft.server;

import org.bukkit.craftbukkit.inventory.CraftMerchantRecipe; // CraftBukkit

public class MerchantRecipe {

    public ItemStack buyingItem1;
    public ItemStack buyingItem2;
    public ItemStack sellingItem;
    public int uses;
    public int maxUses;
    public boolean rewardExp;
    // CraftBukkit start
    private CraftMerchantRecipe bukkitHandle;

    public CraftMerchantRecipe asBukkit() {
        return (bukkitHandle == null) ? bukkitHandle = new CraftMerchantRecipe(this) : bukkitHandle;
    }

    public MerchantRecipe(ItemStack itemstack, ItemStack itemstack1, ItemStack itemstack2, int i, int j, CraftMerchantRecipe bukkit) {
        this(itemstack, itemstack1, itemstack2, i, j);
        this.bukkitHandle = bukkit;
    }
    // CraftBukkit end

    public MerchantRecipe(NBTTagCompound nbttagcompound) {
        this.buyingItem1 = ItemStack.a;
        this.buyingItem2 = ItemStack.a;
        this.sellingItem = ItemStack.a;
        this.a(nbttagcompound);
    }

    public MerchantRecipe(ItemStack itemstack, ItemStack itemstack1, ItemStack itemstack2) {
        this(itemstack, itemstack1, itemstack2, 0, 7);
    }

    public MerchantRecipe(ItemStack itemstack, ItemStack itemstack1, ItemStack itemstack2, int i, int j) {
        this.buyingItem1 = ItemStack.a;
        this.buyingItem2 = ItemStack.a;
        this.sellingItem = ItemStack.a;
        this.buyingItem1 = itemstack;
        this.buyingItem2 = itemstack1;
        this.sellingItem = itemstack2;
        this.uses = i;
        this.maxUses = j;
        this.rewardExp = true;
    }

    public MerchantRecipe(ItemStack itemstack, ItemStack itemstack1) {
        this(itemstack, ItemStack.a, itemstack1);
    }

    public MerchantRecipe(ItemStack itemstack, Item item) {
        this(itemstack, new ItemStack(item));
    }

    public ItemStack getBuyItem1() {
        return this.buyingItem1;
    }

    public ItemStack getBuyItem2() {
        return this.buyingItem2;
    }

    public boolean hasSecondItem() {
        return !this.buyingItem2.isEmpty();
    }

    public ItemStack getBuyItem3() {
        return this.sellingItem;
    }

    public int e() {
        return this.uses;
    }

    public int f() {
        return this.maxUses;
    }

    public void g() {
        ++this.uses;
    }

    public void a(int i) {
        this.maxUses += i;
    }

    public boolean h() {
        return this.uses >= this.maxUses;
    }

    public boolean j() {
        return this.rewardExp;
    }

    public void a(NBTTagCompound nbttagcompound) {
        NBTTagCompound nbttagcompound1 = nbttagcompound.getCompound("buy");

        this.buyingItem1 = new ItemStack(nbttagcompound1);
        NBTTagCompound nbttagcompound2 = nbttagcompound.getCompound("sell");

        this.sellingItem = new ItemStack(nbttagcompound2);
        if (nbttagcompound.hasKeyOfType("buyB", 10)) {
            this.buyingItem2 = new ItemStack(nbttagcompound.getCompound("buyB"));
        }

        if (nbttagcompound.hasKeyOfType("uses", 99)) {
            this.uses = nbttagcompound.getInt("uses");
        }

        if (nbttagcompound.hasKeyOfType("maxUses", 99)) {
            this.maxUses = nbttagcompound.getInt("maxUses");
        } else {
            this.maxUses = 7;
        }

        if (nbttagcompound.hasKeyOfType("rewardExp", 1)) {
            this.rewardExp = nbttagcompound.getBoolean("rewardExp");
        } else {
            this.rewardExp = true;
        }

    }

    public NBTTagCompound k() {
        NBTTagCompound nbttagcompound = new NBTTagCompound();

        nbttagcompound.set("buy", this.buyingItem1.save(new NBTTagCompound()));
        nbttagcompound.set("sell", this.sellingItem.save(new NBTTagCompound()));
        if (!this.buyingItem2.isEmpty()) {
            nbttagcompound.set("buyB", this.buyingItem2.save(new NBTTagCompound()));
        }

        nbttagcompound.setInt("uses", this.uses);
        nbttagcompound.setInt("maxUses", this.maxUses);
        nbttagcompound.setBoolean("rewardExp", this.rewardExp);
        return nbttagcompound;
    }
}
