001 package net.minecraft.src;
002
003 import cpw.mods.fml.common.Side;
004 import cpw.mods.fml.common.asm.SideOnly;
005 import java.io.DataInputStream;
006 import java.io.DataOutputStream;
007 import java.io.IOException;
008 import java.util.ArrayList;
009
010 public class MerchantRecipeList extends ArrayList
011 {
012 public MerchantRecipeList() {}
013
014 public MerchantRecipeList(NBTTagCompound par1NBTTagCompound)
015 {
016 this.readRecipiesFromTags(par1NBTTagCompound);
017 }
018
019 /**
020 * can par1,par2 be used to in crafting recipe par3
021 */
022 public MerchantRecipe canRecipeBeUsed(ItemStack par1ItemStack, ItemStack par2ItemStack, int par3)
023 {
024 if (par3 > 0 && par3 < this.size())
025 {
026 MerchantRecipe var6 = (MerchantRecipe)this.get(par3);
027 return par1ItemStack.itemID == var6.getItemToBuy().itemID && (par2ItemStack == null && !var6.hasSecondItemToBuy() || var6.hasSecondItemToBuy() && par2ItemStack != null && var6.getSecondItemToBuy().itemID == par2ItemStack.itemID) && par1ItemStack.stackSize >= var6.getItemToBuy().stackSize && (!var6.hasSecondItemToBuy() || par2ItemStack.stackSize >= var6.getSecondItemToBuy().stackSize) ? var6 : null;
028 }
029 else
030 {
031 for (int var4 = 0; var4 < this.size(); ++var4)
032 {
033 MerchantRecipe var5 = (MerchantRecipe)this.get(var4);
034
035 if (par1ItemStack.itemID == var5.getItemToBuy().itemID && par1ItemStack.stackSize >= var5.getItemToBuy().stackSize && (!var5.hasSecondItemToBuy() && par2ItemStack == null || var5.hasSecondItemToBuy() && par2ItemStack != null && var5.getSecondItemToBuy().itemID == par2ItemStack.itemID && par2ItemStack.stackSize >= var5.getSecondItemToBuy().stackSize))
036 {
037 return var5;
038 }
039 }
040
041 return null;
042 }
043 }
044
045 /**
046 * checks if there is a recipie for the same ingredients already on the list, and replaces it. otherwise, adds it
047 */
048 public void addToListWithCheck(MerchantRecipe par1MerchantRecipe)
049 {
050 for (int var2 = 0; var2 < this.size(); ++var2)
051 {
052 MerchantRecipe var3 = (MerchantRecipe)this.get(var2);
053
054 if (par1MerchantRecipe.hasSameIDsAs(var3))
055 {
056 if (par1MerchantRecipe.hasSameItemsAs(var3))
057 {
058 this.set(var2, par1MerchantRecipe);
059 }
060
061 return;
062 }
063 }
064
065 this.add(par1MerchantRecipe);
066 }
067
068 public void writeRecipiesToStream(DataOutputStream par1DataOutputStream) throws IOException
069 {
070 par1DataOutputStream.writeByte((byte)(this.size() & 255));
071
072 for (int var2 = 0; var2 < this.size(); ++var2)
073 {
074 MerchantRecipe var3 = (MerchantRecipe)this.get(var2);
075 Packet.writeItemStack(var3.getItemToBuy(), par1DataOutputStream);
076 Packet.writeItemStack(var3.getItemToSell(), par1DataOutputStream);
077 ItemStack var4 = var3.getSecondItemToBuy();
078 par1DataOutputStream.writeBoolean(var4 != null);
079
080 if (var4 != null)
081 {
082 Packet.writeItemStack(var4, par1DataOutputStream);
083 }
084
085 par1DataOutputStream.writeBoolean(var3.func_82784_g());
086 }
087 }
088
089 @SideOnly(Side.CLIENT)
090 public static MerchantRecipeList readRecipiesFromStream(DataInputStream par0DataInputStream) throws IOException
091 {
092 MerchantRecipeList var1 = new MerchantRecipeList();
093 int var2 = par0DataInputStream.readByte() & 255;
094
095 for (int var3 = 0; var3 < var2; ++var3)
096 {
097 ItemStack var4 = Packet.readItemStack(par0DataInputStream);
098 ItemStack var5 = Packet.readItemStack(par0DataInputStream);
099 ItemStack var6 = null;
100
101 if (par0DataInputStream.readBoolean())
102 {
103 var6 = Packet.readItemStack(par0DataInputStream);
104 }
105
106 boolean var7 = par0DataInputStream.readBoolean();
107 MerchantRecipe var8 = new MerchantRecipe(var4, var6, var5);
108
109 if (var7)
110 {
111 var8.func_82785_h();
112 }
113
114 var1.add(var8);
115 }
116
117 return var1;
118 }
119
120 public void readRecipiesFromTags(NBTTagCompound par1NBTTagCompound)
121 {
122 NBTTagList var2 = par1NBTTagCompound.getTagList("Recipes");
123
124 for (int var3 = 0; var3 < var2.tagCount(); ++var3)
125 {
126 NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3);
127 this.add(new MerchantRecipe(var4));
128 }
129 }
130
131 public NBTTagCompound getRecipiesAsTags()
132 {
133 NBTTagCompound var1 = new NBTTagCompound();
134 NBTTagList var2 = new NBTTagList("Recipes");
135
136 for (int var3 = 0; var3 < this.size(); ++var3)
137 {
138 MerchantRecipe var4 = (MerchantRecipe)this.get(var3);
139 var2.appendTag(var4.writeToTags());
140 }
141
142 var1.setTag("Recipes", var2);
143 return var1;
144 }
145 }