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);
     }
 }