Terraria.Recipe.FindRecipes C# (CSharp) Method

FindRecipes() public static method

public static FindRecipes ( ) : void
return void
        public static void FindRecipes()
        {
            int num1 = Main.availableRecipe[Main.focusRecipe];
            float num2 = Main.availableRecipeY[Main.focusRecipe];
            for (int index = 0; index < Recipe.maxRecipes; ++index)
                Main.availableRecipe[index] = 0;
            Main.numAvailableRecipes = 0;
            if (Main.guideItem.itemId > 0 && Main.guideItem.stack > 0 && Main.guideItem.name != "")
            {
                for (int index1 = 0; index1 < Recipe.maxRecipes && Main.recipe[index1].createItem.itemId != 0; ++index1)
                {
                    for (int index2 = 0; index2 < Recipe.maxRequirements && Main.recipe[index1].requiredItem[index2].itemId != 0; ++index2)
                    {
                        if (Main.guideItem.IsTheSameAs(Main.recipe[index1].requiredItem[index2]) || Main.recipe[index1].useWood(Main.guideItem.itemId, Main.recipe[index1].requiredItem[index2].itemId) || (Main.recipe[index1].useSand(Main.guideItem.itemId, Main.recipe[index1].requiredItem[index2].itemId) || Main.recipe[index1].useIronBar(Main.guideItem.itemId, Main.recipe[index1].requiredItem[index2].itemId)) || (Main.recipe[index1].useFragment(Main.guideItem.itemId, Main.recipe[index1].requiredItem[index2].itemId) || Main.recipe[index1].usePressurePlate(Main.guideItem.itemId, Main.recipe[index1].requiredItem[index2].itemId)))
                        {
                            Main.availableRecipe[Main.numAvailableRecipes] = index1;
                            ++Main.numAvailableRecipes;
                            break;
                        }
                    }
                }
            }
            else
            {
                Dictionary<int, int> dictionary1 = new Dictionary<int, int>();
                Item[] objArray = Main.player[Main.myPlayer].inventory;
                for (int index1 = 0; index1 < 58; ++index1)
                {
                    Item obj = objArray[index1];
                    if (obj.stack > 0)
                    {
                        if (dictionary1.ContainsKey(obj.netID))
                        {
                            Dictionary<int, int> dictionary2;
                            int index2;
                            (dictionary2 = dictionary1)[index2 = obj.netID] = dictionary2[index2] + obj.stack;
                        }
                        else
                            dictionary1[obj.netID] = obj.stack;
                    }
                }
                if (Main.player[Main.myPlayer].chest != -1)
                {
                    if (Main.player[Main.myPlayer].chest > -1)
                        objArray = Main.chest[Main.player[Main.myPlayer].chest].item;
                    else if (Main.player[Main.myPlayer].chest == -2)
                        objArray = Main.player[Main.myPlayer].bank.item;
                    else if (Main.player[Main.myPlayer].chest == -3)
                        objArray = Main.player[Main.myPlayer].bank2.item;
                    for (int index1 = 0; index1 < 40; ++index1)
                    {
                        Item obj = objArray[index1];
                        if (obj.stack > 0)
                        {
                            if (dictionary1.ContainsKey(obj.netID))
                            {
                                Dictionary<int, int> dictionary2;
                                int index2;
                                (dictionary2 = dictionary1)[index2 = obj.netID] = dictionary2[index2] + obj.stack;
                            }
                            else
                                dictionary1[obj.netID] = obj.stack;
                        }
                    }
                }
                for (int index1 = 0; index1 < Recipe.maxRecipes && Main.recipe[index1].createItem.itemId != 0; ++index1)
                {
                    bool flag1 = true;
                    if (flag1)
                    {
                        for (int index2 = 0; index2 < Recipe.maxRequirements && Main.recipe[index1].requiredTile[index2] != -1; ++index2)
                        {
                            if (!Main.player[Main.myPlayer].adjTile[Main.recipe[index1].requiredTile[index2]])
                            {
                                flag1 = false;
                                break;
                            }
                        }
                    }
                    if (flag1)
                    {
                        for (int index2 = 0; index2 < Recipe.maxRequirements; ++index2)
                        {
                            Item obj = Main.recipe[index1].requiredItem[index2];
                            if (obj.itemId != 0)
                            {
                                int num3 = obj.stack;
                                bool flag2 = false;
                                foreach (int invType in dictionary1.Keys)
                                {
                                    if (Main.recipe[index1].useWood(invType, obj.itemId) || Main.recipe[index1].useSand(invType, obj.itemId) || (Main.recipe[index1].useIronBar(invType, obj.itemId) || Main.recipe[index1].useFragment(invType, obj.itemId)) || Main.recipe[index1].usePressurePlate(invType, obj.itemId))
                                    {
                                        num3 -= dictionary1[invType];
                                        flag2 = true;
                                    }
                                }
                                if (!flag2 && dictionary1.ContainsKey(obj.netID))
                                    num3 -= dictionary1[obj.netID];
                                if (num3 > 0)
                                {
                                    flag1 = false;
                                    break;
                                }
                            }
                            else
                                break;
                        }
                    }
                    if (flag1 && (Main.recipe[index1].needWater && (!Main.player[Main.myPlayer].adjWater && !Main.player[Main.myPlayer].adjTile[172]) || Main.recipe[index1].needHoney && Main.recipe[index1].needHoney != Main.player[Main.myPlayer].adjHoney || Main.recipe[index1].needLava && Main.recipe[index1].needLava != Main.player[Main.myPlayer].adjLava))
                        flag1 = false;
                    if (flag1)
                    {
                        Main.availableRecipe[Main.numAvailableRecipes] = index1;
                        ++Main.numAvailableRecipes;
                    }
                }
            }
            for (int index = 0; index < Main.numAvailableRecipes; ++index)
            {
                if (num1 == Main.availableRecipe[index])
                {
                    Main.focusRecipe = index;
                    break;
                }
            }
            if (Main.focusRecipe >= Main.numAvailableRecipes)
                Main.focusRecipe = Main.numAvailableRecipes - 1;
            if (Main.focusRecipe < 0)
                Main.focusRecipe = 0;
            float num4 = Main.availableRecipeY[Main.focusRecipe] - num2;
            for (int index = 0; index < Recipe.maxRecipes; ++index)
                Main.availableRecipeY[index] -= num4;
        }

Usage Example

 public static void Close()
 {
     if (Main.setKey != -1)
     {
         return;
     }
     Main.SaveSettings();
     Main.ingameOptionsWindow = false;
     Recipe.FindRecipes();
     Main.playerInventory = true;
 }
All Usage Examples Of Terraria.Recipe::FindRecipes