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    }