package me.lethunderhawk.fluxapi.npc; import me.lethunderhawk.fluxapi.FluxService; import me.lethunderhawk.fluxapi.npc.abstraction.DummyNPC; import me.lethunderhawk.fluxapi.npc.abstraction.NPCLocation; import me.lethunderhawk.fluxapi.npc.abstraction.NPCOptions; import me.lethunderhawk.fluxapi.npc.command.NPCCommand; import me.lethunderhawk.fluxapi.npc.listener.NPCListener; import me.lethunderhawk.fluxapi.npc.listener.WorldLoadListener; import me.lethunderhawk.fluxapi.npc.manager.NPCManager; import me.lethunderhawk.fluxapi.npc.registry.NPCRegistry; import me.lethunderhawk.fluxapi.util.config.ConfigLoader; import me.lethunderhawk.fluxapi.util.interfaces.BazaarFluxModule; import org.bukkit.Bukkit; import org.bukkit.configuration.serialization.ConfigurationSerialization; import org.bukkit.event.HandlerList; import org.bukkit.plugin.java.JavaPlugin; public final class NPCModule extends BazaarFluxModule { private final String saveLocation = "/npc/npcs.yml"; private NPCManager npcManager; private NPCListener listener; private WorldLoadListener worldLoadListener; public NPCModule(JavaPlugin plugin) { super(plugin); } public String getPrefix() { return "[NPC]"; } @Override public void onEnable() { FluxService.registerModule(NPCModule.class, this); registerBaseNPCSerializables(); if(NPCRegistry.isRegistered()){ finalizeRegistration(); }else{ printWaitingNotif(); } registerListeners(); NPCCommand npcCommand = new NPCCommand(this); plugin.getCommand("npc").setExecutor(npcCommand); plugin.getCommand("npc").setTabCompleter(npcCommand); } private void registerListeners() { this.listener = new NPCListener(); plugin.getServer().getPluginManager().registerEvents(listener, plugin); this.worldLoadListener = new WorldLoadListener(); plugin.getServer().getPluginManager().registerEvents(worldLoadListener, plugin); } private void printWaitingNotif() { Bukkit.getLogger().info("FluxAPI enabled. Waiting for NPC registration..."); } private void registerBaseNPCSerializables() { ConfigurationSerialization.registerClass(NPCOptions.class); ConfigurationSerialization.registerClass(NPCManager.class); ConfigurationSerialization.registerClass(DummyNPC.class); ConfigurationSerialization.registerClass(NPCLocation.class); } public void finalizeRegistration() { this.npcManager = FluxService.get(ConfigLoader.class).loadObject( saveLocation, "manager", NPCManager.class ); if(npcManager == null) { npcManager = new NPCManager(); } FluxService.register(NPCManager.class, npcManager); npcManager.initializeSpawning(); plugin.getLogger().info("NPC Extension Enabled and fully registered!"); } @Override public void onDisable() { if(npcManager != null) { npcManager.saveNPCsToFile(saveLocation); npcManager.deleteAllNpcEntities(); } unregisterListeners(); FluxService.unregister(NPCManager.class); npcManager = null; } private void unregisterListeners() { HandlerList.unregisterAll(listener); listener = null; HandlerList.unregisterAll(worldLoadListener); worldLoadListener = null; } }