A stable modding interface between Techblox and mods https://mod.exmods.org/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
2.7KB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Reflection;
  7. using Harmony;
  8. using GamecraftModdingAPI.Utility;
  9. using GamecraftModdingAPI.Events;
  10. namespace GamecraftModdingAPI
  11. {
  12. /// <summary>
  13. /// The main class of the GamecraftModdingAPI.
  14. /// Use this to initialize the API before calling it.
  15. /// </summary>
  16. static class Main
  17. {
  18. private static HarmonyInstance harmony;
  19. /// <summary>
  20. /// Initializes the GamecraftModdingAPI.
  21. /// This should be called ASAP after Gamecraft starts up.
  22. /// Ideally, this should be called from your main Plugin class's OnApplicationStart() method.
  23. /// </summary>
  24. public static void Init()
  25. {
  26. var currentAssembly = Assembly.GetExecutingAssembly();
  27. if (harmony == null)
  28. {
  29. harmony = HarmonyInstance.Create(currentAssembly.GetName().Name);
  30. harmony.PatchAll(currentAssembly);
  31. }
  32. // create default event emitters
  33. EventManager.AddEventEmitter(new SimpleEventEmitterEngine(EventType.ApplicationInitialized, "GamecraftModdingAPIApplicationInitializedEventEmitter", false));
  34. EventManager.AddEventEmitter(new SimpleEventEmitterEngine(EventType.Menu, "GamecraftModdingAPIMenuActivatedEventEmitter", false));
  35. EventManager.AddEventEmitter(new SimpleEventEmitterEngine(EventType.MenuSwitchedTo, "GamecraftModdingAPIMenuSwitchedToEventEmitter", false)); // TODO
  36. EventManager.AddEventEmitter(new SimpleEventEmitterEngine(EventType.Game, "GamecraftModdingAPIGameActivatedEventEmitter", false));
  37. EventManager.AddEventEmitter(new SimpleEventEmitterEngine(EventType.GameReloaded, "GamecraftModdingAPIGameReloadedEventEmitter", false)); // TODO
  38. EventManager.AddEventEmitter(new SimpleEventEmitterEngine(EventType.GameSwitchedTo, "GamecraftModdingAPIGameSwitchedToEventEmitter", false)); // TODO
  39. Logging.Log($"{currentAssembly.GetName().Name} {currentAssembly.GetName().Version} init & patch complete");
  40. }
  41. /// <summary>
  42. /// Shuts down & cleans up the GamecraftModdingAPI.
  43. /// This should be called ASAP before Gamecraft quits.
  44. /// Ideally, this should be called from your main Plugin class's OnApplicationQuit() method.
  45. /// </summary>
  46. public static void Shutdown()
  47. {
  48. var currentAssembly = Assembly.GetExecutingAssembly();
  49. harmony.UnpatchAll(currentAssembly.GetName().Name);
  50. Logging.Log($"{currentAssembly.GetName().Name} {currentAssembly.GetName().Version} shutdown & unpatch complete");
  51. }
  52. }
  53. }