|
|
@@ -2,21 +2,25 @@ 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.profile.config.ConfigLoader;
|
|
|
+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 class NPCModule extends BazaarFluxModule {
|
|
|
+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);
|
|
|
}
|
|
|
@@ -27,40 +31,73 @@ public class NPCModule extends BazaarFluxModule {
|
|
|
|
|
|
@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();
|
|
|
-
|
|
|
- this.listener = new NPCListener();
|
|
|
- plugin.getServer().getPluginManager().registerEvents(listener, plugin);
|
|
|
-
|
|
|
- NPCCommand npcCommand = new NPCCommand(this);
|
|
|
- plugin.getCommand("npc").setExecutor(npcCommand);
|
|
|
- plugin.getCommand("npc").setTabCompleter(npcCommand);
|
|
|
-
|
|
|
-
|
|
|
- plugin.getLogger().info("NPC Extension Enabled");
|
|
|
+ plugin.getLogger().info("NPC Extension Enabled and fully registered!");
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void onDisable() {
|
|
|
- npcManager.saveNPCsToFile(saveLocation);
|
|
|
- npcManager.deleteAllNpcEntities();
|
|
|
+ if(npcManager != null) {
|
|
|
+ npcManager.saveNPCsToFile(saveLocation);
|
|
|
+ npcManager.deleteAllNpcEntities();
|
|
|
+ }
|
|
|
+ unregisterListeners();
|
|
|
|
|
|
- HandlerList.unregisterAll(listener);
|
|
|
FluxService.unregister(NPCManager.class);
|
|
|
- listener = null;
|
|
|
+
|
|
|
npcManager = null;
|
|
|
}
|
|
|
+
|
|
|
+ private void unregisterListeners() {
|
|
|
+ HandlerList.unregisterAll(listener);
|
|
|
+ listener = null;
|
|
|
+ HandlerList.unregisterAll(worldLoadListener);
|
|
|
+ worldLoadListener = null;
|
|
|
+ }
|
|
|
}
|