Begin to support NPC in Denizen script, fixes #1560

This commit is contained in:
PikaMug 2022-05-26 20:10:03 -04:00
parent a7be8e9eb6
commit b234e097e3
11 changed files with 37 additions and 23 deletions

View File

@ -65,7 +65,7 @@ public interface IDependencies {
boolean isPluginAvailable(final String pluginName); 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); Location getNPCLocation(final int id);

View File

@ -185,6 +185,9 @@ public class DenizenAPI {
@Nullable @Nullable
public Object mirrorCitizensNPC(final NPC npc) { public Object mirrorCitizensNPC(final NPC npc) {
if (npc == null) {
return null;
}
if (denizen_1_2_2 != null) { if (denizen_1_2_2 != null) {
return DenizenAPI_1_2_2.mirrorCitizensNPC(npc); return DenizenAPI_1_2_2.mirrorCitizensNPC(npc);
} else if (denizen_1_1_1 != null) { } else if (denizen_1_1_1 != null) {
@ -197,15 +200,15 @@ public class DenizenAPI {
return null; 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) { 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) { } 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) { } 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) { } else if (denizen_1_0_9 != null) {
DenizenAPI_1_0_9.runTaskScript(scriptName, player); DenizenAPI_1_0_9.runTaskScript(scriptName, player, npc);
} }
} }
} }

View File

@ -105,14 +105,14 @@ public class DenizenAPI_1_0_9 {
return dp; 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; if (quests == null || api.scriptRegistry == null || api.bukkitScriptEntryData == null || api.scriptEntryData == null) return;
try { try {
final Constructor<?> constructor = api.bukkitScriptEntryData.getConstructors()[0]; final Constructor<?> constructor = api.bukkitScriptEntryData.getConstructors()[0];
final Object tsc = getScriptContainerAs(scriptName); final Object tsc = getScriptContainerAs(scriptName);
if (tsc != null) { if (tsc != null) {
final Method runTaskScript = tsc.getClass().getMethod("runTaskScript", api.scriptEntryData, Map.class); 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) { } catch (final Exception e) {
quests.getPluginLogger().log(Level.WARNING, "Error invoking Denizen TaskScriptContainer#runTaskScript", e); quests.getPluginLogger().log(Level.WARNING, "Error invoking Denizen TaskScriptContainer#runTaskScript", e);

View File

@ -77,7 +77,7 @@ public class DenizenAPI_1_1_0 {
return NPCTag.fromEntity(npc.getEntity()); 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) { if (quests == null) {
return; return;
} }
@ -86,7 +86,7 @@ public class DenizenAPI_1_1_0 {
final Object tsc = getScriptContainerAs(scriptName); final Object tsc = getScriptContainerAs(scriptName);
if (tsc != null) { if (tsc != null) {
final Method runTaskScript = tsc.getClass().getMethod("runTaskScript", api.scriptEntryData, Map.class); 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) { } catch (final Exception e) {
quests.getPluginLogger().log(Level.WARNING, "Error invoking Denizen TaskScriptContainer#runTaskScript", e); quests.getPluginLogger().log(Level.WARNING, "Error invoking Denizen TaskScriptContainer#runTaskScript", e);

View File

@ -69,9 +69,10 @@ public class DenizenAPI_1_1_1 {
return NPCTag.fromEntity(npc.getEntity()); 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 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()); final InstantQueue queue = new InstantQueue(taskScript.getName());
if (quests == null) { if (quests == null) {

View File

@ -54,9 +54,10 @@ public class DenizenAPI_1_2_2 {
return NPCTag.fromEntity(npc.getEntity()); 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 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); ScriptUtilities.createAndStartQueue(taskScript, null, entryData);
} }
} }

View File

@ -268,8 +268,8 @@ public class Dependencies implements IDependencies {
return (partyProvider != null); return (partyProvider != null);
} }
public boolean runDenizenScript(final String scriptName, final IQuester quester) { public boolean runDenizenScript(final String scriptName, final IQuester quester, final UUID uuid) {
return plugin.getDenizenTrigger().runDenizenScript(scriptName, quester); return plugin.getDenizenTrigger().runDenizenScript(scriptName, quester, uuid);
} }
/** /**

View File

@ -270,7 +270,7 @@ public class Quest implements IQuest {
} }
if (quester.getCurrentQuestsTemp().get(this) == (orderedStages.size() - 1)) { if (quester.getCurrentQuestsTemp().get(this) == (orderedStages.size() - 1)) {
if (currentStage.getScript() != null) { if (currentStage.getScript() != null) {
plugin.getDenizenTrigger().runDenizenScript(currentStage.getScript(), quester); plugin.getDenizenTrigger().runDenizenScript(currentStage.getScript(), quester, null);
} }
completeQuest(quester); completeQuest(quester);
} else { } else {
@ -327,7 +327,7 @@ public class Quest implements IQuest {
quester.hardStagePut(this, stage); quester.hardStagePut(this, stage);
quester.addEmptiesFor(this, stage); quester.addEmptiesFor(this, stage);
if (currentStage.getScript() != null) { if (currentStage.getScript() != null) {
plugin.getDenizenTrigger().runDenizenScript(currentStage.getScript(), quester); plugin.getDenizenTrigger().runDenizenScript(currentStage.getScript(), quester, null);
} }
if (nextStage.getStartAction() != null) { if (nextStage.getStartAction() != null) {
nextStage.getStartAction().fire(quester, this); nextStage.getStartAction().fire(quester, this);

View File

@ -463,7 +463,7 @@ public class Action implements IAction {
} }
} }
if (denizenScript != null) { if (denizenScript != null) {
plugin.getDenizenTrigger().runDenizenScript(denizenScript, quester); plugin.getDenizenTrigger().runDenizenScript(denizenScript, quester, null);
} }
} }
} }

View File

@ -12,8 +12,11 @@
package me.blackvein.quests.dependencies; package me.blackvein.quests.dependencies;
import me.blackvein.quests.player.IQuester;
import me.blackvein.quests.Quests; import me.blackvein.quests.Quests;
import me.blackvein.quests.player.IQuester;
import net.citizensnpcs.api.npc.NPC;
import java.util.UUID;
public class DenizenTrigger { public class DenizenTrigger {
private final Quests plugin; private final Quests plugin;
@ -21,12 +24,18 @@ public class DenizenTrigger {
public DenizenTrigger(final Quests plugin) { public DenizenTrigger(final Quests plugin) {
this.plugin = 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) { if (scriptName == null) {
return false; return false;
} }
if (plugin.getDependencies().getDenizenApi().containsScript(scriptName)) { 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; return true;
} }

View File

@ -44,7 +44,7 @@ public class StageTimer implements Runnable {
} }
if (quest.getStages().indexOf(quester.getCurrentStage(quest)) == (quest.getStages().size() - 1)) { if (quest.getStages().indexOf(quester.getCurrentStage(quest)) == (quest.getStages().size() - 1)) {
if (quester.getCurrentStage(quest).getScript() != null) { 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); quest.completeQuest(quester);
} else if (quester.testComplete(quest)) { } else if (quester.testComplete(quest)) {