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 387aa6686..58dc68b27 100644 --- a/api/src/main/java/me/blackvein/quests/dependencies/IDependencies.java +++ b/api/src/main/java/me/blackvein/quests/dependencies/IDependencies.java @@ -65,7 +65,7 @@ public interface IDependencies { boolean isPluginAvailable(final String pluginName); - boolean runDenizenScript(final String scriptName, final IQuester quester); + boolean runDenizenScript(final String scriptName, final IQuester quester, final UUID uuid); Location getNPCLocation(final int id); diff --git a/api/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI.java b/api/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI.java index 204b81d05..9a8ff9d0d 100644 --- a/api/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI.java +++ b/api/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI.java @@ -185,6 +185,9 @@ public class DenizenAPI { @Nullable public Object mirrorCitizensNPC(final NPC npc) { + if (npc == null) { + return null; + } if (denizen_1_2_2 != null) { return DenizenAPI_1_2_2.mirrorCitizensNPC(npc); } else if (denizen_1_1_1 != null) { @@ -197,15 +200,15 @@ public class DenizenAPI { return null; } - public void runTaskScript(final String scriptName, final Player player) { + public void runTaskScript(final String scriptName, final Player player, NPC npc) { if (denizen_1_2_2 != null) { - DenizenAPI_1_2_2.runTaskScript(scriptName, player); + DenizenAPI_1_2_2.runTaskScript(scriptName, player, npc); } else if (denizen_1_1_1 != null) { - DenizenAPI_1_1_1.runTaskScript(scriptName, player); + DenizenAPI_1_1_1.runTaskScript(scriptName, player, npc); } else if (denizen_1_1_0 != null) { - DenizenAPI_1_1_0.runTaskScript(scriptName, player); + DenizenAPI_1_1_0.runTaskScript(scriptName, player, npc); } else if (denizen_1_0_9 != null) { - DenizenAPI_1_0_9.runTaskScript(scriptName, player); + DenizenAPI_1_0_9.runTaskScript(scriptName, player, npc); } } } diff --git a/api/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_0_9.java b/api/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_0_9.java index 17736fc1b..a73a53193 100644 --- a/api/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_0_9.java +++ b/api/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_0_9.java @@ -105,14 +105,14 @@ public class DenizenAPI_1_0_9 { return dp; } - public static void runTaskScript(final String scriptName, final Player player) { + public static void runTaskScript(final String scriptName, final Player player, final NPC npc) { if (quests == null || api.scriptRegistry == null || api.bukkitScriptEntryData == null || api.scriptEntryData == null) return; try { final Constructor constructor = api.bukkitScriptEntryData.getConstructors()[0]; final Object tsc = getScriptContainerAs(scriptName); if (tsc != null) { final Method runTaskScript = tsc.getClass().getMethod("runTaskScript", api.scriptEntryData, Map.class); - runTaskScript.invoke(tsc, constructor.newInstance(mirrorBukkitPlayer(player), null), null); + runTaskScript.invoke(tsc, constructor.newInstance(mirrorBukkitPlayer(player), mirrorCitizensNPC(npc)), null); } } catch (final Exception e) { quests.getPluginLogger().log(Level.WARNING, "Error invoking Denizen TaskScriptContainer#runTaskScript", e); diff --git a/api/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_1_0.java b/api/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_1_0.java index 36e9dc8b4..88dc3882c 100644 --- a/api/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_1_0.java +++ b/api/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_1_0.java @@ -77,7 +77,7 @@ public class DenizenAPI_1_1_0 { return NPCTag.fromEntity(npc.getEntity()); } - public static void runTaskScript(final String scriptName, final Player player) { + public static void runTaskScript(final String scriptName, final Player player, final NPC npc) { if (quests == null) { return; } @@ -86,7 +86,7 @@ public class DenizenAPI_1_1_0 { final Object tsc = getScriptContainerAs(scriptName); if (tsc != null) { final Method runTaskScript = tsc.getClass().getMethod("runTaskScript", api.scriptEntryData, Map.class); - runTaskScript.invoke(tsc, constructor.newInstance(mirrorBukkitPlayer(player), null), null); + runTaskScript.invoke(tsc, constructor.newInstance(mirrorBukkitPlayer(player), mirrorCitizensNPC(npc)), null); } } catch (final Exception e) { quests.getPluginLogger().log(Level.WARNING, "Error invoking Denizen TaskScriptContainer#runTaskScript", e); diff --git a/api/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_1_1.java b/api/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_1_1.java index ead538756..c6f80e393 100644 --- a/api/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_1_1.java +++ b/api/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_1_1.java @@ -69,9 +69,10 @@ public class DenizenAPI_1_1_1 { return NPCTag.fromEntity(npc.getEntity()); } - public static void runTaskScript(final String scriptName, final Player player) { + public static void runTaskScript(final String scriptName, final Player player, final NPC npc) { final TaskScriptContainer taskScript = ScriptRegistry.getScriptContainerAs(scriptName, TaskScriptContainer.class); - final BukkitScriptEntryData entryData = new BukkitScriptEntryData(PlayerTag.mirrorBukkitPlayer(player), null); + final BukkitScriptEntryData entryData = new BukkitScriptEntryData(PlayerTag.mirrorBukkitPlayer(player), + npc != null ? NPCTag.fromEntity(npc.getEntity()) : null); final InstantQueue queue = new InstantQueue(taskScript.getName()); if (quests == null) { diff --git a/api/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_2_2.java b/api/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_2_2.java index 67df23a87..875027f8e 100644 --- a/api/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_2_2.java +++ b/api/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_2_2.java @@ -54,9 +54,10 @@ public class DenizenAPI_1_2_2 { return NPCTag.fromEntity(npc.getEntity()); } - public static void runTaskScript(final String scriptName, final Player player) { + public static void runTaskScript(final String scriptName, final Player player, final NPC npc) { final TaskScriptContainer taskScript = ScriptRegistry.getScriptContainerAs(scriptName, TaskScriptContainer.class); - final BukkitScriptEntryData entryData = new BukkitScriptEntryData(PlayerTag.mirrorBukkitPlayer(player), null); + final BukkitScriptEntryData entryData = new BukkitScriptEntryData(PlayerTag.mirrorBukkitPlayer(player), + npc != null ? NPCTag.fromEntity(npc.getEntity()) : null); ScriptUtilities.createAndStartQueue(taskScript, null, entryData); } } diff --git a/core/src/main/java/me/blackvein/quests/Dependencies.java b/core/src/main/java/me/blackvein/quests/Dependencies.java index 22b5f78f4..d5c133551 100644 --- a/core/src/main/java/me/blackvein/quests/Dependencies.java +++ b/core/src/main/java/me/blackvein/quests/Dependencies.java @@ -268,8 +268,8 @@ public class Dependencies implements IDependencies { return (partyProvider != null); } - public boolean runDenizenScript(final String scriptName, final IQuester quester) { - return plugin.getDenizenTrigger().runDenizenScript(scriptName, quester); + public boolean runDenizenScript(final String scriptName, final IQuester quester, final UUID uuid) { + return plugin.getDenizenTrigger().runDenizenScript(scriptName, quester, uuid); } /** diff --git a/core/src/main/java/me/blackvein/quests/Quest.java b/core/src/main/java/me/blackvein/quests/Quest.java index 280dc5c64..fbfc0c44b 100644 --- a/core/src/main/java/me/blackvein/quests/Quest.java +++ b/core/src/main/java/me/blackvein/quests/Quest.java @@ -270,7 +270,7 @@ public class Quest implements IQuest { } if (quester.getCurrentQuestsTemp().get(this) == (orderedStages.size() - 1)) { if (currentStage.getScript() != null) { - plugin.getDenizenTrigger().runDenizenScript(currentStage.getScript(), quester); + plugin.getDenizenTrigger().runDenizenScript(currentStage.getScript(), quester, null); } completeQuest(quester); } else { @@ -327,7 +327,7 @@ public class Quest implements IQuest { quester.hardStagePut(this, stage); quester.addEmptiesFor(this, stage); if (currentStage.getScript() != null) { - plugin.getDenizenTrigger().runDenizenScript(currentStage.getScript(), quester); + plugin.getDenizenTrigger().runDenizenScript(currentStage.getScript(), quester, null); } if (nextStage.getStartAction() != null) { nextStage.getStartAction().fire(quester, this); diff --git a/core/src/main/java/me/blackvein/quests/actions/Action.java b/core/src/main/java/me/blackvein/quests/actions/Action.java index 59de6be44..980527a87 100644 --- a/core/src/main/java/me/blackvein/quests/actions/Action.java +++ b/core/src/main/java/me/blackvein/quests/actions/Action.java @@ -463,7 +463,7 @@ public class Action implements IAction { } } if (denizenScript != null) { - plugin.getDenizenTrigger().runDenizenScript(denizenScript, quester); + plugin.getDenizenTrigger().runDenizenScript(denizenScript, quester, null); } } } diff --git a/core/src/main/java/me/blackvein/quests/dependencies/DenizenTrigger.java b/core/src/main/java/me/blackvein/quests/dependencies/DenizenTrigger.java index d9e660cea..ef83a2320 100644 --- a/core/src/main/java/me/blackvein/quests/dependencies/DenizenTrigger.java +++ b/core/src/main/java/me/blackvein/quests/dependencies/DenizenTrigger.java @@ -12,8 +12,11 @@ package me.blackvein.quests.dependencies; -import me.blackvein.quests.player.IQuester; import me.blackvein.quests.Quests; +import me.blackvein.quests.player.IQuester; +import net.citizensnpcs.api.npc.NPC; + +import java.util.UUID; public class DenizenTrigger { private final Quests plugin; @@ -21,12 +24,18 @@ public class DenizenTrigger { public DenizenTrigger(final Quests plugin) { this.plugin = plugin; } - public boolean runDenizenScript(final String scriptName, final IQuester quester) { + + public boolean runDenizenScript(final String scriptName, final IQuester quester, final UUID uuid) { if (scriptName == null) { return false; } if (plugin.getDependencies().getDenizenApi().containsScript(scriptName)) { - plugin.getDependencies().getDenizenApi().runTaskScript(scriptName, quester.getPlayer()); + if (plugin.getDependencies().getCitizens() != null) { + final NPC npc = plugin.getDependencies().getCitizens().getNPCRegistry().getByUniqueId(uuid); + plugin.getDependencies().getDenizenApi().runTaskScript(scriptName, quester.getPlayer(), npc); + } else { + plugin.getDependencies().getDenizenApi().runTaskScript(scriptName, quester.getPlayer(), null); + } } return true; } diff --git a/core/src/main/java/me/blackvein/quests/tasks/StageTimer.java b/core/src/main/java/me/blackvein/quests/tasks/StageTimer.java index 113f609c5..fa0c86ec5 100644 --- a/core/src/main/java/me/blackvein/quests/tasks/StageTimer.java +++ b/core/src/main/java/me/blackvein/quests/tasks/StageTimer.java @@ -44,7 +44,7 @@ public class StageTimer implements Runnable { } if (quest.getStages().indexOf(quester.getCurrentStage(quest)) == (quest.getStages().size() - 1)) { if (quester.getCurrentStage(quest).getScript() != null) { - plugin.getDependencies().runDenizenScript(quester.getCurrentStage(quest).getScript(), quester); + plugin.getDependencies().runDenizenScript(quester.getCurrentStage(quest).getScript(), quester, null); } quest.completeQuest(quester); } else if (quester.testComplete(quest)) {