    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.shiftedIndex)
    036                    {
    037                        ++var4;
    038                    }
    039                    else if (var10.itemID == Item.field_92054_bV.shiftedIndex)
    040                    {
    041                        ++var6;
    042                    }
    043                    else if (var10.itemID == Item.dyePowder.shiftedIndex)
    044                    {
    045                        ++var5;
    046                    }
    047                    else if (var10.itemID == Item.paper.shiftedIndex)
    048                    {
    049                        ++var3;
    050                    }
    051                    else if (var10.itemID == Item.lightStoneDust.shiftedIndex)
    052                    {
    053                        ++var7;
    054                    }
    055                    else if (var10.itemID == Item.diamond.shiftedIndex)
    056                    {
    057                        ++var7;
    058                    }
    059                    else if (var10.itemID == Item.fireballCharge.shiftedIndex)
    060                    {
    061                        ++var8;
    062                    }
    063                    else if (var10.itemID == Item.feather.shiftedIndex)
    064                    {
    065                        ++var8;
    066                    }
    067                    else if (var10.itemID == Item.goldNugget.shiftedIndex)
    068                    {
    069                        ++var8;
    070                    }
    071                    else
    072                    {
    073                        if (var10.itemID != Item.skull.shiftedIndex)
    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.shiftedIndex && 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.shiftedIndex)
    133                            {
    134                                var12.add(Integer.valueOf(ItemDye.dyeColors[var14.getItemDamage()]));
    135                            }
    136                            else if (var14.itemID == Item.lightStoneDust.shiftedIndex)
    137                            {
    138                                var18.setBoolean("Flicker", true);
    139                            }
    140                            else if (var14.itemID == Item.diamond.shiftedIndex)
    141                            {
    142                                var18.setBoolean("Trail", true);
    143                            }
    144                            else if (var14.itemID == Item.fireballCharge.shiftedIndex)
    145                            {
    146                                var21 = 1;
    147                            }
    148                            else if (var14.itemID == Item.feather.shiftedIndex)
    149                            {
    150                                var21 = 4;
    151                            }
    152                            else if (var14.itemID == Item.goldNugget.shiftedIndex)
    153                            {
    154                                var21 = 2;
    155                            }
    156                            else if (var14.itemID == Item.skull.shiftedIndex)
    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.shiftedIndex)
    187                            {
    188                                var16.add(Integer.valueOf(ItemDye.dyeColors[var11.getItemDamage()]));
    189                            }
    190                            else if (var11.itemID == Item.field_92054_bV.shiftedIndex)
    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    }