diff --git a/api/pom.xml b/api/pom.xml index 8b8c31e24..b6f4182bf 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -16,7 +16,7 @@ - + jitpack.io https://jitpack.io @@ -54,6 +54,16 @@ repsy-release https://repo.repsy.io/mvn/niconeko/release + + + codemc-snapshots + https://repo.codemc.io/repository/maven-snapshots/ + + + + znpcsplus-repo + https://repo.pyr.lol/releases + @@ -130,9 +140,15 @@ provided - com.github.gonalez - znpc-servers - 21a0650 + com.github.retrooper.packetevents + spigot + 2.0.0-SNAPSHOT + provided + + + lol.pyr + ZNPCsPlus + 1.0.5 provided 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 d79f4bff4..1cd7b25ca 100644 --- a/api/src/main/java/me/blackvein/quests/dependencies/IDependencies.java +++ b/api/src/main/java/me/blackvein/quests/dependencies/IDependencies.java @@ -17,7 +17,7 @@ import com.gmail.nossr50.mcMMO; import com.herocraftonline.heroes.Heroes; import com.herocraftonline.heroes.characters.Hero; -import io.github.znetworkw.znpcservers.ServersNPC; +import lol.pyr.znpcsplus.ZNPCsPlus; import me.blackvein.quests.player.IQuester; import me.blackvein.quests.reflect.denizen.DenizenAPI; import me.blackvein.quests.reflect.worldguard.WorldGuardAPI; @@ -59,7 +59,7 @@ public interface IDependencies { AstralBooksAPI getAstralBooksApi(); - ServersNPC getZnpcs(); + ZNPCsPlus getZnpcsPlus(); PartiesAPI getPartiesApi(); @@ -67,9 +67,9 @@ public interface IDependencies { boolean runDenizenScript(final String scriptName, final IQuester quester, final UUID uuid); - Location getNPCLocation(final UUID uuid); + Location getNpcLocation(final UUID uuid); - String getNPCName(final UUID uuid); + String getNpcName(final UUID uuid); int getMcmmoSkillLevel(final SkillType st, final String player); diff --git a/core/pom.xml b/core/pom.xml index 633fa2d6c..bb2d55720 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -16,7 +16,7 @@ - + jitpack.io https://jitpack.io @@ -54,6 +54,16 @@ repsy-release https://repo.repsy.io/mvn/niconeko/release + + + codemc-snapshots + https://repo.codemc.io/repository/maven-snapshots/ + + + + znpcsplus-repo + https://repo.pyr.lol/releases + @@ -124,9 +134,15 @@ provided - com.github.gonalez - znpc-servers - 21a0650 + com.github.retrooper.packetevents + spigot + 2.0.0-SNAPSHOT + provided + + + lol.pyr + ZNPCsPlus + 1.0.5 provided diff --git a/core/src/main/java/me/blackvein/quests/Dependencies.java b/core/src/main/java/me/blackvein/quests/Dependencies.java index 7b3274913..bd78b2e25 100644 --- a/core/src/main/java/me/blackvein/quests/Dependencies.java +++ b/core/src/main/java/me/blackvein/quests/Dependencies.java @@ -20,8 +20,8 @@ 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 lol.pyr.znpcsplus.ZNPCsPlus; import me.blackvein.quests.dependencies.IDependencies; import me.blackvein.quests.listeners.CitizensListener; import me.blackvein.quests.player.IQuester; @@ -40,8 +40,8 @@ import org.bukkit.plugin.RegisteredServiceProvider; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import ro.niconeko.astralbooks.api.AstralBooksAPI; import ro.niconeko.astralbooks.api.AstralBooks; +import ro.niconeko.astralbooks.api.AstralBooksAPI; import java.util.Collections; import java.util.HashSet; @@ -65,8 +65,9 @@ public class Dependencies implements IDependencies { public static CitizensPlugin citizens = null; private static DenizenAPI denizen = null; private static AstralBooksAPI astralBooks = null; - private static ServersNPC znpcs = null; + private static ZNPCsPlus znpcs = null; private static PartiesAPI parties = null; + private int npcEffectThread = -1; public Dependencies(final Quests plugin) { this.plugin = plugin; @@ -160,10 +161,7 @@ public void linkCitizens() { } if (!found) { plugin.getServer().getPluginManager().registerEvents(plugin.getCitizensListener(), plugin); - if (plugin.getSettings().canNpcEffects()) { - plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, plugin.getNpcEffectThread(), - 20, 20); - } + startNpcEffectThread(); plugin.getLogger().info("Successfully linked Quests with Citizens " + citizens.getDescription().getVersion()); } @@ -196,16 +194,16 @@ public AstralBooksAPI getAstralBooksApi() { return astralBooks; } - public ServersNPC getZnpcs() { + public ZNPCsPlus getZnpcsPlus() { if (znpcs == null) { - znpcs = (ServersNPC) plugin.getServer().getPluginManager().getPlugin("ServersNPC"); + znpcs = (ZNPCsPlus) plugin.getServer().getPluginManager().getPlugin("ZNPCsPlus"); + startNpcEffectThread(); } return znpcs; } - public Set getZnpcsUuids() { - if (znpcs != null && isPluginAvailable("ServersNPC")) { - // TODO - it seems ZNPCs UUIDs do not persist restart + public Set getZnpcsPlusUuids() { + if (znpcs != null && isPluginAvailable("ZNPCsPlus")) { return io.github.znetworkw.znpcservers.npc.NPC.all().stream() .map(io.github.znetworkw.znpcservers.npc.NPC::getUUID).collect(Collectors.toSet()); } @@ -281,10 +279,10 @@ public boolean runDenizenScript(final String scriptName, final IQuester quester, return plugin.getDenizenTrigger().runDenizenScript(scriptName, quester, uuid); } - public @Nullable Location getNPCLocation(final UUID uuid) { + public @Nullable Location getNpcLocation(final UUID uuid) { if (citizens != null && citizens.getNPCRegistry().getByUniqueId(uuid) != null) { return citizens.getNPCRegistry().getByUniqueId(uuid).getStoredLocation(); - } else if (getZnpcsUuids().contains(uuid)) { + } else if (znpcs != null && getZnpcsPlusUuids().contains(uuid)) { final Optional opt = NPC.all().stream().filter(npc1 -> npc1.getUUID().equals(uuid)).findAny(); if (opt.isPresent()) { return opt.get().getLocation(); @@ -293,10 +291,10 @@ public boolean runDenizenScript(final String scriptName, final IQuester quester, return null; } - public @Nullable Entity getNPCEntity(final UUID uuid) { + public @Nullable Entity getNpcEntity(final UUID uuid) { if (citizens != null && citizens.getNPCRegistry().getByUniqueId(uuid) != null) { return citizens.getNPCRegistry().getByUniqueId(uuid).getEntity(); - } else if (getZnpcsUuids().contains(uuid)) { + } else if (znpcs != 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(); @@ -305,11 +303,11 @@ public boolean runDenizenScript(final String scriptName, final IQuester quester, return null; } - public @NotNull String getNPCName(final UUID uuid) { - Entity npc = null; + public @NotNull String getNpcName(final UUID uuid) { + Entity npc; if (citizens != null && citizens.getNPCRegistry().getByUniqueId(uuid) != null) { return citizens.getNPCRegistry().getByUniqueId(uuid).getName(); - } else if (getZnpcsUuids().contains(uuid)) { + } else if (znpcs != 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(); @@ -323,10 +321,10 @@ public boolean runDenizenScript(final String scriptName, final IQuester quester, return "NPC"; } - public @Nullable UUID getUUIDFromNPC(final Entity entity) { + public @Nullable UUID getUuidFromNpc(final Entity entity) { if (citizens != null && citizens.getNPCRegistry().isNPC(entity)) { return citizens.getNPCRegistry().getNPC(entity).getUniqueId(); - } else if (getZnpcsUuids().contains(entity.getUniqueId())) { + } else if (znpcs != 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(); @@ -334,6 +332,18 @@ public boolean runDenizenScript(final String scriptName, final IQuester quester, } return null; } + + public void startNpcEffectThread() { + if (npcEffectThread == -1 && plugin.getSettings().canNpcEffects()) { + npcEffectThread = plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, + plugin.getNpcEffectThread(), 20, 20); + } + } + + @SuppressWarnings("unused") + public void stopNpcEffectThread() { + plugin.getServer().getScheduler().cancelTask(npcEffectThread); + } public int getMcmmoSkillLevel(final SkillType st, final String player) { final McMMOPlayer mPlayer = UserManager.getPlayer(player); diff --git a/core/src/main/java/me/blackvein/quests/Quest.java b/core/src/main/java/me/blackvein/quests/Quest.java index 70bb201d4..e32769596 100644 --- a/core/src/main/java/me/blackvein/quests/Quest.java +++ b/core/src/main/java/me/blackvein/quests/Quest.java @@ -199,7 +199,7 @@ public void setNpcStart(final UUID npcStart) { @Override public String getNpcStartName() { - return plugin.getDependencies().getNPCName(getNpcStart()); + return plugin.getDependencies().getNpcName(getNpcStart()); } @Override @@ -386,9 +386,9 @@ public boolean updateCompass(final IQuester quester, final IStage stage) { Bukkit.getScheduler().runTask(plugin, () -> { Location targetLocation = null; if (stage.getNpcsToInteract() != null && stage.getNpcsToInteract().size() > 0) { - targetLocation = plugin.getDependencies().getNPCLocation(stage.getNpcsToInteract().getFirst()); + targetLocation = plugin.getDependencies().getNpcLocation(stage.getNpcsToInteract().getFirst()); } else if (stage.getNpcsToKill() != null && stage.getNpcsToKill().size() > 0) { - targetLocation = plugin.getDependencies().getNPCLocation(stage.getNpcsToKill().getFirst()); + targetLocation = plugin.getDependencies().getNpcLocation(stage.getNpcsToKill().getFirst()); } else if (stage.getLocationsToReach() != null && stage.getLocationsToReach().size() > 0) { targetLocation = stage.getLocationsToReach().getFirst(); } else if (stage.getItemDeliveryTargets() != null && stage.getItemDeliveryTargets().size() > 0) { @@ -398,8 +398,8 @@ public boolean updateCompass(final IQuester quester, final IStage stage) { targetLocation = plugin.getDependencies().getCitizens().getNPCRegistry().getByUniqueId(uuid) .getStoredLocation(); } - if (plugin.getDependencies().getZnpcs() != null - && plugin.getDependencies().getZnpcsUuids().contains(uuid)) { + if (plugin.getDependencies().getZnpcsPlus() != null + && plugin.getDependencies().getZnpcsPlusUuids().contains(uuid)) { final Optional opt = NPC.all().stream().filter(npc1 -> npc1.getUUID().equals(uuid)).findAny(); if (opt.isPresent()) { targetLocation = opt.get().getLocation(); diff --git a/core/src/main/java/me/blackvein/quests/Quester.java b/core/src/main/java/me/blackvein/quests/Quester.java index 19aaf64c3..d9c5b4eb7 100644 --- a/core/src/main/java/me/blackvein/quests/Quester.java +++ b/core/src/main/java/me/blackvein/quests/Quester.java @@ -574,8 +574,8 @@ && getPlayer().getLocation().getWorld() != 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)) { + } else if (plugin.getDependencies().getZnpcsPlus() != null + && plugin.getDependencies().getZnpcsPlusUuids().contains(uuid)) { final Optional opt = NPC.all().stream().filter(npc1 -> npc1.getUUID().equals(uuid)).findAny(); if (opt.isPresent()) { npc = (Entity) opt.get().getBukkitEntity(); @@ -1400,7 +1400,7 @@ public LinkedList getCurrentObjectives(final IQuest quest, final boolean 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(getPlayer(), "deliver").replace("", depends.getNPCName(npc)); + String message = color + Lang.get(getPlayer(), "deliver").replace("", depends.getNpcName(npc)); if (message.contains("")) { message = message.replace("", "" + color + delivered + "/" + toDeliver); } else { @@ -1421,7 +1421,7 @@ public LinkedList getCurrentObjectives(final IQuest quest, final boolean } final ChatColor color = !interacted ? ChatColor.GREEN : ChatColor.GRAY; String message = color + Lang.get(getPlayer(), "talkTo") - .replace("", depends.getNPCName(n)); + .replace("", depends.getNpcName(n)); if (depends.getPlaceholderApi() != null) { message = PlaceholderAPI.setPlaceholders(getPlayer(), message); } @@ -1438,9 +1438,9 @@ public LinkedList getCurrentObjectives(final IQuest quest, final boolean final ChatColor color = npcKilled < toNpcKill ? ChatColor.GREEN : ChatColor.GRAY; String message = color + Lang.get(getPlayer(), "kill"); if (message.contains("")) { - message = message.replace("", depends.getNPCName(n)); + message = message.replace("", depends.getNpcName(n)); } else { - message += " " + depends.getNPCName(n); + message += " " + depends.getNpcName(n); } if (message.contains("")) { message = message.replace("", "" + color + npcKilled + "/" + toNpcKill); @@ -1909,7 +1909,7 @@ public LinkedList getCurrentObjectivesTemp(final IQuest quest, final int toDeliver = goal.getAmount(); final UUID npc = stage.getItemDeliveryTargets().get(deliverIndex); final ChatColor color = delivered < toDeliver ? ChatColor.GREEN : ChatColor.GRAY; - String message = color + Lang.get(getPlayer(), "deliver").replace("", depends.getNPCName(npc)); + String message = color + Lang.get(getPlayer(), "deliver").replace("", depends.getNpcName(npc)); if (message.contains("")) { message = message.replace("", "" + color + delivered + "/" + toDeliver); } else { @@ -1932,7 +1932,7 @@ public LinkedList getCurrentObjectivesTemp(final IQuest quest, boolean interacted = data.npcsInteracted.get(interactIndex); final ChatColor color = !interacted ? ChatColor.GREEN : ChatColor.GRAY; String message = color + Lang.get(getPlayer(), "talkTo") - .replace("", depends.getNPCName(n)); + .replace("", depends.getNpcName(n)); if (depends.getPlaceholderApi() != null) { message = PlaceholderAPI.setPlaceholders(getPlayer(), message); } @@ -1950,9 +1950,9 @@ public LinkedList getCurrentObjectivesTemp(final IQuest quest, final ChatColor color = npcKilled < toNpcKill ? ChatColor.GREEN : ChatColor.GRAY; String message = color + Lang.get(getPlayer(), "kill"); if (message.contains("")) { - message = message.replace("", depends.getNPCName(n)); + message = message.replace("", depends.getNpcName(n)); } else { - message += " " + depends.getNPCName(n); + message += " " + depends.getNpcName(n); } if (message.contains("")) { message = message.replace("", "" + color + npcKilled + "/" + toNpcKill); @@ -4158,7 +4158,7 @@ public void finishObjective(final IQuest quest, final Objective objective, final final ItemStack is = getCurrentStage(quest).getItemsToDeliver().get(getCurrentStage(quest) .getItemsToDeliver().indexOf(goal)); String message = ChatColor.GREEN + "(" + Lang.get(p, "completed") + ") " + Lang.get(p, "deliver") - .replace("", plugin.getDependencies().getNPCName(getCurrentStage(quest) + .replace("", plugin.getDependencies().getNpcName(getCurrentStage(quest) .getItemDeliveryTargets().get(getCurrentStage(quest).getItemsToDeliver().indexOf(goal)))); if (message.contains("")) { message = message.replace("", "" + ChatColor.GREEN + is.getAmount() + "/" + is.getAmount()); @@ -4219,7 +4219,7 @@ public void finishObjective(final IQuest quest, final Objective objective, final sendMessage(message); } else if (type.equals(ObjectiveType.TALK_TO_NPC)) { final String message = ChatColor.GREEN + "(" + Lang.get(p, "completed") + ") " + Lang.get(p, "talkTo") - .replace("", plugin.getDependencies().getNPCName(npc)); + .replace("", plugin.getDependencies().getNpcName(npc)); sendMessage(message); } else if (type.equals(ObjectiveType.KILL_NPC)) { String message = ChatColor.GREEN + "(" + Lang.get(p, "completed") + ") " + Lang.get(p, "kill"); @@ -4230,7 +4230,7 @@ public void finishObjective(final IQuest quest, final Objective objective, final message += ChatColor.AQUA + " " + ChatColor.GREEN + ": " + goal.getAmount() + "/" + goal.getAmount(); } - sendMessage(message.replace("", plugin.getDependencies().getNPCName(npc))); + sendMessage(message.replace("", plugin.getDependencies().getNpcName(npc))); } else if (type.equals(ObjectiveType.TAME_MOB)) { String message = ChatColor.GREEN + "(" + Lang.get(p, "completed") + ") " + Lang.get(p, "tame"); if (!message.contains("")) { @@ -4833,7 +4833,7 @@ public void showGUIDisplay(final UUID npc, final LinkedList quests) { if (plugin.getDependencies().getCitizens() == null) { return; } - final String name = plugin.getDependencies().getNPCName(npc); + final String name = plugin.getDependencies().getNpcName(npc); final LinkedList qs = new LinkedList<>(); for (IQuest q : quests) { qs.add((Quest) q); diff --git a/core/src/main/java/me/blackvein/quests/Quests.java b/core/src/main/java/me/blackvein/quests/Quests.java index 24bfc9db6..09b73f610 100644 --- a/core/src/main/java/me/blackvein/quests/Quests.java +++ b/core/src/main/java/me/blackvein/quests/Quests.java @@ -267,7 +267,7 @@ public void onEnable() { getServer().getPluginManager().registerEvents(getBlockListener(), this); getServer().getPluginManager().registerEvents(getItemListener(), this); depends.linkCitizens(); - if (depends.getZnpcs() != null) { + if (depends.getZnpcsPlus() != null) { getServer().getPluginManager().registerEvents(getZnpcsListener(), this); } getServer().getPluginManager().registerEvents(getPlayerListener(), this); @@ -1424,7 +1424,7 @@ public void showObjectives(final IQuest quest, final IQuester quester, final boo continue; } String message = color + "- " + Lang.get(quester.getPlayer(), "deliver") - .replace("", depends.getNPCName(npc)); + .replace("", depends.getNpcName(npc)); if (message.contains("")) { message = message.replace("", "" + color + delivered + "/" + toDeliver); } else { @@ -1454,7 +1454,7 @@ public void showObjectives(final IQuest quest, final IQuester quester, final boo continue; } String message = color + "- " + Lang.get(quester.getPlayer(), "talkTo") - .replace("", depends.getNPCName(uuid)); + .replace("", depends.getNpcName(uuid)); if (depends.getPlaceholderApi() != null) { message = PlaceholderAPI.setPlaceholders(quester.getPlayer(), message); } @@ -1475,9 +1475,9 @@ public void showObjectives(final IQuest quest, final IQuester quester, final boo } String message = color + "- " + Lang.get(quester.getPlayer(), "kill"); if (message.contains("")) { - message = message.replace("", depends.getNPCName(uuid)); + message = message.replace("", depends.getNpcName(uuid)); } else { - message += " " + depends.getNPCName(uuid); + message += " " + depends.getNpcName(uuid); } if (message.contains("")) { message = message.replace("", "" + color + npcKilled + "/" + toNpcKill); diff --git a/core/src/main/java/me/blackvein/quests/convo/conditions/tasks/ConditionEntityPrompt.java b/core/src/main/java/me/blackvein/quests/convo/conditions/tasks/ConditionEntityPrompt.java index f0bfb5a42..7cc68e722 100644 --- a/core/src/main/java/me/blackvein/quests/convo/conditions/tasks/ConditionEntityPrompt.java +++ b/core/src/main/java/me/blackvein/quests/convo/conditions/tasks/ConditionEntityPrompt.java @@ -16,7 +16,6 @@ import me.blackvein.quests.convo.conditions.ConditionsEditorNumericPrompt; import me.blackvein.quests.convo.conditions.ConditionsEditorStringPrompt; import me.blackvein.quests.convo.conditions.main.ConditionMainPrompt; -import me.blackvein.quests.convo.quests.objectives.QuestNpcsPrompt; import me.blackvein.quests.events.editor.conditions.ConditionsEditorPostOpenNumericPromptEvent; import me.blackvein.quests.events.editor.conditions.ConditionsEditorPostOpenStringPromptEvent; import me.blackvein.quests.util.CK; @@ -104,7 +103,7 @@ public String getAdditionalText(final ConversationContext context, final int num return text.toString(); } case 2: - if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) { + if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) { if (context.getSessionData(CK.C_WHILE_RIDING_NPC) == null) { return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; } else { @@ -113,7 +112,7 @@ public String getAdditionalText(final ConversationContext context, final int num if (whileRidingNpc != null) { for (final UUID u : whileRidingNpc) { text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.BLUE) - .append(plugin.getDependencies().getNPCName(u)); + .append(plugin.getDependencies().getNpcName(u)); } } return text.toString(); @@ -278,7 +277,7 @@ public Prompt acceptInput(final @NotNull ConversationContext context, final Stri for (final String s : input.split(" ")) { try { final UUID uuid = UUID.fromString(s); - if (plugin.getDependencies().getNPCEntity(uuid) != null && npcs != null) { + if (plugin.getDependencies().getNpcEntity(uuid) != null && npcs != null) { npcs.add(uuid.toString()); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorInvalidNPC") 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 41f1256f2..5b450c06b 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 @@ -107,7 +107,7 @@ public ChatColor getNumberColor(final ConversationContext context, final int num return ChatColor.GRAY; } case 7: - if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) { + if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) { return ChatColor.BLUE; } else { return ChatColor.GRAY; @@ -132,7 +132,7 @@ public String getSelectionText(final ConversationContext context, final int numb return ChatColor.YELLOW + Lang.get("questEditorFinishMessage"); case 4: if (context.getSessionData(CK.Q_START_NPC) == null || plugin.getDependencies().getCitizens() != null - || plugin.getDependencies().getZnpcs() != null) { + || plugin.getDependencies().getZnpcsPlus() != null) { return ChatColor.YELLOW + Lang.get("questEditorNPCStart"); } else { return ChatColor.GRAY + Lang.get("questEditorNPCStart"); @@ -150,7 +150,7 @@ public String getSelectionText(final ConversationContext context, final int numb return ChatColor.GRAY + Lang.get("questWGSetRegion"); } case 7: - if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) { + if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) { return ChatColor.YELLOW + Lang.get("questEditorSetGUI"); } else { return ChatColor.GRAY + Lang.get("questEditorSetGUI"); @@ -194,12 +194,12 @@ public String getAdditionalText(final ConversationContext context, final int num + ChatColor.RESET + ChatColor.GRAY + ")"; case 4: if (context.getSessionData(CK.Q_START_NPC) == null && (plugin.getDependencies().getCitizens() != null - || plugin.getDependencies().getZnpcs() != null)) { + || plugin.getDependencies().getZnpcsPlus() != null)) { return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; - } else if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) { + } else if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) { final UUID uuid = UUID.fromString((String) Objects.requireNonNull(context .getSessionData(CK.Q_START_NPC))); - return ChatColor.GRAY + "(" + ChatColor.AQUA + plugin.getDependencies().getNPCName(uuid) + return ChatColor.GRAY + "(" + ChatColor.AQUA + plugin.getDependencies().getNpcName(uuid) + ChatColor.RESET + ChatColor.GRAY + ")"; } else { return ChatColor.GRAY + "(" + Lang.get("notInstalled") + ")"; @@ -226,7 +226,7 @@ public String getAdditionalText(final ConversationContext context, final int num return ChatColor.GRAY + "(" + Lang.get("notInstalled") + ")"; } case 7: - if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) { + if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) { if (context.getSessionData(CK.Q_GUIDISPLAY) == null) { return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; } else { @@ -270,7 +270,7 @@ protected Prompt acceptValidatedInput(final @NotNull ConversationContext context case 3: return new QuestFinishMessagePrompt(context); case 4: - if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) { + if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) { return new QuestNPCStartPrompt(context); } else { return new QuestMainPrompt(context); @@ -292,7 +292,7 @@ protected Prompt acceptValidatedInput(final @NotNull ConversationContext context return new QuestMainPrompt(context); } case 7: - if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) { + if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) { return new QuestGuiDisplayPrompt(context); } else { return new QuestMainPrompt(context); @@ -503,7 +503,7 @@ public Prompt acceptInput(final @NotNull ConversationContext context, final Stri if (!input.equalsIgnoreCase(Lang.get("cmdCancel")) && !input.equalsIgnoreCase(Lang.get("cmdClear"))) { try { final UUID uuid = UUID.fromString(input); - if (plugin.getDependencies().getNPCEntity(uuid) == null) { + if (plugin.getDependencies().getNpcEntity(uuid) == null) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorInvalidNPC") .replace("", input)); return new QuestNPCStartPrompt(context); diff --git a/core/src/main/java/me/blackvein/quests/convo/quests/objectives/QuestNpcsPrompt.java b/core/src/main/java/me/blackvein/quests/convo/quests/objectives/QuestNpcsPrompt.java index b7bd10576..751849333 100644 --- a/core/src/main/java/me/blackvein/quests/convo/quests/objectives/QuestNpcsPrompt.java +++ b/core/src/main/java/me/blackvein/quests/convo/quests/objectives/QuestNpcsPrompt.java @@ -95,7 +95,7 @@ public String getSelectionText(final ConversationContext context, final int numb public String getAdditionalText(final ConversationContext context, final int number) { switch(number) { case 1: - if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) { + if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) { if (context.getSessionData(pref + CK.S_DELIVERY_ITEMS) == null) { return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; } else { @@ -110,7 +110,7 @@ public String getAdditionalText(final ConversationContext context, final int num .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().getNPCName(UUID.fromString(npcs.get(i)))); + .append(plugin.getDependencies().getNpcName(UUID.fromString(npcs.get(i)))); } } return text.toString(); @@ -119,7 +119,7 @@ public String getAdditionalText(final ConversationContext context, final int num return ChatColor.GRAY + " (" + Lang.get("notInstalled") + ")"; } case 2: - if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) { + if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) { if (context.getSessionData(pref + CK.S_NPCS_TO_TALK_TO) == null) { return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; } else { @@ -129,7 +129,7 @@ public String getAdditionalText(final ConversationContext context, final int num if (npcs != null) { for (final String npc : npcs) { text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.BLUE) - .append(plugin.getDependencies().getNPCName(UUID.fromString(npc))); + .append(plugin.getDependencies().getNpcName(UUID.fromString(npc))); } } return text.toString(); @@ -138,7 +138,7 @@ public String getAdditionalText(final ConversationContext context, final int num return ChatColor.GRAY + "(" + Lang.get("notInstalled") + ")"; } case 3: - if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) { + if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) { if (context.getSessionData(pref + CK.S_NPCS_TO_KILL) == null) { return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; } else { @@ -150,7 +150,7 @@ public String getAdditionalText(final ConversationContext context, final int num 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().getNPCName(UUID.fromString(npcs.get(i)))) + .append(plugin.getDependencies().getNpcName(UUID.fromString(npcs.get(i)))) .append(ChatColor.GRAY).append(" x ").append(ChatColor.AQUA).append(amounts.get(i)); } } @@ -187,21 +187,21 @@ public String getAdditionalText(final ConversationContext context, final int num protected Prompt acceptValidatedInput(final @NotNull ConversationContext context, final Number input) { switch(input.intValue()) { case 1: - if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) { + if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) { return new QuestNpcsDeliveryListPrompt(context); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoCitizens")); return new QuestStageMainPrompt(stageNum, context); } case 2: - if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) { + if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) { return new QuestNpcsIdsToTalkToPrompt(context); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoCitizens")); return new QuestStageMainPrompt(stageNum, context); } case 3: - if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) { + if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) { return new QuestNpcsKillListPrompt(context); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoCitizens")); @@ -300,7 +300,7 @@ public String getAdditionalText(final ConversationContext context, final int num for (final String s : deliveryNpcs) { final UUID uuid = UUID.fromString(s); text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA) - .append(plugin.getDependencies().getNPCName(uuid)).append(ChatColor.GRAY) + .append(plugin.getDependencies().getNpcName(uuid)).append(ChatColor.GRAY) .append(" (").append(ChatColor.BLUE).append(s).append(ChatColor.GRAY).append(")"); } } @@ -454,7 +454,7 @@ public Prompt acceptInput(final @NotNull ConversationContext context, final Stri for (final String s : input.split(" ")) { try { final UUID uuid = UUID.fromString(s); - if (plugin.getDependencies().getNPCEntity(uuid) != null && npcs != null) { + if (plugin.getDependencies().getNpcEntity(uuid) != null && npcs != null) { npcs.add(uuid.toString()); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorInvalidNPC") @@ -570,7 +570,7 @@ public Prompt acceptInput(final @NotNull ConversationContext context, final Stri for (final String s : args) { try { final UUID uuid = UUID.fromString(s); - if (plugin.getDependencies().getNPCEntity(uuid) != null && npcs != null) { + if (plugin.getDependencies().getNpcEntity(uuid) != null && npcs != null) { npcs.add(uuid.toString()); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorInvalidNPC") @@ -650,7 +650,7 @@ public String getSelectionText(final ConversationContext context, final int numb public String getAdditionalText(final ConversationContext context, final int number) { switch(number) { case 1: - if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcs() != null) { + if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) { if (context.getSessionData(pref + CK.S_NPCS_TO_KILL) == null) { return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; } else { @@ -659,7 +659,7 @@ public String getAdditionalText(final ConversationContext context, final int num if (npcsToKill != null) { for (final String s : npcsToKill) { text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.BLUE) - .append(plugin.getDependencies().getNPCName(UUID.fromString(s))) + .append(plugin.getDependencies().getNpcName(UUID.fromString(s))) .append(ChatColor.GRAY).append(" (").append(ChatColor.AQUA).append(s) .append(ChatColor.GRAY).append(")"); } @@ -792,7 +792,7 @@ public Prompt acceptInput(final @NotNull ConversationContext context, final Stri for (final String s : args) { try { final UUID uuid = UUID.fromString(s); - if (plugin.getDependencies().getNPCEntity(uuid) != null && npcs != null) { + if (plugin.getDependencies().getNpcEntity(uuid) != null && npcs != null) { npcs.add(uuid.toString()); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorInvalidNPC") diff --git a/core/src/main/java/me/blackvein/quests/listeners/ZnpcsListener.java b/core/src/main/java/me/blackvein/quests/listeners/ZnpcsListener.java index aa2f0cdd5..2711383a8 100644 --- a/core/src/main/java/me/blackvein/quests/listeners/ZnpcsListener.java +++ b/core/src/main/java/me/blackvein/quests/listeners/ZnpcsListener.java @@ -1,7 +1,7 @@ package me.blackvein.quests.listeners; import io.github.znetworkw.znpcservers.npc.NPC; -import io.github.znetworkw.znpcservers.npc.event.NPCInteractEvent; +import io.github.znetworkw.znpcservers.npc.interaction.NPCInteractEvent; import me.blackvein.quests.Quests; import me.blackvein.quests.enums.ObjectiveType; import me.blackvein.quests.player.IQuester; @@ -12,6 +12,7 @@ import org.bukkit.Material; import org.bukkit.conversations.Conversation; import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -34,7 +35,7 @@ public ZnpcsListener(final Quests plugin) { @EventHandler public void onNPCInteract(final NPCInteractEvent event) { - if (plugin.getDependencies().getZnpcs() == null) { + if (plugin.getDependencies().getZnpcsPlus() == null) { return; } if (event.isLeftClick()) { @@ -44,9 +45,6 @@ public void onNPCInteract(final NPCInteractEvent event) { return; } event.getPlayer().acceptConversationInput(String.valueOf(event.getNpc().getUUID())); - event.getPlayer().sendMessage(ChatColor.RED + "Warning: " + ChatColor.RESET - + "ZNPCs is not fully supported and will break after server restart. Please ask its developer " - + "to fix this at https://github.com/gonalez/znpc-servers/issues/36"); } } else if (event.isRightClick()) { if (plugin.getQuestFactory().getSelectingNpcs().contains(event.getPlayer().getUniqueId())) { @@ -55,9 +53,6 @@ public void onNPCInteract(final NPCInteractEvent event) { return; } event.getPlayer().acceptConversationInput(String.valueOf(event.getNpc().getUUID())); - event.getPlayer().sendMessage(ChatColor.RED + "Warning: " + ChatColor.RESET - + "ZNPCs is not fully supported and will break after server restart. Please ask its developer " - + "to fix this at https://github.com/gonalez/znpc-servers/issues/36"); } if (!event.getPlayer().isConversing()) { final Player player = event.getPlayer(); @@ -249,7 +244,8 @@ public void onNPCInteract(final NPCInteractEvent event) { } else { final Conversation c = plugin.getNpcConversationFactory().buildConversation(player); c.getContext().setSessionData("npcQuests", npcQuests); - c.getContext().setSessionData("npc", event.getNpc().getGameProfile().getName()); + //c.getContext().setSessionData("npc", event.getNpc().getGameProfile().getName()); + c.getContext().setSessionData("npc", ((Entity)event.getNpc().getBukkitEntity()).getCustomName()); c.begin(); } } else { diff --git a/core/src/main/java/me/blackvein/quests/tasks/NpcEffectThread.java b/core/src/main/java/me/blackvein/quests/tasks/NpcEffectThread.java index 50fb36061..a87ee6d12 100644 --- a/core/src/main/java/me/blackvein/quests/tasks/NpcEffectThread.java +++ b/core/src/main/java/me/blackvein/quests/tasks/NpcEffectThread.java @@ -35,34 +35,56 @@ public NpcEffectThread(final Quests quests) { @Override public void run() { for (final Player player : plugin.getServer().getOnlinePlayers()) { - final List nearby = player.getNearbyEntities(32.0, 16.0, 32.0); - if (!nearby.isEmpty()) { - final Quester quester = plugin.getQuester(player.getUniqueId()); - for (final Entity entity : nearby) { - UUID uuid = plugin.getDependencies().getUUIDFromNPC(entity); - if (uuid != null) { - final QuesterPostViewEffectEvent event; - if (plugin.hasQuest(uuid, quester)) { - showEffect(player, entity, plugin.getSettings().getEffect()); - - event = new QuesterPostViewEffectEvent(quester, entity, - plugin.getSettings().getEffect(), false); - plugin.getServer().getPluginManager().callEvent(event); - } else if (plugin.hasCompletedRedoableQuest(uuid, quester)) { - showEffect(player, entity, plugin.getSettings().getRedoEffect()); - - event = new QuesterPostViewEffectEvent(quester, entity, - plugin.getSettings().getEffect(), true); - plugin.getServer().getPluginManager().callEvent(event); + if (plugin.getDependencies().getCitizens() != null) { + final List nearby = player.getNearbyEntities(32.0, 16.0, 32.0); + if (!nearby.isEmpty()) { + for (final Entity entity : nearby) { + showConfigEffect(plugin.getQuester(player.getUniqueId()), entity); + } + } + } + if (plugin.getDependencies().getZnpcsPlus() != null) { + for (io.github.znetworkw.znpcservers.npc.NPC npc : io.github.znetworkw.znpcservers.npc.NPC.all()) { + if (npc.getLocation().getWorld() == null || player.getLocation().getWorld() == null) { + return; + } + if (npc.getLocation().getWorld().getName().equals(player.getLocation().getWorld().getName())) { + if (npc.getLocation().distanceSquared(player.getLocation()) < 24) { + showConfigEffect(plugin.getQuester(player.getUniqueId()), (Entity) npc.getBukkitEntity()); } } } } } } + + /** + * Display config setting particle effect above an entity one time + * @param quester Target quester to let view the effect + * @param entity Target entity to place the effect above + */ + public void showConfigEffect(final Quester quester, final Entity entity) { + UUID uuid = plugin.getDependencies().getUuidFromNpc(entity); + if (uuid != null) { + final QuesterPostViewEffectEvent event; + if (plugin.hasQuest(uuid, quester)) { + showEffect(quester.getPlayer(), entity, plugin.getSettings().getEffect()); + + event = new QuesterPostViewEffectEvent(quester, entity, + plugin.getSettings().getEffect(), false); + plugin.getServer().getPluginManager().callEvent(event); + } else if (plugin.hasCompletedRedoableQuest(uuid, quester)) { + showEffect(quester.getPlayer(), entity, plugin.getSettings().getRedoEffect()); + + event = new QuesterPostViewEffectEvent(quester, entity, + plugin.getSettings().getEffect(), true); + plugin.getServer().getPluginManager().callEvent(event); + } + } + } /** - * Display a particle effect above a Citizens NPC one time + * Display specified particle effect above a Citizens NPC one time * @param player Target player to let view the effect * @param npc Target NPC to place the effect above * @param effectType Value of EnumParticle such as NOTE or SMOKE @@ -84,7 +106,7 @@ public void showEffect(final Player player, final NPC npc, final String effectTy } /** - * Display a particle effect above an entity one time + * Display specified particle effect above an entity one time * @param player Target player to let view the effect * @param entity Target entity to place the effect above * @param effectType Value of {@link org.bukkit.Particle} or {@link me.blackvein.quests.nms.PreBuiltParticle}