/// <summary>Returns an unused Short ID for a new creature to use.</summary>
        private int GetUnusedShortID()
        {
            int newShortID = 1;

            // Gather all current ShortIDs
            List <int> usedIDs = new List <int>();

            foreach (Horse horse in ModApi.GetHorses())
            {
                usedIDs.Add(GetShortID(horse));
            }
            foreach (Pet pet in ModApi.GetPets())
            {
                usedIDs.Add(GetShortID(pet));
            }
            foreach (FarmAnimal animal in ModApi.GetAnimals())
            {
                usedIDs.Add(GetShortID(animal));
            }

            // Find an unused ShortID and return it
            while (usedIDs.Contains(newShortID))
            {
                newShortID++;
            }
            return(newShortID);
        }
        private static Character GetCreature(long longID)
        {
            // Check that LongID belongs to a creature in the database, or is otherwise a Stray or WildHorse.
            if (IDToCategory.ContainsKey(longID))
            {
                switch (IDToCategory[longID])
                {
                case CreatureCategory.Pet:
                    foreach (Pet pet in ModApi.GetPets())
                    {
                        if (GetLongID(pet) == longID)
                        {
                            return(pet);
                        }
                    }
                    return(null);

                case CreatureCategory.Horse:
                    foreach (Horse horse in ModApi.GetHorses())
                    {
                        if (GetLongID(horse) == longID)
                        {
                            return(horse);
                        }
                    }
                    return(null);

                case CreatureCategory.Animal:
                    foreach (FarmAnimal animal in ModApi.GetAnimals())
                    {
                        if (GetLongID(animal) == longID)
                        {
                            return(animal);
                        }
                    }
                    return(null);

                default:
                    return(null);
                }
            }
            else
            {
                if (ModApi.IsStray(longID))
                {
                    if (Creator.StrayInfo != null)
                    {
                        return(Creator.StrayInfo.PetInstance);
                    }
                }
                else if (ModApi.IsWildHorse(longID))
                {
                    if (Creator.HorseInfo != null)
                    {
                        return(Creator.HorseInfo.HorseInstance);
                    }
                }
                return(null);
            }
        }
 /// <summary>Initiate A&S data on farm</summary>
 public void UpdateCreatureCount()
 {
     // TODO: Put this where it belongs. Use to load game, then check in UpdateTicked to make sure all farmhands and host have animals and skins known
     if (Game1.getFarm() != null)
     {
         Game1.getFarm().modData[$"{this.ModManifest.UniqueID}/count-farmanimals"] = Game1.getFarm().getAllFarmAnimals().Count.ToString();
         Game1.getFarm().modData[$"{this.ModManifest.UniqueID}/count-pets"]        = ModApi.GetPets().Count().ToString();
         Game1.getFarm().modData[$"{this.ModManifest.UniqueID}/count-horses"]      = ModApi.GetHorses().Count().ToString();
     }
 }