    001    package net.minecraft.src;
    002
    003    import java.util.ArrayList;
    004    import java.util.Iterator;
    005    import java.util.List;
    006
    007    public class ShapelessRecipes implements IRecipe
    008    {
    009        /** Is the ItemStack that you get when craft the recipe. */
    010        private final ItemStack recipeOutput;
    011
    012        /** Is a List of ItemStack that composes the recipe. */
    013        private final List recipeItems;
    014
    015        public ShapelessRecipes(ItemStack par1ItemStack, List par2List)
    016        {
    017            this.recipeOutput = par1ItemStack;
    018            this.recipeItems = par2List;
    019        }
    020
    021        public ItemStack getRecipeOutput()
    022        {
    023            return this.recipeOutput;
    024        }
    025
    026        /**
    027         * Used to check if a recipe matches current crafting inventory
    028         */
    029        public boolean matches(InventoryCrafting par1InventoryCrafting)
    030        {
    031            ArrayList var2 = new ArrayList(this.recipeItems);
    032
    033            for (int var3 = 0; var3 < 3; ++var3)
    034            {
    035                for (int var4 = 0; var4 < 3; ++var4)
    036                {
    037                    ItemStack var5 = par1InventoryCrafting.getStackInRowAndColumn(var4, var3);
    038
    039                    if (var5 != null)
    040                    {
    041                        boolean var6 = false;
    042                        Iterator var7 = var2.iterator();
    043
    044                        while (var7.hasNext())
    045                        {
    046                            ItemStack var8 = (ItemStack)var7.next();
    047
    048                            if (var5.itemID == var8.itemID && (var8.getItemDamage() == -1 || var5.getItemDamage() == var8.getItemDamage()))
    049                            {
    050                                var6 = true;
    051                                var2.remove(var8);
    052                                break;
    053                            }
    054                        }
    055
    056                        if (!var6)
    057                        {
    058                            return false;
    059                        }
    060                    }
    061                }
    062            }
    063
    064            return var2.isEmpty();
    065        }
    066
    067        /**
    068         * Returns an Item that is the result of this recipe
    069         */
    070        public ItemStack getCraftingResult(InventoryCrafting par1InventoryCrafting)
    071        {
    072            return this.recipeOutput.copy();
    073        }
    074
    075        /**
    076         * Returns the size of the recipe area
    077         */
    078        public int getRecipeSize()
    079        {
    080            return this.recipeItems.size();
    081        }
    082    }