From 7c05200909ad5f115a5de678332360c8b427fd91 Mon Sep 17 00:00:00 2001 From: PikaMug <2267126+PikaMug@users.noreply.github.com> Date: Mon, 7 Feb 2022 02:27:08 -0500 Subject: [PATCH] Support Denizen 1.2.2+, fixes #1877. Bump version --- api/pom.xml | 4 +- .../quests/reflect/denizen/DenizenAPI.java | 51 +++++++++++---- .../reflect/denizen/DenizenAPI_1_1_0.java | 13 +++- .../reflect/denizen/DenizenAPI_1_1_1.java | 39 +++++++++--- .../reflect/denizen/DenizenAPI_1_2_2.java | 62 +++++++++++++++++++ core/pom.xml | 2 +- dist/pom.xml | 2 +- pom.xml | 4 +- v1_8_R1/pom.xml | 2 +- v1_8_R2/pom.xml | 2 +- v1_8_R3/pom.xml | 2 +- 11 files changed, 151 insertions(+), 32 deletions(-) create mode 100644 api/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_2_2.java diff --git a/api/pom.xml b/api/pom.xml index dd5c976f1..091ec89a7 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -5,7 +5,7 @@ me.blackvein.quests quests-parent - 4.2.0 + 4.2.1 quests-api @@ -66,7 +66,7 @@ com.denizenscript denizen - 1.1.3-SNAPSHOT + 1.2.3-SNAPSHOT provided 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 7dae73cb1..204b81d05 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 @@ -24,6 +24,7 @@ public class DenizenAPI { private Class denizen_1_0_9 = null; private Class denizen_1_1_0 = null; private Class denizen_1_1_1 = null; + private Class denizen_1_2_2 = null; protected Class scriptRegistry = null; protected Method containsScriptMethod = null; protected Method getScriptNamesMethod = null; @@ -38,12 +39,21 @@ public class DenizenAPI { protected Class bukkitScriptEntryData = null; public DenizenAPI() { + try { + Class.forName("com.denizenscript.denizencore.utilities.ScriptUtilities"); + denizen_1_2_2 = Class.forName("com.denizenscript.denizen.Denizen"); + return; + } catch (final Exception e) { + // Fail silently + } try { bukkitScriptEntryData = Class.forName("com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData"); denizen_1_1_1 = Class.forName("com.denizenscript.denizen.Denizen"); + + containsScriptMethod = scriptRegistry.getMethod("containsScript", String.class); return; - } catch (final Exception e2) { + } catch (final Exception e) { // Fail silently } try { @@ -57,10 +67,11 @@ public DenizenAPI() { scriptEntryData = Class.forName("com.denizenscript.denizencore.scripts.ScriptEntryData"); bukkitScriptEntryData = Class.forName("com.denizenscript.denizen.BukkitScriptEntryData"); denizen_1_1_0 = Class.forName("com.denizenscript.denizen.Denizen"); - + + containsScriptMethod = scriptRegistry.getMethod("containsScript", String.class); getScriptNamesMethod = scriptRegistry.getMethod("_getScriptNames"); return; - } catch (final Exception e1) { + } catch (final Exception e) { // Fail silently } try { @@ -86,12 +97,14 @@ public DenizenAPI() { } public boolean isEnabled() { - return denizen_1_1_1 != null || denizen_1_1_0 != null || denizen_1_0_9 != null; + return denizen_1_2_2 != null || denizen_1_1_1 != null || denizen_1_1_0 != null || denizen_1_0_9 != null; } @Nullable public Class getDenizenClass() { - if (denizen_1_1_1 != null) { + if (denizen_1_2_2 != null) { + return denizen_1_2_2; + } else if (denizen_1_1_1 != null) { return denizen_1_1_1; } else if (denizen_1_1_0 != null) { return denizen_1_1_0; @@ -102,7 +115,9 @@ public Class getDenizenClass() { } public boolean containsScript(final String input) { - if (denizen_1_1_1 != null) { + if (denizen_1_2_2 != null) { + return DenizenAPI_1_2_2.containsScript(input); + } else if (denizen_1_1_1 != null) { return DenizenAPI_1_1_1.containsScript(input); } else if (denizen_1_1_0 != null) { return DenizenAPI_1_1_0.containsScript(input); @@ -114,7 +129,9 @@ public boolean containsScript(final String input) { @Nullable public String getScriptContainerName(final String input) { - if (denizen_1_1_1 != null) { + if (denizen_1_2_2 != null) { + return DenizenAPI_1_2_2.getScriptContainerName(input); + } else if (denizen_1_1_1 != null) { return DenizenAPI_1_1_1.getScriptContainerName(input); } else if (denizen_1_1_0 != null) { return DenizenAPI_1_1_0.getScriptContainerName(input); @@ -126,7 +143,9 @@ public String getScriptContainerName(final String input) { @Nullable public Set getScriptNames() { - if (denizen_1_1_1 != null) { + if (denizen_1_2_2 != null) { + return DenizenAPI_1_2_2.getScriptNames(); + } else if (denizen_1_1_1 != null) { return DenizenAPI_1_1_1.getScriptNames(); } else if (denizen_1_1_0 != null) { return DenizenAPI_1_1_0.getScriptNames(); @@ -138,7 +157,9 @@ public Set getScriptNames() { @Nullable public Object getScriptContainerAs(final String scriptName) { - if (denizen_1_1_1 != null) { + if (denizen_1_2_2 != null) { + return DenizenAPI_1_2_2.getScriptContainerAs(scriptName); + } else if (denizen_1_1_1 != null) { return DenizenAPI_1_1_1.getScriptContainerAs(scriptName); } else if (denizen_1_1_0 != null) { return DenizenAPI_1_1_0.getScriptContainerAs(scriptName); @@ -150,7 +171,9 @@ public Object getScriptContainerAs(final String scriptName) { @Nullable public Object mirrorBukkitPlayer(final Player player) { - if (denizen_1_1_1 != null) { + if (denizen_1_2_2 != null) { + return DenizenAPI_1_2_2.mirrorBukkitPlayer(player); + } else if (denizen_1_1_1 != null) { return DenizenAPI_1_1_1.mirrorBukkitPlayer(player); } else if (denizen_1_1_0 != null) { return DenizenAPI_1_1_0.mirrorBukkitPlayer(player); @@ -162,7 +185,9 @@ public Object mirrorBukkitPlayer(final Player player) { @Nullable public Object mirrorCitizensNPC(final NPC npc) { - if (denizen_1_1_1 != null) { + if (denizen_1_2_2 != null) { + return DenizenAPI_1_2_2.mirrorCitizensNPC(npc); + } else if (denizen_1_1_1 != null) { return DenizenAPI_1_1_1.mirrorCitizensNPC(npc); } else if (denizen_1_1_0 != null) { return DenizenAPI_1_1_0.mirrorCitizensNPC(npc); @@ -173,7 +198,9 @@ public Object mirrorCitizensNPC(final NPC npc) { } public void runTaskScript(final String scriptName, final Player player) { - if (denizen_1_1_1 != null) { + if (denizen_1_2_2 != null) { + DenizenAPI_1_2_2.runTaskScript(scriptName, player); + } else if (denizen_1_1_1 != null) { DenizenAPI_1_1_1.runTaskScript(scriptName, player); } else if (denizen_1_1_0 != null) { DenizenAPI_1_1_0.runTaskScript(scriptName, player); 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 9ed38d7b8..d5a6faf80 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 @@ -33,9 +33,16 @@ public class DenizenAPI_1_1_0 { private static final QuestsAPI quests = (QuestsAPI) Bukkit.getPluginManager().getPlugin("Quests"); private static final DenizenAPI api = quests != null ? quests.getDependencies().getDenizenApi() : null; - + public static boolean containsScript(final String input) { - return ScriptRegistry.containsScript(input); + if (quests == null || api.scriptRegistry == null || api.containsScriptMethod == null) return false; + boolean script = false; + try { + script = (boolean)api.containsScriptMethod.invoke(api.scriptRegistry, input); + } catch (final Exception e) { + quests.getLogger().log(Level.WARNING, "Error invoking Denizen ScriptRegistry#containsScript", e); + } + return script; } @Nullable @@ -67,7 +74,7 @@ public static Object mirrorBukkitPlayer(final Player player) { } public static @NotNull Object mirrorCitizensNPC(final NPC npc) { - return NPCTag.mirrorCitizensNPC(npc); + return NPCTag.fromEntity(npc.getEntity()); } public static void runTaskScript(final String scriptName, final Player player) { 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 d7349059a..60aeceb0f 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 @@ -17,19 +17,33 @@ import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData; import com.denizenscript.denizencore.scripts.ScriptRegistry; import com.denizenscript.denizencore.scripts.containers.core.TaskScriptContainer; -import com.denizenscript.denizencore.scripts.queues.ScriptQueue; import com.denizenscript.denizencore.scripts.queues.core.InstantQueue; +import me.blackvein.quests.QuestsAPI; import net.citizensnpcs.api.npc.NPC; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.lang.reflect.Method; +import java.util.List; import java.util.Set; +import java.util.logging.Level; public class DenizenAPI_1_1_1 { - + + private static final QuestsAPI quests = (QuestsAPI) Bukkit.getPluginManager().getPlugin("Quests"); + private static final DenizenAPI api = quests != null ? quests.getDependencies().getDenizenApi() : null; + public static boolean containsScript(final String input) { - return ScriptRegistry.containsScript(input); + if (quests == null || api.scriptRegistry == null || api.containsScriptMethod == null) return false; + boolean script = false; + try { + script = (boolean)api.containsScriptMethod.invoke(api.scriptRegistry, input); + } catch (final Exception e) { + quests.getLogger().log(Level.WARNING, "Error invoking Denizen ScriptRegistry#containsScript", e); + } + return script; } @Nullable @@ -52,14 +66,23 @@ public static Object mirrorBukkitPlayer(final Player player) { } public static @NotNull Object mirrorCitizensNPC(final NPC npc) { - return NPCTag.mirrorCitizensNPC(npc); + return NPCTag.fromEntity(npc.getEntity()); } - + public static void runTaskScript(final String scriptName, final Player player) { final TaskScriptContainer taskScript = ScriptRegistry.getScriptContainerAs(scriptName, TaskScriptContainer.class); final BukkitScriptEntryData entryData = new BukkitScriptEntryData(PlayerTag.mirrorBukkitPlayer(player), null); - final ScriptQueue queue = new InstantQueue(taskScript.getName()) - .addEntries(taskScript.getBaseEntries(entryData.clone())); - queue.start(); + final InstantQueue queue = new InstantQueue(taskScript.getName()); + + if (quests == null) { + return; + } + try { + final Method addEntries = queue.getClass().getMethod("addEntries", List.class); + addEntries.invoke(queue, taskScript.getBaseEntries(entryData.clone())); + queue.start(); + } catch (final Exception e) { + quests.getLogger().log(Level.WARNING, "Error invoking Denizen InstantQueue#addEntries", e); + } } } 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 new file mode 100644 index 000000000..67df23a87 --- /dev/null +++ b/api/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_2_2.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2014 PikaMug and contributors. All rights reserved. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package me.blackvein.quests.reflect.denizen; + +import com.denizenscript.denizen.objects.NPCTag; +import com.denizenscript.denizen.objects.PlayerTag; +import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData; +import com.denizenscript.denizencore.scripts.ScriptRegistry; +import com.denizenscript.denizencore.scripts.containers.core.TaskScriptContainer; +import com.denizenscript.denizencore.utilities.ScriptUtilities; +import net.citizensnpcs.api.npc.NPC; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Set; + +public class DenizenAPI_1_2_2 { + + public static boolean containsScript(final String input) { + return ScriptRegistry.containsScript(input, TaskScriptContainer.class); + } + + @Nullable + public static String getScriptContainerName(final String input) { + return ScriptRegistry.getScriptContainer(input).getName(); + } + + public static @NotNull Set getScriptNames() { + return ScriptRegistry.scriptContainers.keySet(); + } + + @Nullable + public static Object getScriptContainerAs(final String scriptName) { + return ScriptRegistry.getScriptContainerAs(scriptName, TaskScriptContainer.class); + } + + @Nullable + public static Object mirrorBukkitPlayer(final Player player) { + return PlayerTag.mirrorBukkitPlayer(player); + } + + public static @NotNull Object mirrorCitizensNPC(final NPC npc) { + return NPCTag.fromEntity(npc.getEntity()); + } + + public static void runTaskScript(final String scriptName, final Player player) { + final TaskScriptContainer taskScript = ScriptRegistry.getScriptContainerAs(scriptName, TaskScriptContainer.class); + final BukkitScriptEntryData entryData = new BukkitScriptEntryData(PlayerTag.mirrorBukkitPlayer(player), null); + ScriptUtilities.createAndStartQueue(taskScript, null, entryData); + } +} diff --git a/core/pom.xml b/core/pom.xml index e595e0865..64f4a6ab9 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -5,7 +5,7 @@ me.blackvein.quests quests-parent - 4.2.0 + 4.2.1 quests-core diff --git a/dist/pom.xml b/dist/pom.xml index 2c03e2449..f0f629d12 100644 --- a/dist/pom.xml +++ b/dist/pom.xml @@ -5,7 +5,7 @@ me.blackvein.quests quests-parent - 4.2.0 + 4.2.1 quests-dist pom diff --git a/pom.xml b/pom.xml index 857257522..9ab05bde6 100644 --- a/pom.xml +++ b/pom.xml @@ -6,12 +6,12 @@ me.blackvein.quests quests-parent - 4.2.0 + 4.2.1 quests https://github.com/PikaMug/Quests/ - 4.2.0 + 4.2.1 UTF-8 1.8 1.8 diff --git a/v1_8_R1/pom.xml b/v1_8_R1/pom.xml index ab3a558c7..aff7ce639 100644 --- a/v1_8_R1/pom.xml +++ b/v1_8_R1/pom.xml @@ -6,7 +6,7 @@ me.blackvein.quests quests-parent - 4.2.0 + 4.2.1 diff --git a/v1_8_R2/pom.xml b/v1_8_R2/pom.xml index 625169beb..fa9ca5e2b 100644 --- a/v1_8_R2/pom.xml +++ b/v1_8_R2/pom.xml @@ -6,7 +6,7 @@ me.blackvein.quests quests-parent - 4.2.0 + 4.2.1 diff --git a/v1_8_R3/pom.xml b/v1_8_R3/pom.xml index f30e43daa..9c4dc5cae 100644 --- a/v1_8_R3/pom.xml +++ b/v1_8_R3/pom.xml @@ -6,7 +6,7 @@ me.blackvein.quests quests-parent - 4.2.0 + 4.2.1