private static void UnloadModInternal(GadgetMod mod) { foreach (GadgetMod dependency in GadgetMods.ListAllMods().Where(x => x.ModDependencies.Contains(mod.Name))) { if (dependency.Name != "GadgetCore") { UnloadModInternal(mod); } } mod.IsLoaded = false; GadgetMods.UnregisterMod(mod); GadgetCore.LoadedAssemblies.Remove(mod.Assembly.GetName().Name); }
internal static void LoadAllMods() { try { BatchLoading = true; Logger.Log("Loading mod files..."); foreach (string modDir in Directory.GetDirectories(GadgetPaths.ModsPath)) { LoadModDir(modDir); } foreach (string modFile in Directory.GetFiles(GadgetPaths.ModsPath)) { LoadModFile(modFile); } Logger.Log("Done loading mod files."); Logger.Log("Loading mods..."); foreach (GadgetMod mod in GadgetMods.ListAllMods(true)) { LoadGadgetMod(mod); } Logger.Log("Done loading mods."); if (GadgetCoreAPI.GetUMFAPI() != null) { Logger.Log("Loading Gadgets inside UMF mods..."); foreach (string mod in GadgetCoreAPI.GetUMFAPI().GetModNamesEnabled()) { ProcessUMFMod(mod); } Logger.Log("Done loading Gadgets inside UMF mods."); } Logger.Log("Sorting Gadgets..."); Gadgets.SortGadgets(); Logger.Log("Done sorting Gadgets."); Logger.Log("Queueing Gadgets for initialization..."); foreach (GadgetInfo gadget in Gadgets.ListAllEnabledGadgetInfos()) { QueuedGadgets.Add(gadget); } Logger.Log("Done queueing Gadgets."); EnableQueuedGadgets(); BatchLoading = false; Logger.Log("Initial load complete."); } catch (Exception e) { Logger.LogError("Uncaught exception during mod load: " + e); } }