diff --git a/core/src/main/java/me/pikamug/quests/BukkitQuestsPlugin.java b/core/src/main/java/me/pikamug/quests/BukkitQuestsPlugin.java index 385b3386d..9be5dda84 100644 --- a/core/src/main/java/me/pikamug/quests/BukkitQuestsPlugin.java +++ b/core/src/main/java/me/pikamug/quests/BukkitQuestsPlugin.java @@ -101,7 +101,7 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { private BukkitItemListener itemListener; private BukkitCitizensListener citizensListener; private BukkitZnpcsListener znpcsListener; - private BukkitZnpcsPlusListener znpcsPlusListener; + private BukkitZnpcsApiListener znpcsPlusListener; private BukkitPlayerListener playerListener; private BukkitNpcEffectThread effectThread; private BukkitPlayerMoveThread moveThread; @@ -141,7 +141,7 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { itemListener = new BukkitItemListener(this); citizensListener = new BukkitCitizensListener(this); znpcsListener = new BukkitZnpcsListener(this); - znpcsPlusListener = new BukkitZnpcsPlusListener(this); + znpcsPlusListener = new BukkitZnpcsApiListener(this); playerListener = new BukkitPlayerListener(this); uniteListener = new BukkitUniteListener(); partiesListener = new BukkitPartiesListener(); @@ -519,7 +519,7 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { return znpcsListener; } - public BukkitZnpcsPlusListener getZNpcsPlusListener() { + public BukkitZnpcsApiListener getZNpcsPlusListener() { return znpcsPlusListener; } @@ -633,6 +633,11 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { depends.unlinkCitizens(); } } + if (depends.getZnpcsPlusApi() == null) { + getLogger().log(Level.SEVERE, + "ZNPCsPlus was enabled but NpcApiProvider was null. Disabling linkage."); + depends.unlinkZnpcsPlusApi(); + } customLoader.init(); questLoader.importQuests(); if (getConfigSettings().canDisableCommandFeedback()) { diff --git a/core/src/main/java/me/pikamug/quests/dependencies/BukkitDependencies.java b/core/src/main/java/me/pikamug/quests/dependencies/BukkitDependencies.java index a0c4c757d..bd652bfa7 100644 --- a/core/src/main/java/me/pikamug/quests/dependencies/BukkitDependencies.java +++ b/core/src/main/java/me/pikamug/quests/dependencies/BukkitDependencies.java @@ -30,7 +30,7 @@ import me.pikamug.quests.BukkitQuestsPlugin; import me.pikamug.quests.dependencies.reflect.denizen.DenizenAPI; import me.pikamug.quests.dependencies.reflect.worldguard.WorldGuardAPI; import me.pikamug.quests.listeners.BukkitCitizensListener; -import me.pikamug.quests.listeners.BukkitZnpcsListener; +import me.pikamug.quests.listeners.BukkitZnpcsApiListener; import me.pikamug.quests.player.Quester; import me.pikamug.unite.api.objects.PartyProvider; import net.citizensnpcs.api.CitizensPlugin; @@ -64,7 +64,7 @@ public class BukkitDependencies implements Dependencies { public static CitizensPlugin citizens = null; private static DenizenAPI denizen = null; private static AstralBooksAPI astralBooks = null; - public static ZNPCsPlus znpcsPlus = null; + public static ZNPCsPlus znpcsPlusLegacy = null; public static NpcApi znpcsPlusApi = null; private static PartiesAPI parties = null; private int npcEffectThread = -1; @@ -195,32 +195,15 @@ public class BukkitDependencies implements Dependencies { } public ZNPCsPlus getZnpcsPlus() { - if (znpcsPlus == null) { - linkZnpcsPlus(); - } - return znpcsPlus; - } - - public void linkZnpcsPlus() { - if (isPluginAvailable("ZNPCsPlus")) { + if (znpcsPlusLegacy == null) { try { Class.forName("lol.pyr.znpcsplus.ZNPCsPlus"); - znpcsPlus = (ZNPCsPlus) plugin.getServer().getPluginManager().getPlugin("ZNPCsPlus"); - boolean found = false; - for (final RegisteredListener listener : HandlerList.getRegisteredListeners(plugin)) { - if (listener.getListener() instanceof BukkitZnpcsListener) { - found = true; - } - } - if (!found) { - plugin.getServer().getPluginManager().registerEvents(plugin.getZnpcsListener(), plugin); - startNpcEffectThread(); - plugin.getLogger().info("Successfully linked Quests with ZNPCsPlus " - + znpcsPlus.getDescription().getVersion()); - } + znpcsPlusLegacy = (ZNPCsPlus) plugin.getServer().getPluginManager().getPlugin("ZNPCsPlus"); + startNpcEffectThread(); } catch (Exception ignored) { } } + return znpcsPlusLegacy; } public NpcApi getZnpcsPlusApi() { @@ -235,16 +218,29 @@ public class BukkitDependencies implements Dependencies { try { Class.forName("lol.pyr.znpcsplus.ZNpcsPlus"); znpcsPlusApi = NpcApiProvider.get(); - startNpcEffectThread(); - //noinspection ConstantConditions - plugin.getLogger().info("Successfully linked Quests with ZNPCsPlus " + plugin.getServer().getPluginManager().getPlugin("ZNPCsPlus").getDescription().getVersion()); + boolean found = false; + for (final RegisteredListener listener : HandlerList.getRegisteredListeners(plugin)) { + if (listener.getListener() instanceof BukkitZnpcsApiListener) { + found = true; + } + } + if (!found) { + plugin.getServer().getPluginManager().registerEvents(plugin.getZNpcsPlusListener(), plugin); + startNpcEffectThread(); + //noinspection ConstantConditions + plugin.getLogger().info("Successfully linked Quests with ZNPCsPlus " + plugin.getServer().getPluginManager().getPlugin("ZNPCsPlus").getDescription().getVersion()); + } } catch (Exception ignored) { } } } + public void unlinkZnpcsPlusApi() { + znpcsPlusApi = null; + } + public Set getZnpcsPlusUuids() { - if (znpcsPlus != null && isPluginAvailable("ZNPCsPlus")) { + if (znpcsPlusLegacy != null && isPluginAvailable("ZNPCsPlus")) { return io.github.znetworkw.znpcservers.npc.NPC.all().stream() .map(io.github.znetworkw.znpcservers.npc.NPC::getUUID).collect(Collectors.toSet()); } @@ -323,7 +319,7 @@ public class BukkitDependencies implements Dependencies { public @Nullable Location getNpcLocation(final UUID uuid) { if (citizens != null && citizens.getNPCRegistry().getByUniqueId(uuid) != null) { return citizens.getNPCRegistry().getByUniqueId(uuid).getStoredLocation(); - } else if (znpcsPlus != null && getZnpcsPlusUuids().contains(uuid)) { + } else if (znpcsPlusLegacy != null && getZnpcsPlusUuids().contains(uuid)) { final Optional opt = NPC.all().stream().filter(npc1 -> npc1.getUUID().equals(uuid)).findAny(); if (opt.isPresent()) { return opt.get().getLocation(); @@ -339,7 +335,7 @@ public class BukkitDependencies implements Dependencies { public @Nullable Entity getNpcEntity(final UUID uuid) { if (citizens != null && citizens.getNPCRegistry().getByUniqueId(uuid) != null) { return citizens.getNPCRegistry().getByUniqueId(uuid).getEntity(); - } else if (znpcsPlus != null && getZnpcsPlusUuids().contains(uuid)) { + } else if (znpcsPlusLegacy != null && getZnpcsPlusUuids().contains(uuid)) { final Optional opt = NPC.all().stream().filter(npc1 -> npc1.getUUID().equals(uuid)).findAny(); if (opt.isPresent()) { return (Entity) opt.get().getBukkitEntity(); @@ -352,7 +348,7 @@ public class BukkitDependencies implements Dependencies { final Entity npc; if (citizens != null && citizens.getNPCRegistry().getByUniqueId(uuid) != null) { return citizens.getNPCRegistry().getByUniqueId(uuid).getName(); - } else if (znpcsPlus != null && getZnpcsPlusUuids().contains(uuid)) { + } else if (znpcsPlusLegacy != null && getZnpcsPlusUuids().contains(uuid)) { final Optional opt = NPC.all().stream().filter(npc1 -> npc1.getUUID().equals(uuid)).findAny(); if (opt.isPresent()) { npc = (Entity) opt.get().getBukkitEntity(); @@ -375,7 +371,7 @@ public class BukkitDependencies implements Dependencies { public @Nullable UUID getUuidFromNpc(final Entity entity) { if (citizens != null && citizens.getNPCRegistry().isNPC(entity)) { return citizens.getNPCRegistry().getNPC(entity).getUniqueId(); - } else if (znpcsPlus != null && getZnpcsPlusUuids().contains(entity.getUniqueId())) { + } else if (znpcsPlusLegacy != null && getZnpcsPlusUuids().contains(entity.getUniqueId())) { final Optional opt = NPC.all().stream().filter(npc1 -> npc1.getUUID().equals(entity.getUniqueId())).findAny(); if (opt.isPresent()) { return opt.get().getUUID(); diff --git a/core/src/main/java/me/pikamug/quests/listeners/BukkitZnpcsPlusListener.java b/core/src/main/java/me/pikamug/quests/listeners/BukkitZnpcsApiListener.java similarity index 99% rename from core/src/main/java/me/pikamug/quests/listeners/BukkitZnpcsPlusListener.java rename to core/src/main/java/me/pikamug/quests/listeners/BukkitZnpcsApiListener.java index 87ed6a2c9..d073eaf20 100644 --- a/core/src/main/java/me/pikamug/quests/listeners/BukkitZnpcsPlusListener.java +++ b/core/src/main/java/me/pikamug/quests/listeners/BukkitZnpcsApiListener.java @@ -28,11 +28,14 @@ import java.util.LinkedList; import java.util.Map; import java.util.UUID; -public class BukkitZnpcsPlusListener implements Listener { +/** + * Listener for ZNPCsPlus 2.x+ + */ +public class BukkitZnpcsApiListener implements Listener { private final BukkitQuestsPlugin plugin; - public BukkitZnpcsPlusListener(final BukkitQuestsPlugin plugin) { + public BukkitZnpcsApiListener(final BukkitQuestsPlugin plugin) { this.plugin = plugin; } diff --git a/core/src/main/java/me/pikamug/quests/listeners/BukkitZnpcsListener.java b/core/src/main/java/me/pikamug/quests/listeners/BukkitZnpcsListener.java index d8fda48cd..32bb53594 100644 --- a/core/src/main/java/me/pikamug/quests/listeners/BukkitZnpcsListener.java +++ b/core/src/main/java/me/pikamug/quests/listeners/BukkitZnpcsListener.java @@ -38,6 +38,9 @@ import java.util.LinkedList; import java.util.Map; import java.util.UUID; +/** + * Listener for legacy ZNPCsPlus 1.x + */ public class BukkitZnpcsListener implements Listener { private final BukkitQuestsPlugin plugin; diff --git a/core/src/main/java/me/pikamug/quests/util/BukkitConfigUtil.java b/core/src/main/java/me/pikamug/quests/util/BukkitConfigUtil.java index c6df431ce..1cc61a5dc 100644 --- a/core/src/main/java/me/pikamug/quests/util/BukkitConfigUtil.java +++ b/core/src/main/java/me/pikamug/quests/util/BukkitConfigUtil.java @@ -168,7 +168,7 @@ public class BukkitConfigUtil { if (parsed.contains("")) { if (BukkitDependencies.citizens != null) { parsed = parsed.replace("", BukkitDependencies.citizens.getNPCRegistry().getByUniqueId(npc).getName()); - } else if (BukkitDependencies.znpcsPlus != null) { + } else if (BukkitDependencies.znpcsPlusLegacy != null) { String name = "null"; final Optional opt = NPC.all().stream().filter(npc1 -> npc1.getUUID().equals(npc)).findAny(); if (opt.isPresent()) { @@ -180,6 +180,8 @@ public class BukkitConfigUtil { } } parsed = parsed.replace("", name); + } else if (BukkitDependencies.znpcsPlusApi != null) { + // TODO - Find some way to get NPC name } } return parsed;