001 package net.minecraft.village;
002
003 import cpw.mods.fml.relauncher.Side;
004 import cpw.mods.fml.relauncher.SideOnly;
005 import net.minecraft.item.Item;
006 import net.minecraft.item.ItemStack;
007 import net.minecraft.nbt.NBTTagCompound;
008
009 public 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 var2 = par1NBTTagCompound.getCompoundTag("buy");
123 this.itemToBuy = ItemStack.loadItemStackFromNBT(var2);
124 NBTTagCompound var3 = par1NBTTagCompound.getCompoundTag("sell");
125 this.itemToSell = ItemStack.loadItemStackFromNBT(var3);
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 var1 = new NBTTagCompound();
150 var1.setCompoundTag("buy", this.itemToBuy.writeToNBT(new NBTTagCompound("buy")));
151 var1.setCompoundTag("sell", this.itemToSell.writeToNBT(new NBTTagCompound("sell")));
152
153 if (this.secondItemToBuy != null)
154 {
155 var1.setCompoundTag("buyB", this.secondItemToBuy.writeToNBT(new NBTTagCompound("buyB")));
156 }
157
158 var1.setInteger("uses", this.toolUses);
159 var1.setInteger("maxUses", this.maxTradeUses);
160 return var1;
161 }
162 }