diff --git a/api/pom.xml b/api/pom.xml
index 9d4cf8bfd..92485167b 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -124,6 +124,12 @@
3.1.6
provided
+
+ com.github.gonalez
+ znpc-servers
+ 21a0650
+ provided
+
com.github.PikaMug
Unite
diff --git a/api/src/main/java/me/blackvein/quests/dependencies/IDependencies.java b/api/src/main/java/me/blackvein/quests/dependencies/IDependencies.java
index 58dc68b27..ff0716655 100644
--- a/api/src/main/java/me/blackvein/quests/dependencies/IDependencies.java
+++ b/api/src/main/java/me/blackvein/quests/dependencies/IDependencies.java
@@ -18,6 +18,7 @@ import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.mcMMO;
import com.herocraftonline.heroes.Heroes;
import com.herocraftonline.heroes.characters.Hero;
+import io.github.znetworkw.znpcservers.ServersNPC;
import me.blackvein.quests.player.IQuester;
import me.blackvein.quests.reflect.denizen.DenizenAPI;
import me.blackvein.quests.reflect.worldguard.WorldGuardAPI;
@@ -61,15 +62,15 @@ public interface IDependencies {
CitizensBooksAPI getCitizensBooksApi();
+ ServersNPC getZnpcs();
+
PartiesAPI getPartiesApi();
boolean isPluginAvailable(final String pluginName);
boolean runDenizenScript(final String scriptName, final IQuester quester, final UUID uuid);
- Location getNPCLocation(final int id);
-
- String getNPCName(final int id);
+ Location getNPCLocation(final UUID uuid);
String getNPCName(final UUID uuid);
diff --git a/api/src/main/java/me/blackvein/quests/quests/IQuest.java b/api/src/main/java/me/blackvein/quests/quests/IQuest.java
index db63e8a70..24219549f 100644
--- a/api/src/main/java/me/blackvein/quests/quests/IQuest.java
+++ b/api/src/main/java/me/blackvein/quests/quests/IQuest.java
@@ -14,13 +14,13 @@ package me.blackvein.quests.quests;
import me.blackvein.quests.actions.IAction;
import me.blackvein.quests.player.IQuester;
-import net.citizensnpcs.api.npc.NPC;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin;
import java.util.LinkedList;
+import java.util.UUID;
public interface IQuest extends Comparable {
Plugin getPlugin();
@@ -55,9 +55,11 @@ public interface IQuest extends Comparable {
LinkedList getStages();
- NPC getNpcStart();
+ UUID getNpcStart();
- void setNpcStart(final NPC npcStart);
+ void setNpcStart(final UUID npcStart);
+
+ String getNpcStartName();
Location getBlockStart();
diff --git a/core/pom.xml b/core/pom.xml
index 1f71bc046..c67259972 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -124,6 +124,12 @@
3.1.6
provided
+
+ com.github.gonalez
+ znpc-servers
+ 21a0650
+ provided
+
com.github.PikaMug
Unite
diff --git a/core/src/main/java/me/blackvein/quests/Dependencies.java b/core/src/main/java/me/blackvein/quests/Dependencies.java
index d5c133551..3a67c497f 100644
--- a/core/src/main/java/me/blackvein/quests/Dependencies.java
+++ b/core/src/main/java/me/blackvein/quests/Dependencies.java
@@ -21,8 +21,10 @@ import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.util.player.UserManager;
import com.herocraftonline.heroes.Heroes;
import com.herocraftonline.heroes.characters.Hero;
+import io.github.znetworkw.znpcservers.ServersNPC;
+import io.github.znetworkw.znpcservers.npc.NPC;
import me.blackvein.quests.dependencies.IDependencies;
-import me.blackvein.quests.listeners.NpcListener;
+import me.blackvein.quests.listeners.CitizensListener;
import me.blackvein.quests.player.IQuester;
import me.blackvein.quests.reflect.denizen.DenizenAPI;
import me.blackvein.quests.reflect.worldguard.WorldGuardAPI;
@@ -32,6 +34,7 @@ import net.citizensnpcs.api.CitizensPlugin;
import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.permission.Permission;
import org.bukkit.Location;
+import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.plugin.RegisteredListener;
@@ -39,10 +42,13 @@ import org.bukkit.plugin.RegisteredServiceProvider;
import ro.nicuch.citizensbooks.CitizensBooksAPI;
import ro.nicuch.citizensbooks.CitizensBooksPlugin;
+import java.util.Collections;
import java.util.HashSet;
import java.util.Objects;
+import java.util.Optional;
import java.util.Set;
import java.util.UUID;
+import java.util.stream.Collectors;
public class Dependencies implements IDependencies {
@@ -59,6 +65,7 @@ public class Dependencies implements IDependencies {
public static CitizensPlugin citizens = null;
private static DenizenAPI denizenApi = null;
private static CitizensBooksAPI citizensBooks = null;
+ private static ServersNPC znpcs = null;
private static PartiesAPI parties = null;
public Dependencies(final Quests plugin) {
@@ -160,12 +167,12 @@ public class Dependencies implements IDependencies {
citizens = (CitizensPlugin) plugin.getServer().getPluginManager().getPlugin("Citizens");
boolean found = false;
for (final RegisteredListener listener : HandlerList.getRegisteredListeners(plugin)) {
- if (listener.getListener() instanceof NpcListener) {
+ if (listener.getListener() instanceof CitizensListener) {
found = true;
}
}
if (!found) {
- plugin.getServer().getPluginManager().registerEvents(plugin.getNpcListener(), plugin);
+ plugin.getServer().getPluginManager().registerEvents(plugin.getCitizensListener(), plugin);
if (plugin.getSettings().canNpcEffects()) {
plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, plugin.getNpcEffectThread(),
20, 20);
@@ -202,6 +209,22 @@ public class Dependencies implements IDependencies {
return citizensBooks;
}
+ public ServersNPC getZnpcs() {
+ if (znpcs == null) {
+ znpcs = (ServersNPC) plugin.getServer().getPluginManager().getPlugin("ServersNPC");
+ }
+ return znpcs;
+ }
+
+ public Set getZnpcsUuids() {
+ if (znpcs != null && isPluginAvailable("ServersNPC")) {
+ // TODO - it seems ZNPCs UUIDs do not persist restart
+ return io.github.znetworkw.znpcservers.npc.NPC.all().stream()
+ .map(io.github.znetworkw.znpcservers.npc.NPC::getUUID).collect(Collectors.toSet());
+ }
+ return Collections.emptySet();
+ }
+
public PartiesAPI getPartiesApi() {
if (parties == null && isPluginAvailable("Parties")) {
try {
@@ -226,7 +249,6 @@ public class Dependencies implements IDependencies {
} catch (final Exception e) {
e.printStackTrace();
}
-
}
return false;
}
@@ -238,7 +260,7 @@ public class Dependencies implements IDependencies {
if (rsp != null) {
economy = rsp.getProvider();
}
- return (economy != null);
+ return economy != null;
} catch (final Exception e) {
return false;
}
@@ -250,7 +272,7 @@ public class Dependencies implements IDependencies {
if (rsp != null) {
permission = rsp.getProvider();
}
- return (permission != null);
+ return permission != null;
}
private boolean setupParty() {
@@ -265,49 +287,41 @@ public class Dependencies implements IDependencies {
}
}
}
- return (partyProvider != null);
+ return partyProvider != null;
}
public boolean runDenizenScript(final String scriptName, final IQuester quester, final UUID uuid) {
return plugin.getDenizenTrigger().runDenizenScript(scriptName, quester, uuid);
}
- /**
- * @deprecated Use {@link #getNPCLocation(UUID)}
- */
- public Location getNPCLocation(final int id) {
- if (citizens != null) {
- return citizens.getNPCRegistry().getById(id).getStoredLocation();
- } else {
- return null;
- }
- }
-
public Location getNPCLocation(final UUID uuid) {
- if (citizens != null) {
+ if (citizens != null && citizens.getNPCRegistry().getByUniqueId(uuid) != null) {
return citizens.getNPCRegistry().getByUniqueId(uuid).getStoredLocation();
- } else {
- return null;
- }
- }
-
- /**
- * @deprecated Use {@link #getNPCName(UUID)}
- */
- public String getNPCName(final int id) {
- if (citizens != null) {
- return citizens.getNPCRegistry().getById(id).getName();
- } else {
- return null;
+ } else if (getZnpcsUuids().contains(uuid)) {
+ final Optional opt = NPC.all().stream().filter(npc1 -> npc1.getUUID().equals(uuid)).findAny();
+ if (opt.isPresent()) {
+ return opt.get().getLocation();
+ }
}
+ return null;
}
public String getNPCName(final UUID uuid) {
- if (citizens != null) {
+ Entity npc = null;
+ if (citizens != null && citizens.getNPCRegistry().getByUniqueId(uuid) != null) {
return citizens.getNPCRegistry().getByUniqueId(uuid).getName();
- } else {
- return null;
+ } else if (getZnpcsUuids().contains(uuid)) {
+ final Optional opt = NPC.all().stream().filter(npc1 -> npc1.getUUID().equals(uuid)).findAny();
+ if (opt.isPresent()) {
+ npc = (Entity) opt.get().getBukkitEntity();
+ if (npc.getCustomName() != null) {
+ return npc.getCustomName();
+ } else {
+ return opt.get().getNpcPojo().getHologramLines().get(0);
+ }
+ }
}
+ return "NPC";
}
public int getMcmmoSkillLevel(final SkillType st, final String player) {
diff --git a/core/src/main/java/me/blackvein/quests/Quest.java b/core/src/main/java/me/blackvein/quests/Quest.java
index fbfc0c44b..9ffd6d10d 100644
--- a/core/src/main/java/me/blackvein/quests/Quest.java
+++ b/core/src/main/java/me/blackvein/quests/Quest.java
@@ -20,8 +20,9 @@ import com.codisimus.plugins.phatloots.loot.LootBundle;
import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.util.player.UserManager;
import com.herocraftonline.heroes.characters.Hero;
-import me.blackvein.quests.actions.IAction;
+import io.github.znetworkw.znpcservers.npc.NPC;
import me.blackvein.quests.actions.Action;
+import me.blackvein.quests.actions.IAction;
import me.blackvein.quests.conditions.ICondition;
import me.blackvein.quests.dependencies.IDependencies;
import me.blackvein.quests.events.quest.QuestUpdateCompassEvent;
@@ -50,8 +51,6 @@ import me.blackvein.quests.util.Lang;
import me.blackvein.quests.util.MiscUtil;
import me.blackvein.quests.util.RomanNumeral;
import me.clip.placeholderapi.PlaceholderAPI;
-import net.citizensnpcs.api.CitizensAPI;
-import net.citizensnpcs.api.npc.NPC;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.DyeColor;
@@ -72,6 +71,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Optional;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@@ -189,16 +189,18 @@ public class Quest implements IQuest {
}
@Override
- public NPC getNpcStart() {
- if (plugin.getDependencies().getCitizens() != null && CitizensAPI.getNPCRegistry().getByUniqueId(npcStart) != null) {
- return CitizensAPI.getNPCRegistry().getByUniqueId(npcStart);
- }
- return null;
+ public UUID getNpcStart() {
+ return npcStart;
}
@Override
- public void setNpcStart(final NPC npcStart) {
- this.npcStart = npcStart.getUniqueId();
+ public void setNpcStart(final UUID npcStart) {
+ this.npcStart = npcStart;
+ }
+
+ @Override
+ public String getNpcStartName() {
+ return plugin.getDependencies().getNPCName(getNpcStart());
}
@Override
@@ -361,8 +363,8 @@ public class Quest implements IQuest {
final StringBuilder msg = new StringBuilder("- " + Lang.get("conditionEditorRideNPC"));
for (final UUID u : c.getNpcsWhileRiding()) {
if (plugin.getDependencies().getCitizens() != null) {
- msg.append(ChatColor.AQUA).append("\n \u2515 ").append(CitizensAPI.getNPCRegistry()
- .getByUniqueId(u).getName());
+ msg.append(ChatColor.AQUA).append("\n \u2515 ").append(plugin.getDependencies()
+ .getCitizens().getNPCRegistry().getByUniqueId(u).getName());
} else {
msg.append(ChatColor.AQUA).append("\n \u2515 ").append(u);
}
@@ -456,9 +458,19 @@ public class Quest implements IQuest {
} else if (stage.getLocationsToReach() != null && stage.getLocationsToReach().size() > 0) {
targetLocation = stage.getLocationsToReach().getFirst();
} else if (stage.getItemDeliveryTargets() != null && stage.getItemDeliveryTargets().size() > 0) {
- final NPC npc = plugin.getDependencies().getCitizens().getNPCRegistry().getByUniqueId(stage
- .getItemDeliveryTargets().getFirst());
- targetLocation = npc.getStoredLocation();
+ final UUID uuid = stage.getItemDeliveryTargets().getFirst();
+ if (plugin.getDependencies().getCitizens() != null
+ && plugin.getDependencies().getCitizens().getNPCRegistry().getByUniqueId(uuid) != null) {
+ targetLocation = plugin.getDependencies().getCitizens().getNPCRegistry().getByUniqueId(uuid)
+ .getStoredLocation();
+ }
+ if (plugin.getDependencies().getZnpcs() != null
+ && plugin.getDependencies().getZnpcsUuids().contains(uuid)) {
+ final Optional opt = NPC.all().stream().filter(npc1 -> npc1.getUUID().equals(uuid)).findAny();
+ if (opt.isPresent()) {
+ targetLocation = opt.get().getLocation();
+ }
+ }
} else if (stage.getPlayersToKill() != null && stage.getPlayersToKill() > 0) {
if (quester.getPlayer() == null) {
return;
diff --git a/core/src/main/java/me/blackvein/quests/Quester.java b/core/src/main/java/me/blackvein/quests/Quester.java
index 6c2539fff..041eddcd2 100644
--- a/core/src/main/java/me/blackvein/quests/Quester.java
+++ b/core/src/main/java/me/blackvein/quests/Quester.java
@@ -16,6 +16,7 @@ import com.alessiodp.parties.api.interfaces.Party;
import com.alessiodp.parties.api.interfaces.PartyPlayer;
import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.util.player.UserManager;
+import io.github.znetworkw.znpcservers.npc.NPC;
import me.blackvein.quests.conditions.ICondition;
import me.blackvein.quests.config.ISettings;
import me.blackvein.quests.convo.misc.QuestAbandonPrompt;
@@ -62,6 +63,7 @@ import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.conversations.ConversationFactory;
import org.bukkit.enchantments.Enchantment;
+import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryType;
@@ -83,6 +85,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Optional;
import java.util.Random;
import java.util.Set;
import java.util.UUID;
@@ -587,20 +590,29 @@ public class Quester implements IQuester {
sendMessage(ChatColor.YELLOW + msg);
}
return false;
- } else if (plugin.getDependencies().getCitizens() != null
- && !plugin.getSettings().canAllowCommandsForNpcQuests()
- && quest.getNpcStart() != null && quest.getNpcStart().getEntity() != null
- && quest.getNpcStart().getEntity().getLocation().getWorld() != null
- && getPlayer().getLocation().getWorld() != null
- && quest.getNpcStart().getEntity().getLocation().getWorld().getName().equals(
- getPlayer().getLocation().getWorld().getName())
- && quest.getNpcStart().getEntity().getLocation().distance(getPlayer().getLocation()) > 6.0) {
+ } else if (!plugin.getSettings().canAllowCommandsForNpcQuests() && quest.getNpcStart() != null
+ && getPlayer().getLocation().getWorld() != null) {
+ final UUID uuid = quest.getNpcStart();
if (giveReason) {
- final String msg = Lang.get(getPlayer(), "mustSpeakTo").replace("", ChatColor.DARK_PURPLE
- + quest.getNpcStart().getName() + ChatColor.YELLOW);
- sendMessage(ChatColor.YELLOW + msg);
+ Entity npc = null;
+ if (plugin.getDependencies().getCitizens() != null
+ && plugin.getDependencies().getCitizens().getNPCRegistry().getByUniqueId(uuid) != null) {
+ npc = plugin.getDependencies().getCitizens().getNPCRegistry().getByUniqueId(uuid).getEntity();
+ } else if (plugin.getDependencies().getZnpcs() != null
+ && plugin.getDependencies().getZnpcsUuids().contains(uuid)) {
+ final Optional opt = NPC.all().stream().filter(npc1 -> npc1.getUUID().equals(uuid)).findAny();
+ if (opt.isPresent()) {
+ npc = (Entity) opt.get().getBukkitEntity();
+ }
+ }
+ if (npc != null && npc.getLocation().getWorld() != null && npc.getLocation().getWorld().getName()
+ .equals(getPlayer().getLocation().getWorld().getName())
+ && npc.getLocation().distance(getPlayer().getLocation()) > 6.0) {
+ sendMessage(ChatColor.YELLOW + Lang.get(getPlayer(), "mustSpeakTo")
+ .replace("", ChatColor.DARK_PURPLE + npc.getName() + ChatColor.YELLOW));
+ return false;
+ }
}
- return false;
} else if (quest.getBlockStart() != null) {
if (giveReason) {
final String msg = Lang.get(getPlayer(), "noCommandStart").replace("", ChatColor.DARK_PURPLE
diff --git a/core/src/main/java/me/blackvein/quests/Quests.java b/core/src/main/java/me/blackvein/quests/Quests.java
index e59568691..cb49722c3 100644
--- a/core/src/main/java/me/blackvein/quests/Quests.java
+++ b/core/src/main/java/me/blackvein/quests/Quests.java
@@ -40,10 +40,11 @@ import me.blackvein.quests.listeners.BlockListener;
import me.blackvein.quests.listeners.CommandManager;
import me.blackvein.quests.listeners.ConvoListener;
import me.blackvein.quests.listeners.ItemListener;
-import me.blackvein.quests.listeners.NpcListener;
+import me.blackvein.quests.listeners.CitizensListener;
import me.blackvein.quests.listeners.PartiesListener;
import me.blackvein.quests.listeners.PlayerListener;
import me.blackvein.quests.listeners.UniteListener;
+import me.blackvein.quests.listeners.ZnpcsListener;
import me.blackvein.quests.logging.QuestsLog4JFilter;
import me.blackvein.quests.module.ICustomObjective;
import me.blackvein.quests.player.IQuester;
@@ -161,7 +162,8 @@ public class Quests extends JavaPlugin implements QuestsAPI {
private ConvoListener convoListener;
private BlockListener blockListener;
private ItemListener itemListener;
- private NpcListener npcListener;
+ private CitizensListener citizensListener;
+ private ZnpcsListener znpcsListener;
private PlayerListener playerListener;
private NpcEffectThread effectThread;
private PlayerMoveThread moveThread;
@@ -189,7 +191,8 @@ public class Quests extends JavaPlugin implements QuestsAPI {
convoListener = new ConvoListener();
blockListener = new BlockListener(this);
itemListener = new ItemListener(this);
- npcListener = new NpcListener(this);
+ citizensListener = new CitizensListener(this);
+ znpcsListener = new ZnpcsListener(this);
playerListener = new PlayerListener(this);
uniteListener = new UniteListener();
partiesListener = new PartiesListener();
@@ -258,6 +261,9 @@ public class Quests extends JavaPlugin implements QuestsAPI {
getServer().getPluginManager().registerEvents(getBlockListener(), this);
getServer().getPluginManager().registerEvents(getItemListener(), this);
depends.linkCitizens();
+ if (depends.getZnpcs() != null) {
+ getServer().getPluginManager().registerEvents(getZnpcsListener(), this);
+ }
getServer().getPluginManager().registerEvents(getPlayerListener(), this);
if (settings.getStrictPlayerMovement() > 0) {
final long ticks = settings.getStrictPlayerMovement() * 20L;
@@ -593,8 +599,12 @@ public class Quests extends JavaPlugin implements QuestsAPI {
return itemListener;
}
- public NpcListener getNpcListener() {
- return npcListener;
+ public CitizensListener getCitizensListener() {
+ return citizensListener;
+ }
+
+ public ZnpcsListener getZnpcsListener() {
+ return znpcsListener;
}
public PlayerListener getPlayerListener() {
@@ -1378,7 +1388,8 @@ public class Quests extends JavaPlugin implements QuestsAPI {
final int toDeliver = is.getAmount();
final UUID npc = stage.getItemDeliveryTargets().get(deliverIndex);
final ChatColor color = delivered < toDeliver ? ChatColor.GREEN : ChatColor.GRAY;
- String message = color + "- " + Lang.get(quester.getPlayer(), "deliver").replace("", depends.getNPCName(npc));
+ String message = color + "- " + Lang.get(quester.getPlayer(), "deliver")
+ .replace("", depends.getNPCName(npc));
if (message.contains("")) {
message = message.replace("", "" + color + delivered + "/" + toDeliver);
} else {
@@ -1840,21 +1851,17 @@ public class Quests extends JavaPlugin implements QuestsAPI {
} else {
throw new QuestFormatException("finish-message is missing", questKey);
}
- if (depends.getCitizens() != null && config.contains("quests." + questKey + ".npc-giver-uuid")) {
+ if (config.contains("quests." + questKey + ".npc-giver-uuid")) {
final UUID uuid = UUID.fromString(Objects.requireNonNull(config.getString("quests." + questKey
+ ".npc-giver-uuid")));
- if (CitizensAPI.getNPCRegistry().getByUniqueId(uuid) != null) {
- quest.setNpcStart(CitizensAPI.getNPCRegistry().getByUniqueId(uuid));
- questNpcUuids.add(uuid);
- } else {
- throw new QuestFormatException("npc-giver-uuid has invalid NPC UUID " + uuid, questKey);
- }
+ quest.setNpcStart(uuid);
+ questNpcUuids.add(uuid);
} else if (depends.getCitizens() != null && config.contains("quests." + questKey + ".npc-giver-id")) {
// Legacy
final int id = config.getInt("quests." + questKey + ".npc-giver-id");
if (CitizensAPI.getNPCRegistry().getById(id) != null) {
final NPC npc = CitizensAPI.getNPCRegistry().getById(id);
- quest.setNpcStart(npc);
+ quest.setNpcStart(npc.getUniqueId());
questNpcUuids.add(npc.getUniqueId());
} else {
throw new QuestFormatException("npc-giver-id has invalid NPC ID " + id, questKey);
@@ -2930,19 +2937,8 @@ public class Quests extends JavaPlugin implements QuestsAPI {
+ ".npc-uuids-to-talk-to");
for (final String s : npcUuidsToTalkTo) {
final UUID uuid = UUID.fromString(s);
- if (getDependencies().getCitizens() != null) {
- final NPC npc = CitizensAPI.getNPCRegistry().getByUniqueId(uuid);
- if (npc != null) {
- oStage.addNpcToInteract(uuid);
- questNpcUuids.add(uuid);
- } else {
- throw new StageFormatException("npc-uuids-to-talk-to has invalid NPC UUID of "
- + s, quest, stageNum);
- }
- } else {
- throw new StageFormatException("Citizens not found for npc-uuids-to-talk-to", quest,
- stageNum);
- }
+ oStage.addNpcToInteract(uuid);
+ questNpcUuids.add(uuid);
}
} else {
throw new StageFormatException("npc-ids-to-talk-to is not a list of numbers", quest, stageNum);
@@ -2994,20 +2990,9 @@ public class Quests extends JavaPlugin implements QuestsAPI {
? deliveryMessages.get(index)
: deliveryMessages.get(deliveryMessages.size() - 1);
index++;
- if (getDependencies().getCitizens() != null) {
- final NPC npc = CitizensAPI.getNPCRegistry().getByUniqueId(npcUuid);
- if (npc != null) {
- oStage.addItemToDeliver(stack);
- oStage.addItemDeliveryTarget(npcUuid);
- oStage.addDeliverMessage(msg);
- } else {
- throw new StageFormatException("npc-delivery-ids has invalid NPC " +
- "UUID of " + npcUuid, quest, stageNum);
- }
- } else {
- throw new StageFormatException(
- "Citizens not found for npc-delivery-uuids", quest, stageNum);
- }
+ oStage.addItemToDeliver(stack);
+ oStage.addItemDeliveryTarget(npcUuid);
+ oStage.addDeliverMessage(msg);
}
}
} else {
@@ -3080,18 +3065,12 @@ public class Quests extends JavaPlugin implements QuestsAPI {
+ stageNum + ".npc-kill-amounts");
for (final String s : npcUuidsToKill) {
final UUID npcUuid = UUID.fromString(s);
- final NPC npc = CitizensAPI.getNPCRegistry().getByUniqueId(npcUuid);
- if (npc != null) {
- if (npcAmountsToKill.get(npcUuidsToKill.indexOf(s)) > 0) {
- oStage.addNpcToKill(npcUuid);
- oStage.addNpcNumToKill(npcAmountsToKill.get(npcUuidsToKill.indexOf(s)));
- questNpcUuids.add(npcUuid);
- } else {
- throw new StageFormatException("npc-kill-amounts is not a positive number",
- quest, stageNum);
- }
+ if (npcAmountsToKill.get(npcUuidsToKill.indexOf(s)) > 0) {
+ oStage.addNpcToKill(npcUuid);
+ oStage.addNpcNumToKill(npcAmountsToKill.get(npcUuidsToKill.indexOf(s)));
+ questNpcUuids.add(npcUuid);
} else {
- throw new StageFormatException("npc-uuids-to-kill has invalid NPC UUID of " + s,
+ throw new StageFormatException("npc-kill-amounts is not a positive number",
quest, stageNum);
}
}
@@ -3950,17 +3929,7 @@ public class Quests extends JavaPlugin implements QuestsAPI {
final LinkedList npcList = new LinkedList<>();
for (final String s : data.getStringList(conditionKey + "ride-npc-uuid")) {
final UUID u = UUID.fromString(s);
- if (getDependencies().getCitizens() != null) {
- final NPC npc = CitizensAPI.getNPCRegistry().getByUniqueId(u);
- if (npc != null) {
- npcList.add(u);
- } else {
- throw new ConditionFormatException("ride-npc-uuid is not a valid NPC UUID",
- conditionKey);
- }
- } else {
- throw new ConditionFormatException("Citizens not found for ride-npc-uuid", conditionKey);
- }
+ npcList.add(u);
}
condition.setNpcsWhileRiding(npcList);
}
@@ -4568,7 +4537,7 @@ public class Quests extends JavaPlugin implements QuestsAPI {
public boolean hasQuest(final NPC npc, final IQuester quester) {
for (final IQuest q : quests) {
if (q.getNpcStart() != null && !quester.getCompletedQuestsTemp().contains(q)) {
- if (q.getNpcStart().getId() == npc.getId()) {
+ if (q.getNpcStart().equals(npc.getUniqueId())) {
final boolean ignoreLockedQuests = settings.canIgnoreLockedQuests();
if (!ignoreLockedQuests || q.testRequirements(quester)) {
return true;
@@ -4590,7 +4559,7 @@ public class Quests extends JavaPlugin implements QuestsAPI {
public boolean hasCompletedQuest(final NPC npc, final IQuester quester) {
for (final IQuest q : quests) {
if (q.getNpcStart() != null && quester.getCompletedQuestsTemp().contains(q)) {
- if (q.getNpcStart().getId() == npc.getId()) {
+ if (q.getNpcStart().equals(npc.getUniqueId())) {
final boolean ignoreLockedQuests = settings.canIgnoreLockedQuests();
if (!ignoreLockedQuests || q.testRequirements(quester)) {
return true;
@@ -4612,7 +4581,7 @@ public class Quests extends JavaPlugin implements QuestsAPI {
for (final IQuest q : quests) {
if (q.getNpcStart() != null && quester.getCompletedQuestsTemp().contains(q)
&& q.getPlanner().getCooldown() > -1) {
- if (q.getNpcStart().getId() == npc.getId()) {
+ if (q.getNpcStart().equals(npc.getUniqueId())) {
final boolean ignoreLockedQuests = settings.canIgnoreLockedQuests();
if (!ignoreLockedQuests || q.testRequirements(quester)) {
return true;
diff --git a/core/src/main/java/me/blackvein/quests/commands/quest/QuestCommandHandler.java b/core/src/main/java/me/blackvein/quests/commands/quest/QuestCommandHandler.java
index 0fdfd1ce2..e5261c3de 100644
--- a/core/src/main/java/me/blackvein/quests/commands/quest/QuestCommandHandler.java
+++ b/core/src/main/java/me/blackvein/quests/commands/quest/QuestCommandHandler.java
@@ -116,7 +116,7 @@ public class QuestCommandHandler {
cs.sendMessage(" ");
if (q.getNpcStart() != null) {
String msg = Lang.get("speakTo");
- msg = msg.replace("", q.getNpcStart().getName());
+ msg = msg.replace("", q.getNpcStartName());
cs.sendMessage(ChatColor.YELLOW + msg);
} else {
cs.sendMessage(ChatColor.YELLOW + q.getDescription());
diff --git a/core/src/main/java/me/blackvein/quests/convo/conditions/tasks/EntityPrompt.java b/core/src/main/java/me/blackvein/quests/convo/conditions/tasks/EntityPrompt.java
index 16d0f8000..83d3daf52 100644
--- a/core/src/main/java/me/blackvein/quests/convo/conditions/tasks/EntityPrompt.java
+++ b/core/src/main/java/me/blackvein/quests/convo/conditions/tasks/EntityPrompt.java
@@ -21,7 +21,6 @@ import me.blackvein.quests.events.editor.quests.QuestsEditorPostOpenStringPrompt
import me.blackvein.quests.util.CK;
import me.blackvein.quests.util.Lang;
import me.blackvein.quests.util.MiscUtil;
-import net.citizensnpcs.api.CitizensAPI;
import org.bukkit.ChatColor;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.Prompt;
@@ -104,16 +103,16 @@ public class EntityPrompt extends QuestsEditorNumericPrompt {
return text.toString();
}
case 2:
- if (plugin.getDependencies().getCitizens() != null) {
+ if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) {
if (context.getSessionData(CK.C_WHILE_RIDING_NPC) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
final StringBuilder text = new StringBuilder();
- final List whileRidingNpc = (List) context.getSessionData(CK.C_WHILE_RIDING_NPC);
+ final List whileRidingNpc = (List) context.getSessionData(CK.C_WHILE_RIDING_NPC);
if (whileRidingNpc != null) {
- for (final int i : whileRidingNpc) {
+ for (final UUID u : whileRidingNpc) {
text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.BLUE)
- .append(CitizensAPI.getNPCRegistry().getById(i).getName());
+ .append(plugin.getDependencies().getNPCName(u));
}
}
return text.toString();
@@ -278,21 +277,21 @@ public class EntityPrompt extends QuestsEditorNumericPrompt {
return null;
}
if (!input.equalsIgnoreCase(Lang.get("cmdCancel"))) {
- final LinkedList npcIds = new LinkedList<>();
+ final LinkedList npcUuids = new LinkedList<>();
try {
for (final String s : input.split(" ")) {
- final int i = Integer.parseInt(s);
- if (i > -1) {
- if (CitizensAPI.getNPCRegistry().getById(i) == null) {
+ try {
+ final UUID u = UUID.fromString(s);
+ if (plugin.getDependencies().getNPCName(u) == null) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questEditorInvalidNPC"));
return new ConditionNpcsPrompt(context);
}
- npcIds.add(i);
- context.setSessionData(CK.C_WHILE_RIDING_NPC, npcIds);
- } else {
+ npcUuids.add(u);
+ context.setSessionData(CK.C_WHILE_RIDING_NPC, npcUuids);
+ } catch (Exception e) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questEditorInvalidNPC"));
- return new ConditionNpcsPrompt(context);
}
+ return new ConditionNpcsPrompt(context);
}
} catch (final NumberFormatException e) {
context.getForWhom().sendRawMessage(ChatColor.RED
diff --git a/core/src/main/java/me/blackvein/quests/convo/quests/main/QuestMainPrompt.java b/core/src/main/java/me/blackvein/quests/convo/quests/main/QuestMainPrompt.java
index fb1989942..c86f8317c 100644
--- a/core/src/main/java/me/blackvein/quests/convo/quests/main/QuestMainPrompt.java
+++ b/core/src/main/java/me/blackvein/quests/convo/quests/main/QuestMainPrompt.java
@@ -30,7 +30,6 @@ import me.blackvein.quests.reflect.worldguard.WorldGuardAPI;
import me.blackvein.quests.util.CK;
import me.blackvein.quests.util.ItemUtil;
import me.blackvein.quests.util.Lang;
-import net.citizensnpcs.api.CitizensAPI;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.World;
@@ -108,7 +107,7 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
return ChatColor.GRAY;
}
case 7:
- if (plugin.getDependencies().getCitizens() != null) {
+ if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) {
return ChatColor.BLUE;
} else {
return ChatColor.GRAY;
@@ -132,7 +131,8 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
case 3:
return ChatColor.YELLOW + Lang.get("questEditorFinishMessage");
case 4:
- if (context.getSessionData(CK.Q_START_NPC) == null || plugin.getDependencies().getCitizens() != null) {
+ if (context.getSessionData(CK.Q_START_NPC) == null || plugin.getDependencies().getCitizens() != null
+ || plugin.getDependencies().getZnpcs() != null) {
return ChatColor.YELLOW + Lang.get("questEditorNPCStart");
} else {
return ChatColor.GRAY + Lang.get("questEditorNPCStart");
@@ -150,7 +150,7 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
return ChatColor.GRAY + Lang.get("questWGSetRegion");
}
case 7:
- if (plugin.getDependencies().getCitizens() != null) {
+ if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) {
return ChatColor.YELLOW + Lang.get("questEditorSetGUI");
} else {
return ChatColor.GRAY + Lang.get("questEditorSetGUI");
@@ -193,13 +193,14 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
return ChatColor.GRAY + "(" + ChatColor.AQUA + context.getSessionData(CK.Q_FINISH_MESSAGE)
+ ChatColor.RESET + ChatColor.GRAY + ")";
case 4:
- if (context.getSessionData(CK.Q_START_NPC) == null && plugin.getDependencies().getCitizens()
- != null) {
+ if (context.getSessionData(CK.Q_START_NPC) == null && (plugin.getDependencies().getCitizens() != null
+ || plugin.getDependencies().getZnpcs() != null)) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
- } else if (plugin.getDependencies().getCitizens() != null) {
- final UUID uuid = UUID.fromString((String) Objects.requireNonNull(context.getSessionData(CK.Q_START_NPC)));
- return ChatColor.GRAY + "(" + ChatColor.AQUA + CitizensAPI.getNPCRegistry().getByUniqueId(uuid)
- .getName() + ChatColor.RESET + ChatColor.GRAY + ")";
+ } else if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) {
+ final UUID uuid = UUID.fromString((String) Objects.requireNonNull(context
+ .getSessionData(CK.Q_START_NPC)));
+ return ChatColor.GRAY + "(" + ChatColor.AQUA + plugin.getDependencies().getNPCName(uuid)
+ + ChatColor.RESET + ChatColor.GRAY + ")";
} else {
return ChatColor.GRAY + "(" + Lang.get("notInstalled") + ")";
}
@@ -225,7 +226,7 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
return ChatColor.GRAY + "(" + Lang.get("notInstalled") + ")";
}
case 7:
- if (plugin.getDependencies().getCitizens() != null) {
+ if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) {
if (context.getSessionData(CK.Q_GUIDISPLAY) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
@@ -269,7 +270,7 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
case 3:
return new QuestFinishMessagePrompt(context);
case 4:
- if (plugin.getDependencies().getCitizens() != null) {
+ if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) {
return new QuestNPCStartPrompt(context);
} else {
return new QuestMainPrompt(context);
@@ -291,7 +292,7 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
return new QuestMainPrompt(context);
}
case 7:
- if (plugin.getDependencies().getCitizens() != null) {
+ if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) {
return new QuestGuiDisplayPrompt(context);
} else {
return new QuestMainPrompt(context);
@@ -501,13 +502,11 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
if (!input.equalsIgnoreCase(Lang.get("cmdCancel")) && !input.equalsIgnoreCase(Lang.get("cmdClear"))) {
try {
final UUID uuid = UUID.fromString(input);
- if (plugin.getDependencies().getCitizens() != null) {
- if (CitizensAPI.getNPCRegistry().getByUniqueId(uuid) == null) {
- context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questEditorInvalidNPC"));
- return new QuestNPCStartPrompt(context);
- }
- context.setSessionData(CK.Q_START_NPC, uuid.toString());
+ if (plugin.getDependencies().getNPCName(uuid) == null) {
+ context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questEditorInvalidNPC"));
+ return new QuestNPCStartPrompt(context);
}
+ context.setSessionData(CK.Q_START_NPC, uuid.toString());
if (context.getForWhom() instanceof Player) {
final Set selectingNpcs = plugin.getQuestFactory().getSelectingNpcs();
selectingNpcs.remove(((Player) context.getForWhom()).getUniqueId());
diff --git a/core/src/main/java/me/blackvein/quests/convo/quests/objectives/NpcsPrompt.java b/core/src/main/java/me/blackvein/quests/convo/quests/objectives/NpcsPrompt.java
index aeadf87d7..e0ffbb7c8 100644
--- a/core/src/main/java/me/blackvein/quests/convo/quests/objectives/NpcsPrompt.java
+++ b/core/src/main/java/me/blackvein/quests/convo/quests/objectives/NpcsPrompt.java
@@ -94,7 +94,7 @@ public class NpcsPrompt extends QuestsEditorNumericPrompt {
public String getAdditionalText(final ConversationContext context, final int number) {
switch(number) {
case 1:
- if (plugin.getDependencies().getCitizens() != null) {
+ if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) {
if (context.getSessionData(pref + CK.S_DELIVERY_ITEMS) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
@@ -109,8 +109,7 @@ public class NpcsPrompt extends QuestsEditorNumericPrompt {
.append(ItemUtil.getName(items.get(i))).append(ChatColor.GRAY).append(" x ")
.append(ChatColor.AQUA).append(items.get(i).getAmount()).append(ChatColor.GRAY)
.append(" ").append(Lang.get("to")).append(" ").append(ChatColor.BLUE)
- .append(plugin.getDependencies().getCitizens().getNPCRegistry()
- .getByUniqueId(UUID.fromString(npcs.get(i))).getName());
+ .append(plugin.getDependencies().getNPCName(UUID.fromString(npcs.get(i))));
}
}
return text.toString();
@@ -119,7 +118,7 @@ public class NpcsPrompt extends QuestsEditorNumericPrompt {
return ChatColor.GRAY + " (" + Lang.get("notInstalled") + ")";
}
case 2:
- if (plugin.getDependencies().getCitizens() != null) {
+ if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) {
if (context.getSessionData(pref + CK.S_NPCS_TO_TALK_TO) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
@@ -129,8 +128,7 @@ public class NpcsPrompt extends QuestsEditorNumericPrompt {
if (npcs != null) {
for (final String npc : npcs) {
text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.BLUE)
- .append(plugin.getDependencies().getCitizens().getNPCRegistry()
- .getByUniqueId(UUID.fromString(npc)).getName());
+ .append(plugin.getDependencies().getNPCName(UUID.fromString(npc)));
}
}
return text.toString();
@@ -139,7 +137,7 @@ public class NpcsPrompt extends QuestsEditorNumericPrompt {
return ChatColor.GRAY + "(" + Lang.get("notInstalled") + ")";
}
case 3:
- if (plugin.getDependencies().getCitizens() != null) {
+ if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) {
if (context.getSessionData(pref + CK.S_NPCS_TO_KILL) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
@@ -151,9 +149,8 @@ public class NpcsPrompt extends QuestsEditorNumericPrompt {
if (npcs != null && amounts != null) {
for (int i = 0; i < npcs.size(); i++) {
text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.BLUE)
- .append(plugin.getDependencies().getCitizens().getNPCRegistry()
- .getByUniqueId(UUID.fromString(npcs.get(i))).getName()).append(ChatColor.GRAY)
- .append(" x ").append(ChatColor.AQUA).append(amounts.get(i));
+ .append(plugin.getDependencies().getNPCName(UUID.fromString(npcs.get(i))))
+ .append(ChatColor.GRAY).append(" x ").append(ChatColor.AQUA).append(amounts.get(i));
}
}
return text.toString();
@@ -191,21 +188,21 @@ public class NpcsPrompt extends QuestsEditorNumericPrompt {
protected Prompt acceptValidatedInput(final @NotNull ConversationContext context, final Number input) {
switch(input.intValue()) {
case 1:
- if (plugin.getDependencies().getCitizens() != null) {
+ if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) {
return new NpcsDeliveryListPrompt(context);
} else {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoCitizens"));
return new StageMainPrompt(stageNum, context);
}
case 2:
- if (plugin.getDependencies().getCitizens() != null) {
+ if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) {
return new NpcsIdsToTalkToPrompt(context);
} else {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoCitizens"));
return new StageMainPrompt(stageNum, context);
}
case 3:
- if (plugin.getDependencies().getCitizens() != null) {
+ if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) {
return new NpcsKillListPrompt(context);
} else {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoCitizens"));
@@ -304,9 +301,8 @@ public class NpcsPrompt extends QuestsEditorNumericPrompt {
for (final String s : deliveryNpcs) {
final UUID uuid = UUID.fromString(s);
text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA)
- .append(plugin.getDependencies().getCitizens().getNPCRegistry().getByUniqueId(uuid)
- .getName()).append(ChatColor.GRAY).append(" (").append(ChatColor.BLUE).append(s)
- .append(ChatColor.GRAY).append(")");
+ .append(plugin.getDependencies().getNPCName(uuid)).append(ChatColor.GRAY)
+ .append(" (").append(ChatColor.BLUE).append(s).append(ChatColor.GRAY).append(")");
}
}
return text.toString();
@@ -464,8 +460,7 @@ public class NpcsPrompt extends QuestsEditorNumericPrompt {
for (final String s : args) {
try {
final UUID uuid = UUID.fromString(s);
- if (plugin.getDependencies().getCitizens().getNPCRegistry().getByUniqueId(uuid) != null
- && npcs != null) {
+ if (plugin.getDependencies().getNPCName(uuid) != null && npcs != null) {
npcs.add(uuid.toString());
} else {
context.getForWhom().sendRawMessage(ChatColor.LIGHT_PURPLE + "" + uuid + ChatColor.RED + " "
@@ -583,8 +578,7 @@ public class NpcsPrompt extends QuestsEditorNumericPrompt {
for (final String s : args) {
try {
final UUID uuid = UUID.fromString(s);
- if (plugin.getDependencies().getCitizens().getNPCRegistry().getByUniqueId(uuid) != null
- && npcs != null) {
+ if (plugin.getDependencies().getNPCName(uuid) != null && npcs != null) {
npcs.add(uuid.toString());
} else {
context.getForWhom().sendRawMessage(ChatColor.LIGHT_PURPLE + "" + uuid + ChatColor.RED + " "
@@ -664,7 +658,7 @@ public class NpcsPrompt extends QuestsEditorNumericPrompt {
public String getAdditionalText(final ConversationContext context, final int number) {
switch(number) {
case 1:
- if (plugin.getDependencies().getCitizens() != null) {
+ if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) {
if (context.getSessionData(pref + CK.S_NPCS_TO_KILL) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
@@ -673,9 +667,9 @@ public class NpcsPrompt extends QuestsEditorNumericPrompt {
if (npcsToKill != null) {
for (final String s : npcsToKill) {
text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.BLUE)
- .append(plugin.getDependencies().getCitizens().getNPCRegistry()
- .getByUniqueId(UUID.fromString(s)).getName()).append(ChatColor.GRAY).append(" (")
- .append(ChatColor.AQUA).append(s).append(ChatColor.GRAY).append(")");
+ .append(plugin.getDependencies().getNPCName(UUID.fromString(s)))
+ .append(ChatColor.GRAY).append(" (").append(ChatColor.AQUA).append(s)
+ .append(ChatColor.GRAY).append(")");
}
}
return text.toString();
@@ -810,8 +804,7 @@ public class NpcsPrompt extends QuestsEditorNumericPrompt {
for (final String s : args) {
try {
final UUID uuid = UUID.fromString(s);
- if (plugin.getDependencies().getCitizens().getNPCRegistry().getByUniqueId(uuid) != null
- && npcs != null) {
+ if (plugin.getDependencies().getNPCName(uuid) != null && npcs != null) {
npcs.add(uuid.toString());
} else {
context.getForWhom().sendRawMessage(ChatColor.LIGHT_PURPLE + "" + uuid + ChatColor.RED + " "
diff --git a/core/src/main/java/me/blackvein/quests/listeners/NpcListener.java b/core/src/main/java/me/blackvein/quests/listeners/CitizensListener.java
similarity index 98%
rename from core/src/main/java/me/blackvein/quests/listeners/NpcListener.java
rename to core/src/main/java/me/blackvein/quests/listeners/CitizensListener.java
index 222affd52..9569b4b71 100644
--- a/core/src/main/java/me/blackvein/quests/listeners/NpcListener.java
+++ b/core/src/main/java/me/blackvein/quests/listeners/CitizensListener.java
@@ -44,11 +44,11 @@ import java.util.Map.Entry;
import java.util.Set;
import java.util.UUID;
-public class NpcListener implements Listener {
+public class CitizensListener implements Listener {
private final Quests plugin;
- public NpcListener(final Quests plugin) {
+ public CitizensListener(final Quests plugin) {
this.plugin = plugin;
}
@@ -214,7 +214,7 @@ public class NpcListener implements Listener {
if (quester.getCurrentQuestsTemp().containsKey(q)) {
continue;
}
- if (q.getNpcStart() != null && q.getNpcStart().getId() == evt.getNPC().getId()) {
+ if (q.getNpcStart() != null && q.getNpcStart().equals(evt.getNPC().getUniqueId())) {
if (plugin.getSettings().canIgnoreLockedQuests()
&& (!quester.getCompletedQuestsTemp().contains(q)
|| q.getPlanner().getCooldown() > -1)) {
diff --git a/core/src/main/java/me/blackvein/quests/listeners/ZnpcsListener.java b/core/src/main/java/me/blackvein/quests/listeners/ZnpcsListener.java
new file mode 100644
index 000000000..e4e594268
--- /dev/null
+++ b/core/src/main/java/me/blackvein/quests/listeners/ZnpcsListener.java
@@ -0,0 +1,264 @@
+package me.blackvein.quests.listeners;
+
+import io.github.znetworkw.znpcservers.npc.NPC;
+import io.github.znetworkw.znpcservers.npc.event.NPCInteractEvent;
+import me.blackvein.quests.Quests;
+import me.blackvein.quests.enums.ObjectiveType;
+import me.blackvein.quests.player.IQuester;
+import me.blackvein.quests.quests.IQuest;
+import me.blackvein.quests.util.ItemUtil;
+import me.blackvein.quests.util.Lang;
+import org.bukkit.ChatColor;
+import org.bukkit.Material;
+import org.bukkit.conversations.Conversation;
+import org.bukkit.enchantments.Enchantment;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.EnchantmentStorageMeta;
+
+import java.text.MessageFormat;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.UUID;
+
+public class ZnpcsListener implements Listener {
+
+ private final Quests plugin;
+
+ public ZnpcsListener(final Quests plugin) {
+ this.plugin = plugin;
+ }
+
+ @EventHandler
+ public void onNPCInteract(final NPCInteractEvent evt) {
+ if (evt.isLeftClick()) {
+ if (plugin.getDependencies().getZnpcs() == null) {
+ return;
+ }
+ if (plugin.getQuestFactory().getSelectingNpcs().contains(evt.getPlayer().getUniqueId())) {
+ if (evt.getNpc() == null) {
+ plugin.getLogger().severe("ZNPC was null while selecting by left-click");
+ return;
+ }
+ evt.getPlayer().acceptConversationInput(String.valueOf(evt.getNpc().getUUID()));
+ }
+ } else if (evt.isRightClick()) {
+ if (plugin.getDependencies().getCitizens() == null) {
+ return;
+ }
+ if (plugin.getQuestFactory().getSelectingNpcs().contains(evt.getPlayer().getUniqueId())) {
+ if (evt.getNpc() == null) {
+ plugin.getLogger().severe("ZNPC was null while selecting by right-click");
+ return;
+ }
+ evt.getPlayer().acceptConversationInput(String.valueOf(evt.getNpc().getUUID()));
+ }
+ if (!evt.getPlayer().isConversing()) {
+ final Player player = evt.getPlayer();
+ final IQuester quester = plugin.getQuester(player.getUniqueId());
+ for (final IQuest quest : quester.getCurrentQuestsTemp().keySet()) {
+ if (quester.getCurrentStage(quest).containsObjective(ObjectiveType.DELIVER_ITEM)) {
+ final ItemStack hand = player.getItemInHand();
+ int currentIndex = -1;
+ final LinkedList matches = new LinkedList<>();
+ int reasonCode = 0;
+ for (final ItemStack is : quester.getCurrentStage(quest).getItemsToDeliver()) {
+ currentIndex++;
+ reasonCode = ItemUtil.compareItems(is, hand, true);
+ if (reasonCode == 0) {
+ matches.add(currentIndex);
+ }
+ }
+ final NPC clicked = evt.getNpc();
+ if (!matches.isEmpty()) {
+ for (final Integer match : matches) {
+ final UUID uuid = quester.getCurrentStage(quest).getItemDeliveryTargets().get(match);
+ if (uuid.equals(clicked.getUUID())) {
+ quester.deliverToNPC(quest, uuid, hand);
+ return;
+ }
+ }
+ } else if (!hand.getType().equals(Material.AIR)) {
+ for (final UUID uuid : quester.getCurrentStage(quest).getItemDeliveryTargets()) {
+ if (uuid.equals(clicked.getUUID())) {
+ String text = "";
+ final boolean hasMeta = hand.getItemMeta() != null;
+ if (hasMeta) {
+ text += ChatColor.LIGHT_PURPLE + "" + ChatColor.ITALIC
+ + (hand.getItemMeta().hasDisplayName() ? hand.getItemMeta().getDisplayName()
+ + ChatColor.GRAY + " (" : "");
+ }
+ text += ChatColor.AQUA + "- " + (hand.getDurability() != 0 ? (":" + ChatColor.BLUE
+ + hand.getDurability()) : "") + ChatColor.GRAY;
+ if (hasMeta) {
+ text += (hand.getItemMeta().hasDisplayName() ? ")" : "");
+ }
+ text += " x " + ChatColor.DARK_AQUA + hand.getAmount() + ChatColor.GRAY;
+ if (plugin.getSettings().canTranslateNames() && !hasMeta
+ && !hand.getItemMeta().hasDisplayName()) {
+ plugin.getLocaleManager().sendMessage(player, Lang
+ .get(player, "questInvalidDeliveryItem").replace("
- ", text), hand
+ .getType(), hand.getDurability(), null);
+ } else {
+ player.sendMessage(Lang.get(player, "questInvalidDeliveryItem")
+ .replace("
- ", text).replace("
- ", ItemUtil.getName(hand)));
+ }
+ switch (reasonCode) {
+ case 1:
+ player.sendMessage(ChatColor.GRAY + Lang.get(player, "difference")
+ .replace("", "one item is null"));
+ break;
+ case 0:
+ player.sendMessage(ChatColor.GRAY + Lang.get(player, "difference")
+ .replace("", "ERROR"));
+ break;
+ case -1:
+ player.sendMessage(ChatColor.GRAY + Lang.get(player, "difference")
+ .replace("", "name"));
+ break;
+ case -2:
+ player.sendMessage(ChatColor.GRAY + Lang.get(player, "difference")
+ .replace("", "amount"));
+ break;
+ case -3:
+ player.sendMessage(ChatColor.GRAY + Lang.get(player, "difference")
+ .replace("", "durability"));
+ break;
+ case -4:
+ player.sendMessage(ChatColor.GRAY + Lang.get(player, "difference")
+ .replace("", "display name or lore"));
+ break;
+ case -5:
+ player.sendMessage(ChatColor.GRAY + Lang.get(player, "difference")
+ .replace("", "enchantments"));
+ break;
+ case -6:
+ player.sendMessage(ChatColor.GRAY + Lang.get(player, "difference")
+ .replace("", "stored enchants"));
+ break;
+ case -7:
+ player.sendMessage(ChatColor.GRAY + Lang.get(player, "difference")
+ .replace("", "item flags"));
+ break;
+ case -8:
+ player.sendMessage(ChatColor.GRAY + Lang.get(player, "difference")
+ .replace("", "book data"));
+ break;
+ case -9:
+ player.sendMessage(ChatColor.GRAY + Lang.get(player, "difference")
+ .replace("", "potion type"));
+ break;
+ case -10:
+ player.sendMessage(ChatColor.GRAY + Lang.get(player, "difference")
+ .replace("", "fish variant"));
+ break;
+ default:
+ player.sendMessage(ChatColor.GRAY + Lang.get(player, "difference")
+ .replace("", "unknown"));
+ }
+ if (hasMeta) {
+ if (hand.getType().equals(Material.ENCHANTED_BOOK)) {
+ final EnchantmentStorageMeta esMeta = (EnchantmentStorageMeta) hand.getItemMeta();
+ if (esMeta.hasStoredEnchants()) {
+ for (final Map.Entry e : esMeta.getStoredEnchants()
+ .entrySet()) {
+ final HashMap single = new HashMap<>();
+ single.put(e.getKey(), e.getValue());
+ plugin.getLocaleManager().sendMessage(player, ChatColor.GRAY + "\u2515 "
+ + ChatColor.DARK_GREEN + " \n", single);
+ }
+ }
+ }
+ }
+ break;
+ }
+ }
+ }
+ }
+ }
+ boolean hasObjective = false;
+ for (final IQuest quest : quester.getCurrentQuestsTemp().keySet()) {
+ if (!quester.meetsCondition(quest, true)) {
+ continue;
+ }
+ if (quester.getCurrentStage(quest).containsObjective(ObjectiveType.TALK_TO_NPC)) {
+ if (quester.getCurrentStage(quest).getNpcsToInteract().contains(evt.getNpc().getUUID())) {
+ final int npcIndex = quester.getCurrentStage(quest).getNpcsToInteract().indexOf(evt.getNpc()
+ .getUUID());
+ if (quester.getQuestData(quest) != null && npcIndex > -1
+ && !quester.getQuestData(quest).npcsInteracted.get(npcIndex)) {
+ hasObjective = true;
+ }
+ quester.interactWithNPC(quest, evt.getNpc().getUUID());
+ }
+ }
+ }
+ if (hasObjective || !plugin.getQuestNpcUuids().contains(evt.getNpc().getUUID())) {
+ return;
+ }
+ boolean hasAtLeastOneGUI = false;
+ final LinkedList npcQuests = new LinkedList<>();
+ for (final IQuest q : plugin.getLoadedQuests()) {
+ if (quester.getCurrentQuestsTemp().containsKey(q)) {
+ continue;
+ }
+ if (q.getNpcStart() != null && q.getNpcStart().equals(evt.getNpc().getUUID())) {
+ if (plugin.getSettings().canIgnoreLockedQuests()
+ && (!quester.getCompletedQuestsTemp().contains(q)
+ || q.getPlanner().getCooldown() > -1)) {
+ if (q.testRequirements(quester)) {
+ npcQuests.add(q);
+ if (q.getGUIDisplay() != null) {
+ hasAtLeastOneGUI = true;
+ }
+ }
+ } else if (!quester.getCompletedQuestsTemp().contains(q) || q.getPlanner().getCooldown() > -1) {
+ npcQuests.add(q);
+ if (q.getGUIDisplay() != null) {
+ hasAtLeastOneGUI = true;
+ }
+ }
+ }
+ }
+ if (npcQuests.size() == 1) {
+ final IQuest q = npcQuests.get(0);
+ if (quester.canAcceptOffer(q, true)) {
+ quester.setQuestIdToTake(q.getId());
+ if (!plugin.getSettings().canAskConfirmation()) {
+ quester.takeQuest(q, false);
+ } else {
+ if (q.getGUIDisplay() != null) {
+ quester.showGUIDisplay(evt.getNpc().getUUID(), npcQuests);
+ } else {
+ for (final String msg : extracted(quester).split("
")) {
+ player.sendMessage(msg);
+ }
+ plugin.getConversationFactory().buildConversation(player).begin();
+ }
+ }
+ }
+ } else if (npcQuests.size() > 1) {
+ if (hasAtLeastOneGUI) {
+ quester.showGUIDisplay(evt.getNpc().getUUID(), npcQuests);
+ } else {
+ final Conversation c = plugin.getNpcConversationFactory().buildConversation(player);
+ c.getContext().setSessionData("npcQuests", npcQuests);
+ c.getContext().setSessionData("npc", evt.getNpc().getGameProfile().getName());
+ c.begin();
+ }
+ } else {
+ Lang.send(player, ChatColor.YELLOW + Lang.get(player, "noMoreQuest"));
+ }
+ }
+ }
+ }
+
+ private String extracted(final IQuester quester) {
+ final IQuest quest = plugin.getQuestByIdTemp(quester.getQuestIdToTake());
+ return MessageFormat.format("{0}- {1}{2}{3} -\n\n{4}{5}\n", ChatColor.GOLD, ChatColor.DARK_PURPLE,
+ quest.getName(), ChatColor.GOLD, ChatColor.RESET, quest.getDescription());
+ }
+}
diff --git a/core/src/main/java/me/blackvein/quests/quests/BukkitQuestFactory.java b/core/src/main/java/me/blackvein/quests/quests/BukkitQuestFactory.java
index 24afa62e5..293d77b6a 100644
--- a/core/src/main/java/me/blackvein/quests/quests/BukkitQuestFactory.java
+++ b/core/src/main/java/me/blackvein/quests/quests/BukkitQuestFactory.java
@@ -152,7 +152,7 @@ public class BukkitQuestFactory implements QuestFactory, ConversationAbandonedLi
context.setSessionData(CK.Q_FINISH_MESSAGE, q.getFinished());
if (plugin.getDependencies().getCitizens() != null) {
if (q.getNpcStart() != null) {
- context.setSessionData(CK.Q_START_NPC, q.getNpcStart().getUniqueId().toString());
+ context.setSessionData(CK.Q_START_NPC, q.getNpcStart().toString());
}
}
context.setSessionData(CK.Q_START_BLOCK, q.getBlockStart());
diff --git a/core/src/main/java/me/blackvein/quests/util/ConfigUtil.java b/core/src/main/java/me/blackvein/quests/util/ConfigUtil.java
index 77d3da2f5..6354c1178 100644
--- a/core/src/main/java/me/blackvein/quests/util/ConfigUtil.java
+++ b/core/src/main/java/me/blackvein/quests/util/ConfigUtil.java
@@ -105,7 +105,7 @@ public class ConfigUtil {
String parsed = parseString(s);
if (parsed.contains("")) {
if (quest.getNpcStart() != null) {
- parsed = parsed.replace("", quest.getNpcStart().getName());
+ parsed = parsed.replace("", quest.getNpcStartName());
} else {
Bukkit.getLogger().warning(quest.getName() + " quest uses tag but doesn't have an NPC start set");
}
@@ -120,7 +120,7 @@ public class ConfigUtil {
String parsed = parseString(s);
if (parsed.contains("")) {
if (quest.getNpcStart() != null) {
- parsed = parsed.replace("", quest.getNpcStart().getName());
+ parsed = parsed.replace("", quest.getNpcStartName());
} else {
Bukkit.getLogger().warning(quest.getName() + " quest uses tag but doesn't have an NPC start set");
}
@@ -143,7 +143,7 @@ public class ConfigUtil {
String parsed = parseString(s);
if (parsed.contains("")) {
if (quest.getNpcStart() != null) {
- parsed = parsed.replace("", quest.getNpcStart().getName());
+ parsed = parsed.replace("", quest.getNpcStartName());
} else {
Bukkit.getLogger().warning(quest.getName() + " quest uses tag but doesn't have an NPC start set");
}