public override bool StacksWith(IGameObject other)
        {
            FabricCotton ingredientFabric = other as FabricCotton;

            if (ingredientFabric != null)
            {
                return(true);
            }
            return(false);
        }
        public static bool CreateAndAddToInventory(GameObject obj, int amount)
        {
            if (obj != null && obj.Inventory != null)
            {
                for (int i = 0; i < amount; i++)
                {
                    FabricInitParameters initData = new FabricInitParameters(1);

                    IGameObject   Knitted           = (IngredientFabric)GlobalFunctions.CreateObjectOutOfWorld(fabricKnittedRK, null, initData);
                    FabricKnitted ingredientKnitted = Knitted as FabricKnitted;

                    IGameObject  Cotton           = (IngredientFabric)GlobalFunctions.CreateObjectOutOfWorld(fabricCottonRK, null, initData);
                    FabricCotton ingredientCotton = Cotton as FabricCotton;

                    IGameObject   leather           = (IngredientFabric)GlobalFunctions.CreateObjectOutOfWorld(fabricLeatherRK, null, initData);
                    FabricLeather ingredientLeather = leather as FabricLeather;

                    IGameObject     synthetic           = (IngredientFabric)GlobalFunctions.CreateObjectOutOfWorld(fabricSyntheticRK, null, initData);
                    FabricSynthetic ingredientSynthetic = synthetic as FabricSynthetic;

                    IGameObject denim           = (IngredientFabric)GlobalFunctions.CreateObjectOutOfWorld(fabricDenimRK, null, initData);
                    FabricDenim ingredientDenim = denim as FabricDenim;

                    IGameObject satin           = (IngredientFabric)GlobalFunctions.CreateObjectOutOfWorld(fabricSatinRK, null, initData);
                    FabricSatin ingredientSatin = satin as FabricSatin;

                    if (ingredientKnitted != null)
                    {
                        if (!obj.Inventory.TryToAdd(ingredientKnitted))
                        {
                            SewingTable.print("Lyralei's SewingTable: Couldn't add Fabric Knitted, Destroyed item.");
                            ingredientKnitted.Destroy();
                            return(false);
                        }
                    }
                    if (ingredientLeather != null)
                    {
                        if (!obj.Inventory.TryToAdd(ingredientLeather))
                        {
                            SewingTable.print("Lyralei's SewingTable: Couldn't add Fabric Leather, Destroyed item.");
                            ingredientLeather.Destroy();
                            return(false);
                        }
                    }
                    if (ingredientSynthetic != null)
                    {
                        if (!obj.Inventory.TryToAdd(ingredientSynthetic))
                        {
                            SewingTable.print("Lyralei's SewingTable: Couldn't add Fabric Synthetic, Destroyed item.");
                            ingredientSynthetic.Destroy();
                            return(false);
                        }
                    }
                    if (ingredientCotton != null)
                    {
                        if (!obj.Inventory.TryToAdd(ingredientCotton))
                        {
                            SewingTable.print("Lyralei's SewingTable: Couldn't add Fabric Cotton, Destroyed item.");
                            ingredientCotton.Destroy();
                            return(false);
                        }
                    }
                    if (ingredientDenim != null)
                    {
                        if (!obj.Inventory.TryToAdd(ingredientDenim))
                        {
                            SewingTable.print("Lyralei's SewingTable: Couldn't add Fabric Denim, Destroyed item.");
                            ingredientDenim.Destroy();
                            return(false);
                        }
                    }
                    if (ingredientSatin != null)
                    {
                        if (!obj.Inventory.TryToAdd(ingredientSatin))
                        {
                            SewingTable.print("Lyralei's SewingTable: Couldn't add Fabric Satin, Destroyed item.");
                            ingredientSatin.Destroy();
                            return(false);
                        }
                    }
                }
                return(true);
            }
            return(false);
        }
        // If we know the type of fabric, use this one instead
        public static bool RemoveFabricForProject(GameObject obj, Sim actor, SewingSkill.FabricType type, int amount)
        {
            List <FabricCotton> listCotton  = actor.Inventory.FindAll <FabricCotton>(true);
            List <FabricCotton> list2Cotton = obj.Inventory.FindAll <FabricCotton>(true);

            List <FabricDenim> listDenim  = actor.Inventory.FindAll <FabricDenim>(true);
            List <FabricDenim> list2Denim = obj.Inventory.FindAll <FabricDenim>(true);

            List <FabricKnitted> listKnitted  = actor.Inventory.FindAll <FabricKnitted>(true);
            List <FabricKnitted> list2Knitted = obj.Inventory.FindAll <FabricKnitted>(true);

            List <FabricLeather> listLeather  = actor.Inventory.FindAll <FabricLeather>(true);
            List <FabricLeather> list2Leather = obj.Inventory.FindAll <FabricLeather>(true);

            List <FabricSatin> listSatin  = actor.Inventory.FindAll <FabricSatin>(true);
            List <FabricSatin> list2Satin = obj.Inventory.FindAll <FabricSatin>(true);

            List <FabricSynthetic> listSynthetic  = actor.Inventory.FindAll <FabricSynthetic>(true);
            List <FabricSynthetic> list2Synthetic = obj.Inventory.FindAll <FabricSynthetic>(true);

            List <FabricCotton>    list3Cotton    = new List <FabricCotton>();
            List <FabricDenim>     list3Denim     = new List <FabricDenim>();
            List <FabricKnitted>   list3Knitted   = new List <FabricKnitted>();
            List <FabricLeather>   list3Leather   = new List <FabricLeather>();
            List <FabricSatin>     list3Satin     = new List <FabricSatin>();
            List <FabricSynthetic> list3Synthetic = new List <FabricSynthetic>();

            if (obj != null && obj.Inventory != null)
            {
                if (type == SewingSkill.FabricType.Cotton)
                {
                    list3Cotton.AddRange(listCotton);
                    list3Cotton.AddRange(list2Cotton);
                    if (list3Cotton.Count < amount)
                    {
                        SewingTable.print("Lyralei's Sewing Table: all inventories don't have enough fabric in it");
                        return(false);
                    }
                    for (int j = 0; j < amount; j++)
                    {
                        FabricCotton fabric = list3Cotton[j];
                        if (!obj.Inventory.TryToRemove(fabric))
                        {
                            SewingTable.print("Lyralei's SewingTable: Couldn't add Fabric ingredient, Destroyed item.");
                            return(false);
                        }
                        list3Cotton.Remove(fabric);
                    }
                }

                if (type == SewingSkill.FabricType.Denim)
                {
                    list3Denim.AddRange(listDenim);
                    list3Denim.AddRange(list2Denim);
                    if (list3Denim.Count < amount)
                    {
                        SewingTable.print("Lyralei's Sewing Table: all inventories don't have enough fabric in it");
                        return(false);
                    }
                    for (int j = 0; j < amount; j++)
                    {
                        FabricDenim fabric = list3Denim[j];
                        if (!obj.Inventory.TryToRemove(fabric))
                        {
                            SewingTable.print("Lyralei's SewingTable: Couldn't add Fabric ingredient, Destroyed item.");
                            return(false);
                        }
                        list3Denim.Remove(fabric);
                    }
                }

                if (type == SewingSkill.FabricType.Knitted)
                {
                    list3Knitted.AddRange(listKnitted);
                    list3Knitted.AddRange(list2Knitted);
                    if (list3Knitted.Count < amount)
                    {
                        SewingTable.print("Lyralei's Sewing Table: all inventories don't have enough fabric in it");
                        return(false);
                    }
                    for (int j = 0; j < amount; j++)
                    {
                        FabricKnitted fabric = list3Knitted[j];
                        if (!obj.Inventory.TryToRemove(fabric))
                        {
                            SewingTable.print("Lyralei's SewingTable: Couldn't add Fabric ingredient, Destroyed item.");
                            return(false);
                        }
                        list3Knitted.Remove(fabric);
                    }
                }
                if (type == SewingSkill.FabricType.Leather)
                {
                    list3Leather.AddRange(listLeather);
                    list3Leather.AddRange(list2Leather);
                    if (list3Leather.Count < amount)
                    {
                        SewingTable.print("Lyralei's Sewing Table: all inventories don't have enough fabric in it");
                        return(false);
                    }
                    for (int j = 0; j < amount; j++)
                    {
                        FabricLeather fabric = list3Leather[j];
                        if (!obj.Inventory.TryToRemove(fabric))
                        {
                            SewingTable.print("Lyralei's SewingTable: Couldn't add Fabric ingredient, Destroyed item.");
                            return(false);
                        }
                        list3Leather.Remove(fabric);
                    }
                }
                if (type == SewingSkill.FabricType.Satin)
                {
                    list3Satin.AddRange(listSatin);
                    list3Satin.AddRange(list2Satin);
                    if (list3Satin.Count < amount)
                    {
                        SewingTable.print("Lyralei's Sewing Table: all inventories don't have enough fabric in it");
                        return(false);
                    }
                    for (int j = 0; j < amount; j++)
                    {
                        FabricSatin fabric = list3Satin[j];
                        if (!obj.Inventory.TryToRemove(fabric))
                        {
                            SewingTable.print("Lyralei's SewingTable: Couldn't add Fabric ingredient, Destroyed item.");
                            return(false);
                        }
                        list3Satin.Remove(fabric);
                    }
                }
                if (type == SewingSkill.FabricType.Synthetic)
                {
                    list3Synthetic.AddRange(listSynthetic);
                    list3Synthetic.AddRange(list2Synthetic);
                    if (list3Synthetic.Count < amount)
                    {
                        SewingTable.print("Lyralei's Sewing Table: all inventories don't have enough fabric in it");
                        return(false);
                    }
                    for (int j = 0; j < amount; j++)
                    {
                        FabricSynthetic fabric = list3Synthetic[j];
                        if (!obj.Inventory.TryToRemove(fabric))
                        {
                            SewingTable.print("Lyralei's SewingTable: Couldn't add Fabric ingredient, Destroyed item.");
                            return(false);
                        }
                        list3Synthetic.Remove(fabric);
                    }
                }
            }
            return(true);
        }