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