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 }