001package net.minecraft.item.crafting;
002
003import java.util.ArrayList;
004import net.minecraft.inventory.InventoryCrafting;
005import net.minecraft.item.Item;
006import net.minecraft.item.ItemDye;
007import net.minecraft.item.ItemStack;
008import net.minecraft.nbt.NBTTagCompound;
009import net.minecraft.nbt.NBTTagList;
010import net.minecraft.world.World;
011
012public class RecipeFireworks implements IRecipe
013{
014    private ItemStack field_92102_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_92102_a = null;
022        int i = 0;
023        int j = 0;
024        int k = 0;
025        int l = 0;
026        int i1 = 0;
027        int j1 = 0;
028
029        for (int k1 = 0; k1 < par1InventoryCrafting.getSizeInventory(); ++k1)
030        {
031            ItemStack itemstack = par1InventoryCrafting.getStackInSlot(k1);
032
033            if (itemstack != null)
034            {
035                if (itemstack.itemID == Item.gunpowder.itemID)
036                {
037                    ++j;
038                }
039                else if (itemstack.itemID == Item.fireworkCharge.itemID)
040                {
041                    ++l;
042                }
043                else if (itemstack.itemID == Item.dyePowder.itemID)
044                {
045                    ++k;
046                }
047                else if (itemstack.itemID == Item.paper.itemID)
048                {
049                    ++i;
050                }
051                else if (itemstack.itemID == Item.lightStoneDust.itemID)
052                {
053                    ++i1;
054                }
055                else if (itemstack.itemID == Item.diamond.itemID)
056                {
057                    ++i1;
058                }
059                else if (itemstack.itemID == Item.fireballCharge.itemID)
060                {
061                    ++j1;
062                }
063                else if (itemstack.itemID == Item.feather.itemID)
064                {
065                    ++j1;
066                }
067                else if (itemstack.itemID == Item.goldNugget.itemID)
068                {
069                    ++j1;
070                }
071                else
072                {
073                    if (itemstack.itemID != Item.skull.itemID)
074                    {
075                        return false;
076                    }
077
078                    ++j1;
079                }
080            }
081        }
082
083        i1 += k + j1;
084
085        if (j <= 3 && i <= 1)
086        {
087            NBTTagCompound nbttagcompound;
088            NBTTagCompound nbttagcompound1;
089
090            if (j >= 1 && i == 1 && i1 == 0)
091            {
092                this.field_92102_a = new ItemStack(Item.firework);
093
094                nbttagcompound = new NBTTagCompound();
095                if (l > 0)
096                {
097                    nbttagcompound1 = new NBTTagCompound("Fireworks");
098                    NBTTagList nbttaglist = new NBTTagList("Explosions");
099
100                    for (int l1 = 0; l1 < par1InventoryCrafting.getSizeInventory(); ++l1)
101                    {
102                        ItemStack itemstack1 = par1InventoryCrafting.getStackInSlot(l1);
103
104                        if (itemstack1 != null && itemstack1.itemID == Item.fireworkCharge.itemID && itemstack1.hasTagCompound() && itemstack1.getTagCompound().hasKey("Explosion"))
105                        {
106                            nbttaglist.appendTag(itemstack1.getTagCompound().getCompoundTag("Explosion"));
107                        }
108                    }
109
110                    nbttagcompound1.setTag("Explosions", nbttaglist);
111                    nbttagcompound1.setByte("Flight", (byte)j);
112                    nbttagcompound.setTag("Fireworks", nbttagcompound1);
113                }
114
115                this.field_92102_a.setTagCompound(nbttagcompound);
116                return true;
117            }
118            else if (j == 1 && i == 0 && l == 0 && k > 0 && j1 <= 1)
119            {
120                this.field_92102_a = new ItemStack(Item.fireworkCharge);
121                nbttagcompound = new NBTTagCompound();
122                nbttagcompound1 = new NBTTagCompound("Explosion");
123                byte b0 = 0;
124                ArrayList arraylist = new ArrayList();
125
126                for (int i2 = 0; i2 < par1InventoryCrafting.getSizeInventory(); ++i2)
127                {
128                    ItemStack itemstack2 = par1InventoryCrafting.getStackInSlot(i2);
129
130                    if (itemstack2 != null)
131                    {
132                        if (itemstack2.itemID == Item.dyePowder.itemID)
133                        {
134                            arraylist.add(Integer.valueOf(ItemDye.dyeColors[itemstack2.getItemDamage()]));
135                        }
136                        else if (itemstack2.itemID == Item.lightStoneDust.itemID)
137                        {
138                            nbttagcompound1.setBoolean("Flicker", true);
139                        }
140                        else if (itemstack2.itemID == Item.diamond.itemID)
141                        {
142                            nbttagcompound1.setBoolean("Trail", true);
143                        }
144                        else if (itemstack2.itemID == Item.fireballCharge.itemID)
145                        {
146                            b0 = 1;
147                        }
148                        else if (itemstack2.itemID == Item.feather.itemID)
149                        {
150                            b0 = 4;
151                        }
152                        else if (itemstack2.itemID == Item.goldNugget.itemID)
153                        {
154                            b0 = 2;
155                        }
156                        else if (itemstack2.itemID == Item.skull.itemID)
157                        {
158                            b0 = 3;
159                        }
160                    }
161                }
162
163                int[] aint = new int[arraylist.size()];
164
165                for (int j2 = 0; j2 < aint.length; ++j2)
166                {
167                    aint[j2] = ((Integer)arraylist.get(j2)).intValue();
168                }
169
170                nbttagcompound1.setIntArray("Colors", aint);
171                nbttagcompound1.setByte("Type", b0);
172                nbttagcompound.setTag("Explosion", nbttagcompound1);
173                this.field_92102_a.setTagCompound(nbttagcompound);
174                return true;
175            }
176            else if (j == 0 && i == 0 && l == 1 && k > 0 && k == i1)
177            {
178                ArrayList arraylist1 = new ArrayList();
179
180                for (int k2 = 0; k2 < par1InventoryCrafting.getSizeInventory(); ++k2)
181                {
182                    ItemStack itemstack3 = par1InventoryCrafting.getStackInSlot(k2);
183
184                    if (itemstack3 != null)
185                    {
186                        if (itemstack3.itemID == Item.dyePowder.itemID)
187                        {
188                            arraylist1.add(Integer.valueOf(ItemDye.dyeColors[itemstack3.getItemDamage()]));
189                        }
190                        else if (itemstack3.itemID == Item.fireworkCharge.itemID)
191                        {
192                            this.field_92102_a = itemstack3.copy();
193                            this.field_92102_a.stackSize = 1;
194                        }
195                    }
196                }
197
198                int[] aint1 = new int[arraylist1.size()];
199
200                for (int l2 = 0; l2 < aint1.length; ++l2)
201                {
202                    aint1[l2] = ((Integer)arraylist1.get(l2)).intValue();
203                }
204
205                if (this.field_92102_a != null && this.field_92102_a.hasTagCompound())
206                {
207                    NBTTagCompound nbttagcompound2 = this.field_92102_a.getTagCompound().getCompoundTag("Explosion");
208
209                    if (nbttagcompound2 == null)
210                    {
211                        return false;
212                    }
213                    else
214                    {
215                        nbttagcompound2.setIntArray("FadeColors", aint1);
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_92102_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_92102_a;
254    }
255}