diff --git a/main/pom.xml b/main/pom.xml
index d26adb0fd..0d3b9025b 100644
--- a/main/pom.xml
+++ b/main/pom.xml
@@ -65,7 +65,7 @@
com.denizenscript
denizen
- 1.1.0-SNAPSHOT
+ 1.1.2-SNAPSHOT
provided
diff --git a/main/src/main/java/me/blackvein/quests/Dependencies.java b/main/src/main/java/me/blackvein/quests/Dependencies.java
index 2218c5299..4ea7e14e4 100644
--- a/main/src/main/java/me/blackvein/quests/Dependencies.java
+++ b/main/src/main/java/me/blackvein/quests/Dependencies.java
@@ -18,9 +18,9 @@ import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.plugin.RegisteredServiceProvider;
-import me.blackvein.quests.util.DenizenAPI;
+import me.blackvein.quests.reflect.denizen.DenizenAPI;
+import me.blackvein.quests.reflect.worldguard.WorldGuardAPI;
import me.blackvein.quests.util.Lang;
-import me.blackvein.quests.util.WorldGuardAPI;
import me.clip.placeholderapi.PlaceholderAPIPlugin;
import net.citizensnpcs.api.CitizensPlugin;
import net.milkbowl.vault.economy.Economy;
diff --git a/main/src/main/java/me/blackvein/quests/QuestFactory.java b/main/src/main/java/me/blackvein/quests/QuestFactory.java
index cb7382110..4c5bd1c73 100644
--- a/main/src/main/java/me/blackvein/quests/QuestFactory.java
+++ b/main/src/main/java/me/blackvein/quests/QuestFactory.java
@@ -58,12 +58,12 @@ import me.blackvein.quests.prompts.RequirementsPrompt;
import me.blackvein.quests.prompts.RewardsPrompt;
import me.blackvein.quests.prompts.PlannerPrompt;
import me.blackvein.quests.prompts.StageMenuPrompt;
+import me.blackvein.quests.reflect.worldguard.WorldGuardAPI;
import me.blackvein.quests.util.CK;
import me.blackvein.quests.util.ConfigUtil;
import me.blackvein.quests.util.ItemUtil;
import me.blackvein.quests.util.Lang;
import me.blackvein.quests.util.MiscUtil;
-import me.blackvein.quests.util.WorldGuardAPI;
import net.citizensnpcs.api.CitizensAPI;
public class QuestFactory implements ConversationAbandonedListener {
diff --git a/main/src/main/java/me/blackvein/quests/actions/ActionFactory.java b/main/src/main/java/me/blackvein/quests/actions/ActionFactory.java
index 0adb5ad41..8613119c2 100644
--- a/main/src/main/java/me/blackvein/quests/actions/ActionFactory.java
+++ b/main/src/main/java/me/blackvein/quests/actions/ActionFactory.java
@@ -2719,7 +2719,7 @@ public class ActionFactory implements ConversationAbandonedListener {
@Override
public String getPromptText(ConversationContext context) {
String text = ChatColor.DARK_AQUA + "- " + Lang.get("stageEditorDenizenScript") + " -\n";
- for (String s : plugin.getDependencies().getDenizenAPI()._getScriptNames()) {
+ for (String s : plugin.getDependencies().getDenizenAPI().getScriptNames()) {
text += ChatColor.AQUA + "- " + s + "\n";
}
return text + ChatColor.YELLOW + Lang.get("stageEditorScriptPrompt");
diff --git a/main/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI.java b/main/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI.java
new file mode 100644
index 000000000..c2eaff2a9
--- /dev/null
+++ b/main/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI.java
@@ -0,0 +1,190 @@
+/*******************************************************************************************************
+ * Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. 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 java.lang.reflect.Method;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+import org.bukkit.OfflinePlayer;
+import org.bukkit.entity.Player;
+
+import net.citizensnpcs.api.npc.NPC;
+
+public class DenizenAPI {
+ private Class> denizen_1_0_9 = null;
+ private Class> denizen_1_1_0 = null;
+ private Class> denizen_1_1_1 = null;
+ protected Class> scriptRegistry = null;
+ protected Method containsScriptMethod = null;
+ protected Method getScriptNamesMethod = null;
+ protected Class> scriptContainer = null;
+ protected Class> taskScriptContainer = null;
+ protected Method getScriptContainerAsMethod = null;
+ protected Class> dPlayer = null;
+ protected Class> dNPC = null;
+ protected Method mirrorBukkitPlayerMethod = null;
+ protected Method mirrorCitizensNPCMethod = null;
+ protected Class> scriptEntryData = null;
+ protected Class> bukkitScriptEntryData = null;
+
+ public DenizenAPI() {
+ try {
+ bukkitScriptEntryData
+ = Class.forName("com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData");
+ denizen_1_1_1 = Class.forName("com.denizenscript.denizen.Denizen");
+ return;
+ } catch (Exception e2) {
+ // Fail silently
+ }
+ try {
+ bukkitScriptEntryData = Class.forName("com.denizenscript.denizen.BukkitScriptEntryData");
+ scriptRegistry = Class.forName("com.denizenscript.denizencore.scripts.ScriptRegistry");
+ scriptContainer = Class.forName("com.denizenscript.denizencore.scripts.containers.ScriptContainer");
+ taskScriptContainer
+ = Class.forName("com.denizenscript.denizencore.scripts.containers.core.TaskScriptContainer");
+ dPlayer = Class.forName("com.denizenscript.denizen.objects.PlayerTag");
+ dNPC = Class.forName("com.denizenscript.denizen.objects.NPCTag");
+ 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");
+
+ getScriptNamesMethod = scriptRegistry.getMethod("_getScriptNames");
+ return;
+ } catch (Exception e1) {
+ // Fail silently
+ }
+ try {
+ scriptRegistry = Class.forName("net.aufdemrand.denizencore.scripts.ScriptRegistry");
+ scriptContainer = Class.forName("net.aufdemrand.denizencore.scripts.containers.ScriptContainer");
+ taskScriptContainer
+ = Class.forName("net.aufdemrand.denizencore.scripts.containers.core.TaskScriptContainer");
+ dPlayer = Class.forName("net.aufdemrand.denizen.objects.dPlayer");
+ dNPC = Class.forName("net.aufdemrand.denizen.objects.dNPC");
+ scriptEntryData = Class.forName("net.aufdemrand.denizencore.scripts.ScriptEntryData");
+ bukkitScriptEntryData = Class.forName("net.aufdemrand.denizen.BukkitScriptEntryData");
+ denizen_1_0_9 = Class.forName("net.aufdemrand.denizen.Denizen");
+
+ containsScriptMethod = scriptRegistry.getMethod("containsScript", String.class);
+ getScriptNamesMethod = scriptRegistry.getMethod("_getScriptNames");
+ getScriptContainerAsMethod = scriptRegistry
+ .getMethod("getScriptContainerAs", String.class, taskScriptContainer.getClass());
+ mirrorBukkitPlayerMethod = dPlayer.getMethod("mirrorBukkitPlayer", OfflinePlayer.class);
+ mirrorCitizensNPCMethod = dNPC.getMethod("mirrorCitizensNPC", NPC.class);
+ } catch (Exception e) {
+ // Fail silently
+ }
+ }
+
+ public boolean isEnabled() {
+ if (denizen_1_1_1 != null || denizen_1_1_0 != null || denizen_1_0_9 != null) {
+ return true;
+ }
+ return false;
+ }
+
+ public Class> getDenizenClass() {
+ if (denizen_1_1_1 != null) {
+ return denizen_1_1_1;
+ } else if (denizen_1_1_0 != null) {
+ return denizen_1_1_0;
+ } else if (denizen_1_0_9 != null) {
+ return denizen_1_0_9;
+ }
+ return null;
+ }
+
+ @Nullable
+ public boolean containsScript(String input) {
+ 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);
+ } else if (denizen_1_0_9 != null) {
+ return DenizenAPI_1_0_9.containsScript(input);
+ }
+ return false;
+ }
+
+ @Nullable
+ public String getScriptContainerName(String input) {
+ 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);
+ } else if (denizen_1_0_9 != null) {
+ return DenizenAPI_1_0_9.getScriptContainerName(input);
+ }
+ return null;
+ }
+
+ @Nullable
+ public Set getScriptNames() {
+ 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();
+ } else if (denizen_1_0_9 != null) {
+ return DenizenAPI_1_0_9.getScriptNames();
+ }
+ return null;
+ }
+
+ @Nullable
+ public Object getScriptContainerAs(String scriptName) {
+ 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);
+ } else if (denizen_1_0_9 != null) {
+ return DenizenAPI_1_0_9.getScriptContainerAs(scriptName);
+ }
+ return null;
+ }
+
+ @Nullable
+ public Object mirrorBukkitPlayer(Player player) {
+ 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);
+ } else if (denizen_1_0_9 != null) {
+ return DenizenAPI_1_0_9.mirrorBukkitPlayer(player);
+ }
+ return null;
+ }
+
+ @Nullable
+ public Object mirrorCitizensNPC(NPC npc) {
+ 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);
+ } else if (denizen_1_0_9 != null) {
+ return DenizenAPI_1_0_9.mirrorCitizensNPC(npc);
+ }
+ return null;
+ }
+
+ @Nullable
+ public void runTaskScript(String scriptName, Player player) {
+ 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);
+ } else if (denizen_1_0_9 != null) {
+ DenizenAPI_1_0_9.runTaskScript(scriptName, player);
+ }
+ }
+}
diff --git a/main/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_0_9.java b/main/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_0_9.java
new file mode 100644
index 000000000..e17c74490
--- /dev/null
+++ b/main/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_0_9.java
@@ -0,0 +1,123 @@
+/*******************************************************************************************************
+ * Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. 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 java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Level;
+
+import javax.annotation.Nullable;
+
+import org.bukkit.Bukkit;
+import org.bukkit.configuration.file.YamlConfiguration;
+import org.bukkit.entity.Player;
+
+import me.blackvein.quests.Quests;
+import net.citizensnpcs.api.npc.NPC;
+
+public class DenizenAPI_1_0_9 {
+
+ private static Quests quests = (Quests) Bukkit.getPluginManager().getPlugin("Quests");
+ private static DenizenAPI api = quests.getDependencies().getDenizenAPI();
+
+ @Nullable
+ public static boolean containsScript(String input) {
+ if (api.scriptRegistry == null || api.containsScriptMethod == null) return false;
+ boolean script = false;
+ try {
+ script = (boolean)api.containsScriptMethod.invoke(api.scriptRegistry, input);
+ } catch (Exception e) {
+ quests.getLogger().log(Level.WARNING, "Error invoking Denizen ScriptRegistry#containsScript", e);
+ }
+ return script;
+ }
+
+ @Nullable
+ public static String getScriptContainerName(String input) {
+ if (api.scriptRegistry == null || api.scriptContainer == null) return null;
+ String name = null;
+ Object instance;
+ try {
+ Constructor> constructor = api.scriptRegistry.getConstructor(YamlConfiguration.class, String.class);
+ instance = constructor.newInstance(null, input);
+ name = (String)instance.getClass().getMethod("getName").invoke(api.scriptContainer);
+ } catch (Exception e) {
+ quests.getLogger().log(Level.WARNING, "Error invoking Denizen ScriptContainer#getName", e);
+ }
+ return name;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Nullable
+ public static Set getScriptNames() {
+ if (api.scriptRegistry == null || api.getScriptNamesMethod == null) return null;
+ Set names = null;
+ try {
+ names = (Set)api.getScriptNamesMethod.invoke(api.scriptRegistry);
+ } catch (Exception e) {
+ quests.getLogger().log(Level.WARNING, "Error invoking Denizen ScriptRegistry#_getScriptNames", e);
+ }
+ return names;
+ }
+
+ @Nullable
+ public static Object getScriptContainerAs(String scriptName) {
+ if (api.scriptRegistry == null || api.taskScriptContainer == null) return null;
+ Object container = null;
+ try {
+ container = api.getScriptContainerAsMethod.invoke(api.scriptRegistry, scriptName, api.taskScriptContainer);
+ } catch (Exception e) {
+ quests.getLogger().log(Level.WARNING, "Error invoking Denizen #getScriptContainerAs", e);
+ }
+ return container;
+ }
+
+ @Nullable
+ public static Object mirrorBukkitPlayer(Player player) {
+ if (api.dPlayer == null || api.mirrorBukkitPlayerMethod == null) return null;
+ Object dp = null;
+ try {
+ dp = api.mirrorBukkitPlayerMethod.invoke(api.dPlayer, player);
+ } catch (Exception e) {
+ quests.getLogger().log(Level.WARNING, "Error invoking Denizen dPlayer#mirrorBukkitPlayer", e);
+ }
+ return dp;
+ }
+
+ @Nullable
+ public static Object mirrorCitizensNPC(NPC npc) {
+ if (api.dNPC == null || api.mirrorCitizensNPCMethod == null) return null;
+ Object dp = null;
+ try {
+ dp = api.mirrorCitizensNPCMethod.invoke(api.dNPC, npc);
+ } catch (Exception e) {
+ quests.getLogger().log(Level.WARNING, "Error invoking Denizen dNPC#mirrorCitizensNPC", e);
+ }
+ return dp;
+ }
+
+ @Nullable
+ public static void runTaskScript(String scriptName, Player player) {
+ if (api.scriptRegistry == null || api.bukkitScriptEntryData == null || api.scriptEntryData == null) return;
+ try {
+ Constructor> constructor = api.bukkitScriptEntryData.getConstructors()[0];
+ Object tsc = getScriptContainerAs(scriptName);
+ Method runTaskScript = tsc.getClass().getMethod("runTaskScript", api.scriptEntryData, Map.class);
+ runTaskScript.invoke(tsc, constructor.newInstance(mirrorBukkitPlayer(player), null), null);
+ } catch (Exception e) {
+ quests.getLogger().log(Level.WARNING, "Error invoking Denizen TaskScriptContainer#runTaskScript", e);
+ }
+ }
+}
diff --git a/main/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_1_0.java b/main/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_1_0.java
new file mode 100644
index 000000000..0192bfed3
--- /dev/null
+++ b/main/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_1_0.java
@@ -0,0 +1,88 @@
+/*******************************************************************************************************
+ * Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. 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 java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Level;
+
+import javax.annotation.Nullable;
+
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+
+import com.denizenscript.denizen.objects.NPCTag;
+import com.denizenscript.denizen.objects.PlayerTag;
+import com.denizenscript.denizencore.scripts.ScriptRegistry;
+import com.denizenscript.denizencore.scripts.containers.core.TaskScriptContainer;
+
+import me.blackvein.quests.Quests;
+import net.citizensnpcs.api.npc.NPC;
+
+public class DenizenAPI_1_1_0 {
+
+ private static Quests quests = (Quests) Bukkit.getPluginManager().getPlugin("Quests");
+ private static DenizenAPI api = quests.getDependencies().getDenizenAPI();
+
+ @Nullable
+ public static boolean containsScript(String input) {
+ return ScriptRegistry.containsScript(input);
+ }
+
+ @Nullable
+ public static String getScriptContainerName(String input) {
+ return ScriptRegistry.getScriptContainer(input).getName();
+ }
+
+ @SuppressWarnings("unchecked")
+ @Nullable
+ public static Set getScriptNames() {
+ if (api.scriptRegistry == null || api.getScriptNamesMethod == null) return null;
+ Set names = null;
+ try {
+ names = (Set)api.getScriptNamesMethod.invoke(api.scriptRegistry);
+ } catch (Exception e) {
+ quests.getLogger().log(Level.WARNING, "Error invoking Denizen ScriptRegistry#_getScriptNames", e);
+ }
+ return names;
+ }
+
+ @Nullable
+ public static Object getScriptContainerAs(String scriptName) {
+ return ScriptRegistry.getScriptContainerAs(scriptName, TaskScriptContainer.class);
+ }
+
+ @Nullable
+ public static Object mirrorBukkitPlayer(Player player) {
+ return PlayerTag.mirrorBukkitPlayer(player);
+ }
+
+ @Nullable
+ public static Object mirrorCitizensNPC(NPC npc) {
+ return NPCTag.mirrorCitizensNPC(npc);
+ }
+
+ @Nullable
+ public static void runTaskScript(String scriptName, Player player) {
+ try {
+ Constructor> constructor = api.bukkitScriptEntryData.getConstructors()[0];
+ Object tsc = getScriptContainerAs(scriptName);
+ Method runTaskScript = tsc.getClass().getMethod("runTaskScript", api.scriptEntryData, Map.class);
+ runTaskScript.invoke(tsc, constructor.newInstance(mirrorBukkitPlayer(player), null), null);
+ } catch (Exception e) {
+ quests.getLogger().log(Level.WARNING, "Error invoking Denizen TaskScriptContainer#runTaskScript", e);
+ }
+ }
+}
diff --git a/main/src/main/java/me/blackvein/quests/util/DenizenAPI_1_1_0.java b/main/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_1_1.java
similarity index 85%
rename from main/src/main/java/me/blackvein/quests/util/DenizenAPI_1_1_0.java
rename to main/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_1_1.java
index 0fe9bc092..d16a7a0d9 100644
--- a/main/src/main/java/me/blackvein/quests/util/DenizenAPI_1_1_0.java
+++ b/main/src/main/java/me/blackvein/quests/reflect/denizen/DenizenAPI_1_1_1.java
@@ -10,7 +10,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************************************/
-package me.blackvein.quests.util;
+package me.blackvein.quests.reflect.denizen;
import java.util.Set;
@@ -18,19 +18,15 @@ import javax.annotation.Nullable;
import org.bukkit.entity.Player;
-import com.denizenscript.denizen.BukkitScriptEntryData;
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 net.citizensnpcs.api.npc.NPC;
-/**
- * This class's imports must exist separately from DenizenAPI.java in order to not crash from NoClassDefFoundError at
- * runtime
- */
-public class DenizenAPI_1_1_0 {
+public class DenizenAPI_1_1_1 {
@Nullable
public static boolean containsScript(String input) {
@@ -43,8 +39,8 @@ public class DenizenAPI_1_1_0 {
}
@Nullable
- public static Set _getScriptNames() {
- return ScriptRegistry._getScriptNames();
+ public static Set getScriptNames() {
+ return ScriptRegistry.scriptContainers.keySet();
}
@Nullable
diff --git a/main/src/main/java/me/blackvein/quests/util/WorldGuardAPI.java b/main/src/main/java/me/blackvein/quests/reflect/worldguard/WorldGuardAPI.java
similarity index 96%
rename from main/src/main/java/me/blackvein/quests/util/WorldGuardAPI.java
rename to main/src/main/java/me/blackvein/quests/reflect/worldguard/WorldGuardAPI.java
index f7dfba1bc..e9e1dbf66 100644
--- a/main/src/main/java/me/blackvein/quests/util/WorldGuardAPI.java
+++ b/main/src/main/java/me/blackvein/quests/reflect/worldguard/WorldGuardAPI.java
@@ -10,7 +10,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************************************/
-package me.blackvein.quests.util;
+package me.blackvein.quests.reflect.worldguard;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
@@ -41,10 +41,6 @@ public class WorldGuardAPI {
private Constructor> vectorConstructor = null;
private boolean initialized = false;
- public boolean isEnabled() {
- return worldGuardPlugin != null;
- }
-
public WorldGuardAPI(Plugin wg) {
if (wg instanceof WorldGuardPlugin) {
worldGuardPlugin = (WorldGuardPlugin)wg;
@@ -58,6 +54,10 @@ public class WorldGuardAPI {
}
}
}
+
+ public boolean isEnabled() {
+ return worldGuardPlugin != null;
+ }
protected RegionAssociable getAssociable(Player player) {
RegionAssociable associable;
diff --git a/main/src/main/java/me/blackvein/quests/util/WorldGuardAPI_7_0_0.java b/main/src/main/java/me/blackvein/quests/reflect/worldguard/WorldGuardAPI_7_0_0.java
similarity index 90%
rename from main/src/main/java/me/blackvein/quests/util/WorldGuardAPI_7_0_0.java
rename to main/src/main/java/me/blackvein/quests/reflect/worldguard/WorldGuardAPI_7_0_0.java
index 80a0780c3..eece8d469 100644
--- a/main/src/main/java/me/blackvein/quests/util/WorldGuardAPI_7_0_0.java
+++ b/main/src/main/java/me/blackvein/quests/reflect/worldguard/WorldGuardAPI_7_0_0.java
@@ -10,7 +10,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************************************/
-package me.blackvein.quests.util;
+package me.blackvein.quests.reflect.worldguard;
import java.util.List;
@@ -24,10 +24,6 @@ import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.managers.RegionManager;
-/**
- * This class's imports must exist separately from WorldGuardAPI.java in order to not crash from NoClassDefFoundError
- * at runtime
- */
public class WorldGuardAPI_7_0_0 {
@Nullable
diff --git a/main/src/main/java/me/blackvein/quests/util/DenizenAPI.java b/main/src/main/java/me/blackvein/quests/util/DenizenAPI.java
deleted file mode 100644
index 6be3b9168..000000000
--- a/main/src/main/java/me/blackvein/quests/util/DenizenAPI.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*******************************************************************************************************
- * Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. 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.util;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Level;
-
-import javax.annotation.Nullable;
-
-import org.bukkit.Bukkit;
-import org.bukkit.OfflinePlayer;
-import org.bukkit.configuration.file.YamlConfiguration;
-import org.bukkit.entity.Player;
-
-import net.citizensnpcs.api.npc.NPC;
-
-public class DenizenAPI {
- private Class> denizen = null;
- private Class> scriptRegistry = null;
- private Method containsScriptMethod = null;
- private Method getScriptNamesMethod = null;
- private Class> scriptContainer = null;
- private Class> taskScriptContainer = null;
- private Method getScriptContainerAsMethod = null;
- private Class> dPlayer = null;
- private Class> dNPC = null;
- private Method mirrorBukkitPlayerMethod = null;
- private Method mirrorCitizensNPCMethod = null;
- private Class> scriptEntryData = null;
- private Class> bukkitScriptEntryData = null;
- private boolean initialized = false;
-
- public boolean isEnabled() {
- return denizen != null;
- }
-
- public DenizenAPI() {
- try {
- denizen = Class.forName("com.denizenscript.denizen.Denizen");
- // Denizen 1.1.0+
- } catch (Exception e) {
- try {
- denizen = Class.forName("net.aufdemrand.denizen.Denizen");
- scriptRegistry = Class.forName("net.aufdemrand.denizencore.scripts.ScriptRegistry");
- scriptContainer = Class.forName("net.aufdemrand.denizencore.scripts.containers.ScriptContainer");
- taskScriptContainer
- = Class.forName("net.aufdemrand.denizencore.scripts.containers.core.TaskScriptContainer");
- dPlayer = Class.forName("net.aufdemrand.denizen.objects.dPlayer");
- dNPC = Class.forName("net.aufdemrand.denizen.objects.dNPC");
- scriptEntryData = Class.forName("net.aufdemrand.denizencore.scripts.ScriptEntryData");
- bukkitScriptEntryData = Class.forName("net.aufdemrand.denizen.BukkitScriptEntryData");
- // Denizen <1.1.0
- } catch (Exception e2) {
- // Fail silently
- }
- }
- }
-
- /**
- * Initialize Denizen <1.1.0 methods
- */
- private void initialize() {
- if (!initialized) {
- initialized = true;
-
- try {
- containsScriptMethod = scriptRegistry.getMethod("containsScript", String.class);
- getScriptNamesMethod = scriptRegistry.getMethod("_getScriptNames");
- getScriptContainerAsMethod = scriptRegistry
- .getMethod("getScriptContainerAs", String.class, taskScriptContainer.getClass());
- mirrorBukkitPlayerMethod = dPlayer.getMethod("mirrorBukkitPlayer", OfflinePlayer.class);
- mirrorCitizensNPCMethod = dNPC.getMethod("mirrorCitizensNPC", NPC.class);
- } catch (Exception e) {
- Bukkit.getLogger().log(Level.WARNING,
- "Quests failed to bind to Denizen, integration will not work!", e);
- return;
- }
- }
- }
-
- public Class> getDenizenClass() {
- return denizen;
- }
-
- @Nullable
- public boolean containsScript(String input) {
- if (denizen.getName().startsWith("c")) { // com.denizenscript.denizen.*
- return DenizenAPI_1_1_0.containsScript(input);
- } else {
- initialize();
- if (scriptRegistry == null || containsScriptMethod == null) return false;
- boolean script = false;
- try {
- script = (boolean)containsScriptMethod.invoke(scriptRegistry, input);
- } catch (Exception e) {
- Bukkit.getLogger().log(Level.WARNING,
- "Quests encountered an error invoking Denizen ScriptRegistry#containsScript", e);
- }
- return script;
- }
- }
-
- @Nullable
- public String getScriptContainerName(String input) {
- if (denizen.getName().startsWith("c")) { // com.denizenscript.denizen.*
- return DenizenAPI_1_1_0.getScriptContainerName(input);
- } else {
- initialize();
- if (scriptRegistry == null || scriptContainer == null) return null;
- String name = null;
- Object instance;
- try {
- Constructor> constructor = scriptRegistry.getConstructor(YamlConfiguration.class, String.class);
- instance = constructor.newInstance(null, input);
- name = (String)instance.getClass().getMethod("getName").invoke(scriptContainer);
- } catch (Exception e) {
- Bukkit.getLogger().log(Level.WARNING,
- "Quests encountered an error invoking Denizen ScriptContainer#getName", e);
- }
- return name;
- }
- }
-
- @SuppressWarnings("unchecked")
- @Nullable
- public Set _getScriptNames() {
- if (denizen.getName().startsWith("c")) { // com.denizenscript.denizen.*
- return DenizenAPI_1_1_0._getScriptNames();
- } else {
- initialize();
- if (scriptRegistry == null || getScriptNamesMethod == null) return null;
- Set names = null;
- try {
- names = (Set)getScriptNamesMethod.invoke(scriptRegistry);
- } catch (Exception e) {
- Bukkit.getLogger().log(Level.WARNING,
- "Quests encountered an error invoking Denizen ScriptRegistry#_getScriptNames", e);
- }
- return names;
- }
- }
-
- @Nullable
- public Object getScriptContainerAs(String scriptName) {
- if (denizen.getName().startsWith("c")) { // com.denizenscript.denizen.*
- return DenizenAPI_1_1_0.getScriptContainerAs(scriptName);
- } else {
- initialize();
- if (scriptRegistry == null || taskScriptContainer == null) return null;
- Object container = null;
- try {
- container = getScriptContainerAsMethod.invoke(scriptRegistry, scriptName, taskScriptContainer);
- } catch (Exception e) {
- Bukkit.getLogger().log(Level.WARNING,
- "Quests encountered an error invoking Denizen #getScriptContainerAs", e);
- }
- return container;
- }
- }
-
- @Nullable
- public Object mirrorBukkitPlayer(Player player) {
- if (denizen.getName().startsWith("c")) { // com.denizenscript.denizen.*
- return DenizenAPI_1_1_0.mirrorBukkitPlayer(player);
- } else {
- initialize();
- if (dPlayer == null || mirrorBukkitPlayerMethod == null) return null;
- Object dp = null;
- try {
- dp = mirrorBukkitPlayerMethod.invoke(dPlayer, player);
- } catch (Exception e) {
- Bukkit.getLogger().log(Level.WARNING,
- "Quests encountered an error invoking Denizen dPlayer#mirrorBukkitPlayer", e);
- }
- return dp;
- }
- }
-
- @Nullable
- public Object mirrorCitizensNPC(NPC npc) {
- if (denizen.getName().startsWith("c")) { // com.denizenscript.denizen.*
- return DenizenAPI_1_1_0.mirrorCitizensNPC(npc);
- } else {
- initialize();
- if (dNPC == null || mirrorCitizensNPCMethod == null) return null;
- Object dp = null;
- try {
- dp = mirrorCitizensNPCMethod.invoke(dNPC, npc);
- } catch (Exception e) {
- Bukkit.getLogger().log(Level.WARNING,
- "Quests encountered an error invoking Denizen dNPC#mirrorCitizensNPC", e);
- }
- return dp;
- }
- }
-
- @Nullable
- public void runTaskScript(String scriptName, Player player) {
- if (denizen.getName().startsWith("c")) { // com.denizenscript.denizen.*
- DenizenAPI_1_1_0.runTaskScript(scriptName, player);
- } else {
- initialize();
- if (scriptRegistry == null || bukkitScriptEntryData == null || scriptEntryData == null) return;
- try {
- Constructor> constructor = bukkitScriptEntryData.getConstructors()[0];
- Object tsc = getScriptContainerAs(scriptName);
- Method runTaskScript = tsc.getClass().getMethod("runTaskScript", scriptEntryData, Map.class);
- runTaskScript.invoke(tsc, constructor.newInstance(mirrorBukkitPlayer(player), null), null);
- } catch (Exception e) {
- Bukkit.getLogger().log(Level.WARNING,
- "Quests encountered an error invoking Denizen TaskScriptContainer#runTaskScript", e);
- }
- }
- }
-}