NPCModule.java 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package me.lethunderhawk.fluxapi.npc;
  2. import me.lethunderhawk.fluxapi.FluxService;
  3. import me.lethunderhawk.fluxapi.npc.abstraction.DummyNPC;
  4. import me.lethunderhawk.fluxapi.npc.abstraction.NPCLocation;
  5. import me.lethunderhawk.fluxapi.npc.abstraction.NPCOptions;
  6. import me.lethunderhawk.fluxapi.npc.command.NPCCommand;
  7. import me.lethunderhawk.fluxapi.npc.listener.NPCListener;
  8. import me.lethunderhawk.fluxapi.npc.listener.WorldLoadListener;
  9. import me.lethunderhawk.fluxapi.npc.manager.NPCManager;
  10. import me.lethunderhawk.fluxapi.npc.registry.NPCRegistry;
  11. import me.lethunderhawk.fluxapi.util.config.ConfigLoader;
  12. import me.lethunderhawk.fluxapi.util.interfaces.BazaarFluxModule;
  13. import org.bukkit.Bukkit;
  14. import org.bukkit.configuration.serialization.ConfigurationSerialization;
  15. import org.bukkit.event.HandlerList;
  16. import org.bukkit.plugin.java.JavaPlugin;
  17. public final class NPCModule extends BazaarFluxModule {
  18. private final String saveLocation = "/npc/npcs.yml";
  19. private NPCManager npcManager;
  20. private NPCListener listener;
  21. private WorldLoadListener worldLoadListener;
  22. public NPCModule(JavaPlugin plugin) {
  23. super(plugin);
  24. }
  25. public String getPrefix() {
  26. return "[NPC]";
  27. }
  28. @Override
  29. public void onEnable() {
  30. FluxService.registerModule(NPCModule.class, this);
  31. registerBaseNPCSerializables();
  32. if(NPCRegistry.isRegistered()){
  33. finalizeRegistration();
  34. }else{
  35. printWaitingNotif();
  36. }
  37. registerListeners();
  38. NPCCommand npcCommand = new NPCCommand(this);
  39. plugin.getCommand("npc").setExecutor(npcCommand);
  40. plugin.getCommand("npc").setTabCompleter(npcCommand);
  41. }
  42. private void registerListeners() {
  43. this.listener = new NPCListener();
  44. plugin.getServer().getPluginManager().registerEvents(listener, plugin);
  45. this.worldLoadListener = new WorldLoadListener();
  46. plugin.getServer().getPluginManager().registerEvents(worldLoadListener, plugin);
  47. }
  48. private void printWaitingNotif() {
  49. Bukkit.getLogger().info("FluxAPI enabled. Waiting for NPC registration...");
  50. }
  51. private void registerBaseNPCSerializables() {
  52. ConfigurationSerialization.registerClass(NPCOptions.class);
  53. ConfigurationSerialization.registerClass(NPCManager.class);
  54. ConfigurationSerialization.registerClass(DummyNPC.class);
  55. ConfigurationSerialization.registerClass(NPCLocation.class);
  56. }
  57. public void finalizeRegistration() {
  58. this.npcManager = FluxService.get(ConfigLoader.class).loadObject(
  59. saveLocation,
  60. "manager",
  61. NPCManager.class
  62. );
  63. if(npcManager == null) {
  64. npcManager = new NPCManager();
  65. }
  66. FluxService.register(NPCManager.class, npcManager);
  67. npcManager.initializeSpawning();
  68. plugin.getLogger().info("NPC Extension Enabled and fully registered!");
  69. }
  70. @Override
  71. public void onDisable() {
  72. if(npcManager != null) {
  73. npcManager.saveNPCsToFile(saveLocation);
  74. npcManager.deleteAllNpcEntities();
  75. }
  76. unregisterListeners();
  77. FluxService.unregister(NPCManager.class);
  78. npcManager = null;
  79. }
  80. private void unregisterListeners() {
  81. HandlerList.unregisterAll(listener);
  82. listener = null;
  83. HandlerList.unregisterAll(worldLoadListener);
  84. worldLoadListener = null;
  85. }
  86. }