001 package net.minecraft.item.crafting; 002 003 import java.util.ArrayList; 004 import net.minecraft.inventory.InventoryCrafting; 005 import net.minecraft.item.Item; 006 import net.minecraft.item.ItemDye; 007 import net.minecraft.item.ItemStack; 008 import net.minecraft.nbt.NBTTagCompound; 009 import net.minecraft.nbt.NBTTagList; 010 import net.minecraft.world.World; 011 012 public class RecipeFireworks implements IRecipe 013 { 014 private ItemStack field_92050_a; 015 016 /** 017 * Used to check if a recipe matches current crafting inventory 018 */ 019 public boolean matches(InventoryCrafting par1InventoryCrafting, World par2World) 020 { 021 this.field_92050_a = null; 022 int var3 = 0; 023 int var4 = 0; 024 int var5 = 0; 025 int var6 = 0; 026 int var7 = 0; 027 int var8 = 0; 028 029 for (int var9 = 0; var9 < par1InventoryCrafting.getSizeInventory(); ++var9) 030 { 031 ItemStack var10 = par1InventoryCrafting.getStackInSlot(var9); 032 033 if (var10 != null) 034 { 035 if (var10.itemID == Item.gunpowder.itemID) 036 { 037 ++var4; 038 } 039 else if (var10.itemID == Item.field_92054_bV.itemID) 040 { 041 ++var6; 042 } 043 else if (var10.itemID == Item.dyePowder.itemID) 044 { 045 ++var5; 046 } 047 else if (var10.itemID == Item.paper.itemID) 048 { 049 ++var3; 050 } 051 else if (var10.itemID == Item.lightStoneDust.itemID) 052 { 053 ++var7; 054 } 055 else if (var10.itemID == Item.diamond.itemID) 056 { 057 ++var7; 058 } 059 else if (var10.itemID == Item.fireballCharge.itemID) 060 { 061 ++var8; 062 } 063 else if (var10.itemID == Item.feather.itemID) 064 { 065 ++var8; 066 } 067 else if (var10.itemID == Item.goldNugget.itemID) 068 { 069 ++var8; 070 } 071 else 072 { 073 if (var10.itemID != Item.skull.itemID) 074 { 075 return false; 076 } 077 078 ++var8; 079 } 080 } 081 } 082 083 var7 += var5 + var8; 084 085 if (var4 <= 3 && var3 <= 1) 086 { 087 NBTTagCompound var15; 088 NBTTagCompound var18; 089 090 if (var4 >= 1 && var3 == 1 && var7 == 0) 091 { 092 this.field_92050_a = new ItemStack(Item.field_92052_bU); 093 094 var15 = new NBTTagCompound(); 095 if (var6 > 0) 096 { 097 var18 = new NBTTagCompound("Fireworks"); 098 NBTTagList var25 = new NBTTagList("Explosions"); 099 100 for (int var22 = 0; var22 < par1InventoryCrafting.getSizeInventory(); ++var22) 101 { 102 ItemStack var26 = par1InventoryCrafting.getStackInSlot(var22); 103 104 if (var26 != null && var26.itemID == Item.field_92054_bV.itemID && var26.hasTagCompound() && var26.getTagCompound().hasKey("Explosion")) 105 { 106 var25.appendTag(var26.getTagCompound().getCompoundTag("Explosion")); 107 } 108 } 109 110 var18.setTag("Explosions", var25); 111 var18.setByte("Flight", (byte)var4); 112 var15.setTag("Fireworks", var18); 113 } 114 115 this.field_92050_a.setTagCompound(var15); 116 return true; 117 } 118 else if (var4 == 1 && var3 == 0 && var6 == 0 && var5 > 0 && var8 <= 1) 119 { 120 this.field_92050_a = new ItemStack(Item.field_92054_bV); 121 var15 = new NBTTagCompound(); 122 var18 = new NBTTagCompound("Explosion"); 123 byte var21 = 0; 124 ArrayList var12 = new ArrayList(); 125 126 for (int var13 = 0; var13 < par1InventoryCrafting.getSizeInventory(); ++var13) 127 { 128 ItemStack var14 = par1InventoryCrafting.getStackInSlot(var13); 129 130 if (var14 != null) 131 { 132 if (var14.itemID == Item.dyePowder.itemID) 133 { 134 var12.add(Integer.valueOf(ItemDye.dyeColors[var14.getItemDamage()])); 135 } 136 else if (var14.itemID == Item.lightStoneDust.itemID) 137 { 138 var18.setBoolean("Flicker", true); 139 } 140 else if (var14.itemID == Item.diamond.itemID) 141 { 142 var18.setBoolean("Trail", true); 143 } 144 else if (var14.itemID == Item.fireballCharge.itemID) 145 { 146 var21 = 1; 147 } 148 else if (var14.itemID == Item.feather.itemID) 149 { 150 var21 = 4; 151 } 152 else if (var14.itemID == Item.goldNugget.itemID) 153 { 154 var21 = 2; 155 } 156 else if (var14.itemID == Item.skull.itemID) 157 { 158 var21 = 3; 159 } 160 } 161 } 162 163 int[] var24 = new int[var12.size()]; 164 165 for (int var27 = 0; var27 < var24.length; ++var27) 166 { 167 var24[var27] = ((Integer)var12.get(var27)).intValue(); 168 } 169 170 var18.setIntArray("Colors", var24); 171 var18.setByte("Type", var21); 172 var15.setTag("Explosion", var18); 173 this.field_92050_a.setTagCompound(var15); 174 return true; 175 } 176 else if (var4 == 0 && var3 == 0 && var6 == 1 && var5 > 0 && var5 == var7) 177 { 178 ArrayList var16 = new ArrayList(); 179 180 for (int var20 = 0; var20 < par1InventoryCrafting.getSizeInventory(); ++var20) 181 { 182 ItemStack var11 = par1InventoryCrafting.getStackInSlot(var20); 183 184 if (var11 != null) 185 { 186 if (var11.itemID == Item.dyePowder.itemID) 187 { 188 var16.add(Integer.valueOf(ItemDye.dyeColors[var11.getItemDamage()])); 189 } 190 else if (var11.itemID == Item.field_92054_bV.itemID) 191 { 192 this.field_92050_a = var11.copy(); 193 this.field_92050_a.stackSize = 1; 194 } 195 } 196 } 197 198 int[] var17 = new int[var16.size()]; 199 200 for (int var19 = 0; var19 < var17.length; ++var19) 201 { 202 var17[var19] = ((Integer)var16.get(var19)).intValue(); 203 } 204 205 if (this.field_92050_a != null && this.field_92050_a.hasTagCompound()) 206 { 207 NBTTagCompound var23 = this.field_92050_a.getTagCompound().getCompoundTag("Explosion"); 208 209 if (var23 == null) 210 { 211 return false; 212 } 213 else 214 { 215 var23.setIntArray("FadeColors", var17); 216 return true; 217 } 218 } 219 else 220 { 221 return false; 222 } 223 } 224 else 225 { 226 return false; 227 } 228 } 229 else 230 { 231 return false; 232 } 233 } 234 235 /** 236 * Returns an Item that is the result of this recipe 237 */ 238 public ItemStack getCraftingResult(InventoryCrafting par1InventoryCrafting) 239 { 240 return this.field_92050_a.copy(); 241 } 242 243 /** 244 * Returns the size of the recipe area 245 */ 246 public int getRecipeSize() 247 { 248 return 10; 249 } 250 251 public ItemStack getRecipeOutput() 252 { 253 return this.field_92050_a; 254 } 255 }