001package net.minecraft.village;
002
003import cpw.mods.fml.relauncher.Side;
004import cpw.mods.fml.relauncher.SideOnly;
005import net.minecraft.item.Item;
006import net.minecraft.item.ItemStack;
007import net.minecraft.nbt.NBTTagCompound;
008
009public class MerchantRecipe
010{
011    /** Item the Villager buys. */
012    private ItemStack itemToBuy;
013
014    /** Second Item the Villager buys. */
015    private ItemStack secondItemToBuy;
016
017    /** Item the Villager sells. */
018    private ItemStack itemToSell;
019
020    /**
021     * Saves how much has been tool used when put into to slot to be enchanted.
022     */
023    private int toolUses;
024
025    /** Maximum times this trade can be used. */
026    private int maxTradeUses;
027
028    public MerchantRecipe(NBTTagCompound par1NBTTagCompound)
029    {
030        this.readFromTags(par1NBTTagCompound);
031    }
032
033    public MerchantRecipe(ItemStack par1ItemStack, ItemStack par2ItemStack, ItemStack par3ItemStack)
034    {
035        this.itemToBuy = par1ItemStack;
036        this.secondItemToBuy = par2ItemStack;
037        this.itemToSell = par3ItemStack;
038        this.maxTradeUses = 7;
039    }
040
041    public MerchantRecipe(ItemStack par1ItemStack, ItemStack par2ItemStack)
042    {
043        this(par1ItemStack, (ItemStack)null, par2ItemStack);
044    }
045
046    public MerchantRecipe(ItemStack par1ItemStack, Item par2Item)
047    {
048        this(par1ItemStack, new ItemStack(par2Item));
049    }
050
051    /**
052     * Gets the itemToBuy.
053     */
054    public ItemStack getItemToBuy()
055    {
056        return this.itemToBuy;
057    }
058
059    /**
060     * Gets secondItemToBuy.
061     */
062    public ItemStack getSecondItemToBuy()
063    {
064        return this.secondItemToBuy;
065    }
066
067    /**
068     * Gets if Villager has secondItemToBuy.
069     */
070    public boolean hasSecondItemToBuy()
071    {
072        return this.secondItemToBuy != null;
073    }
074
075    /**
076     * Gets itemToSell.
077     */
078    public ItemStack getItemToSell()
079    {
080        return this.itemToSell;
081    }
082
083    /**
084     * checks if both the first and second ItemToBuy IDs are the same
085     */
086    public boolean hasSameIDsAs(MerchantRecipe par1MerchantRecipe)
087    {
088        return this.itemToBuy.itemID == par1MerchantRecipe.itemToBuy.itemID && this.itemToSell.itemID == par1MerchantRecipe.itemToSell.itemID ? this.secondItemToBuy == null && par1MerchantRecipe.secondItemToBuy == null || this.secondItemToBuy != null && par1MerchantRecipe.secondItemToBuy != null && this.secondItemToBuy.itemID == par1MerchantRecipe.secondItemToBuy.itemID : false;
089    }
090
091    /**
092     * checks first and second ItemToBuy ID's and count. Calls hasSameIDs
093     */
094    public boolean hasSameItemsAs(MerchantRecipe par1MerchantRecipe)
095    {
096        return this.hasSameIDsAs(par1MerchantRecipe) && (this.itemToBuy.stackSize < par1MerchantRecipe.itemToBuy.stackSize || this.secondItemToBuy != null && this.secondItemToBuy.stackSize < par1MerchantRecipe.secondItemToBuy.stackSize);
097    }
098
099    public void incrementToolUses()
100    {
101        ++this.toolUses;
102    }
103
104    public void func_82783_a(int par1)
105    {
106        this.maxTradeUses += par1;
107    }
108
109    public boolean func_82784_g()
110    {
111        return this.toolUses >= this.maxTradeUses;
112    }
113
114    @SideOnly(Side.CLIENT)
115    public void func_82785_h()
116    {
117        this.toolUses = this.maxTradeUses;
118    }
119
120    public void readFromTags(NBTTagCompound par1NBTTagCompound)
121    {
122        NBTTagCompound nbttagcompound1 = par1NBTTagCompound.getCompoundTag("buy");
123        this.itemToBuy = ItemStack.loadItemStackFromNBT(nbttagcompound1);
124        NBTTagCompound nbttagcompound2 = par1NBTTagCompound.getCompoundTag("sell");
125        this.itemToSell = ItemStack.loadItemStackFromNBT(nbttagcompound2);
126
127        if (par1NBTTagCompound.hasKey("buyB"))
128        {
129            this.secondItemToBuy = ItemStack.loadItemStackFromNBT(par1NBTTagCompound.getCompoundTag("buyB"));
130        }
131
132        if (par1NBTTagCompound.hasKey("uses"))
133        {
134            this.toolUses = par1NBTTagCompound.getInteger("uses");
135        }
136
137        if (par1NBTTagCompound.hasKey("maxUses"))
138        {
139            this.maxTradeUses = par1NBTTagCompound.getInteger("maxUses");
140        }
141        else
142        {
143            this.maxTradeUses = 7;
144        }
145    }
146
147    public NBTTagCompound writeToTags()
148    {
149        NBTTagCompound nbttagcompound = new NBTTagCompound();
150        nbttagcompound.setCompoundTag("buy", this.itemToBuy.writeToNBT(new NBTTagCompound("buy")));
151        nbttagcompound.setCompoundTag("sell", this.itemToSell.writeToNBT(new NBTTagCompound("sell")));
152
153        if (this.secondItemToBuy != null)
154        {
155            nbttagcompound.setCompoundTag("buyB", this.secondItemToBuy.writeToNBT(new NBTTagCompound("buyB")));
156        }
157
158        nbttagcompound.setInteger("uses", this.toolUses);
159        nbttagcompound.setInteger("maxUses", this.maxTradeUses);
160        return nbttagcompound;
161    }
162}