public static void Init() { stopwatch.Start(); // if the manifest directory is null, there is something seriously wrong var manifestDirectory = Path.GetDirectoryName(VersionManifestUtilities.MANIFEST_FILEPATH); if (manifestDirectory == null) { return; } // setup directories ModDirectory = Path.GetFullPath( Path.Combine(manifestDirectory, Path.Combine(Path.Combine(Path.Combine( "..", ".."), ".."), MODS_DIRECTORY_NAME))); StreamingAssetsDirectory = Path.GetFullPath(Path.Combine(manifestDirectory, "..")); GameDirectory = Path.GetFullPath(Path.Combine(Path.Combine(StreamingAssetsDirectory, ".."), "..")); ModTekDirectory = Path.Combine(ModDirectory, MODTEK_DIRECTORY_NAME); CacheDirectory = Path.Combine(ModTekDirectory, CACHE_DIRECTORY_NAME); DatabaseDirectory = Path.Combine(ModTekDirectory, DATABASE_DIRECTORY_NAME); LogPath = Path.Combine(ModTekDirectory, LOG_NAME); HarmonySummaryPath = Path.Combine(ModTekDirectory, HARMONY_SUMMARY_FILE_NAME); LoadOrderPath = Path.Combine(ModTekDirectory, LOAD_ORDER_FILE_NAME); MergeCachePath = Path.Combine(CacheDirectory, MERGE_CACHE_FILE_NAME); TypeCachePath = Path.Combine(CacheDirectory, TYPE_CACHE_FILE_NAME); ModDBPath = Path.Combine(DatabaseDirectory, MDD_FILE_NAME); DBCachePath = Path.Combine(DatabaseDirectory, DB_CACHE_FILE_NAME); // creates the directories above it as well Directory.CreateDirectory(CacheDirectory); Directory.CreateDirectory(DatabaseDirectory); // create log file, overwritting if it's already there using (var logWriter = File.CreateText(LogPath)) { logWriter.WriteLine($"ModTek v{Assembly.GetExecutingAssembly().GetName().Version} -- {DateTime.Now}"); } // create all of the caches dbCache = LoadOrCreateDBCache(DBCachePath); jsonMergeCache = LoadOrCreateMergeCache(MergeCachePath); typeCache = LoadOrCreateTypeCache(TypeCachePath); // init harmony and patch the stuff that comes with ModTek (contained in Patches.cs) var harmony = HarmonyInstance.Create("io.github.mpstark.ModTek"); harmony.PatchAll(Assembly.GetExecutingAssembly()); stopwatch.Stop(); }
// CACHES internal static MergeCache LoadOrCreateMergeCache(string path) { MergeCache mergeCache; if (File.Exists(path)) { try { mergeCache = JsonConvert.DeserializeObject <MergeCache>(File.ReadAllText(path)); Log("Loaded merge cache."); return(mergeCache); } catch (Exception e) { Log("Loading merge cache failed -- will rebuild it."); Log($"\t{e.Message}"); } } // create a new one if it doesn't exist or couldn't be added' Log("Building new Merge Cache."); mergeCache = new MergeCache(); return(mergeCache); }
public static void Init() { var manifestDirectory = Path.GetDirectoryName(VersionManifestUtilities.MANIFEST_FILEPATH); // if the manifest directory is null, there is something seriously wrong if (manifestDirectory == null) { return; } ModDirectory = Path.GetFullPath( Path.Combine(manifestDirectory, Path.Combine(Path.Combine(Path.Combine( "..", ".."), ".."), MODS_DIRECTORY_NAME))); StreamingAssetsDirectory = Path.GetFullPath(Path.Combine(manifestDirectory, "..")); GameDirectory = Path.GetFullPath(Path.Combine(Path.Combine(StreamingAssetsDirectory, ".."), "..")); ModTekDirectory = Path.Combine(ModDirectory, MODTEK_DIRECTORY_NAME); LogPath = Path.Combine(ModTekDirectory, LOG_NAME); CacheDirectory = Path.Combine(ModTekDirectory, CACHE_DIRECTORY_NAME); MergeCachePath = Path.Combine(CacheDirectory, MERGE_CACHE_FILE_NAME); TypeCachePath = Path.Combine(CacheDirectory, TYPE_CACHE_FILE_NAME); // creates the directories above it as well Directory.CreateDirectory(CacheDirectory); // create log file, overwritting if it's already there using (var logWriter = File.CreateText(LogPath)) logWriter.WriteLine($"ModTek v{Assembly.GetExecutingAssembly().GetName().Version} -- {DateTime.Now}"); // init harmony and patch the stuff that comes with ModTek (contained in Patches.cs) var harmony = HarmonyInstance.Create("io.github.mpstark.ModTek"); harmony.PatchAll(Assembly.GetExecutingAssembly()); // load merge cache if it exists if (File.Exists(MergeCachePath)) { try { JsonMergeCache = JsonConvert.DeserializeObject <MergeCache>(File.ReadAllText(MergeCachePath)); Log("Loaded merge cache."); } catch (Exception e) { JsonMergeCache = new MergeCache(); Log("Loading merge cache failed -- will rebuild it."); Log($"\t{e.Message}"); } } else { JsonMergeCache = new MergeCache(); } // load type cache if it exists if (File.Exists(TypeCachePath)) { try { TypeCache = JsonConvert.DeserializeObject <Dictionary <string, List <string> > >(File.ReadAllText(TypeCachePath)); Log("Loaded type cache."); } catch (Exception e) { TypeCache = new Dictionary <string, List <string> >(); Log("Loading type cache failed -- will rebuild it."); Log($"\t{e.Message}"); } } else { TypeCache = new Dictionary <string, List <string> >(); } }