internal static Dictionary <string, List <string> > dependencyCache; // for some internal features that need to lookup dependencies after load internal static LocalMod[] FindMods() { Directory.CreateDirectory(ModLoader.ModPath); var mods = new List <LocalMod>(); foreach (string fileName in Directory.GetFiles(ModLoader.ModPath, "*.tmod", SearchOption.TopDirectoryOnly)) { if (Path.GetFileName(fileName) == "temporaryDownload.tmod") { continue; } var lastModified = File.GetLastWriteTime(fileName); if (!modsDirCache.TryGetValue(fileName, out var mod) || mod.lastModified != lastModified) { try { var modFile = new TmodFile(fileName); modFile.Read(); modFile.VerifyCoreFiles(); mod = new LocalMod(modFile) { lastModified = lastModified }; modFile.Close(); } catch (Exception e) { if (!readFailures.Contains(fileName)) { Logging.tML.Warn("Failed to read " + fileName, e); } else { readFailures.Add(fileName); } continue; } modsDirCache[fileName] = mod; } mods.Add(mod); } return(mods.OrderBy(x => x.Name, StringComparer.InvariantCulture).ToArray()); }