public static CraftItem GetRandomApplicableCraftItem(Faction faction, WorldManager World) { InitializeCraftLibrary(); const int maxIters = 100; for (int i = 0; i < maxIters; i++) { var item = Datastructures.SelectRandom(CraftItems.Where(k => k.Value.Type == CraftItem.CraftType.Resource)); if (!World.HasResources(item.Value.RequiredResources)) { continue; } if (!faction.OwnedObjects.Any(o => o.Tags.Contains(item.Value.CraftLocation))) { continue; } return(item.Value); } return(null); }