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 }