diff --git a/.gitignore b/.gitignore
index a942888..25d3b8a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,19 @@
out/
target
compile/
+
+# eclipse specific git ignore
+*.pydevproject
+.project
+.metadata
+bin/**
+tmp/**
+tmp/**/*
+*.tmp
+*.bak
+*.swp
+*~.nib
+local.properties
+.classpath
+.settings/
+.loadpath
diff --git a/pom.xml b/pom.xml
index 78da008..eb6276e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,6 +30,10 @@
sk89q
https://maven.sk89q.com/repo
+
+ skript
+ https://repo.skriptlang.org/releases
+
diff --git a/src/main/java/com/btk5h/skriptdb/SkriptUtil.java b/src/main/java/com/btk5h/skriptdb/SkriptUtil.java
index 86075cb..f6bbf94 100644
--- a/src/main/java/com/btk5h/skriptdb/SkriptUtil.java
+++ b/src/main/java/com/btk5h/skriptdb/SkriptUtil.java
@@ -1,61 +1,94 @@
package com.btk5h.skriptdb;
-import ch.njol.skript.Skript;
-import ch.njol.skript.lang.Expression;
-import ch.njol.skript.lang.VariableString;
-
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.Optional;
+import org.bukkit.event.Event;
+
+import ch.njol.skript.ScriptLoader;
+import ch.njol.skript.Skript;
+import ch.njol.skript.lang.Expression;
+import ch.njol.skript.lang.VariableString;
+import ch.njol.skript.lang.parser.ParserInstance;
+
public class SkriptUtil {
- private static final Field STRING;
- private static final Field EXPR;
+ private static final Field STRING;
+ private static final Field EXPR;
- static {
- Field _FIELD = null;
- try {
- _FIELD = VariableString.class.getDeclaredField("string");
- _FIELD.setAccessible(true);
- } catch (NoSuchFieldException e) {
- Skript.error("Skript's 'string' field could not be resolved.");
- e.printStackTrace();
- }
- STRING = _FIELD;
+ static {
+ STRING = tryGetOldStringField()
+ .or(() -> tryGetNewStringField())
+ .orElseGet(() -> {
+ Skript.error("Skript's 'string' field could not be resolved.");
+ return null;
+ });
- try {
- Optional> expressionInfo = Arrays.stream(VariableString.class.getDeclaredClasses())
- .filter(cls -> cls.getSimpleName().equals("ExpressionInfo"))
- .findFirst();
- if (expressionInfo.isPresent()) {
- Class> expressionInfoClass = expressionInfo.get();
- _FIELD = expressionInfoClass.getDeclaredField("expr");
- _FIELD.setAccessible(true);
- } else {
- Skript.error("Skript's 'ExpressionInfo' class could not be resolved.");
- }
- } catch (NoSuchFieldException e) {
- e.printStackTrace();
- Skript.error("Skript's 'expr' field could not be resolved.");
+ Field f = null;
+ try {
+ Optional> expressionInfo = Arrays.stream(VariableString.class.getDeclaredClasses())
+ .filter(cls -> cls.getSimpleName().equals("ExpressionInfo"))
+ .findFirst();
+ if (expressionInfo.isPresent()) {
+ Class> expressionInfoClass = expressionInfo.get();
+ f = expressionInfoClass.getDeclaredField("expr");
+ f.setAccessible(true);
+ } else {
+ Skript.error("Skript's 'ExpressionInfo' class could not be resolved.");
+ }
+ } catch (NoSuchFieldException e) {
+ e.printStackTrace();
+ Skript.error("Skript's 'expr' field could not be resolved.");
+ }
+ EXPR = f;
}
- EXPR = _FIELD;
- }
- public static Object[] getTemplateString(VariableString vs) {
- try {
- return (Object[]) STRING.get(vs);
- } catch (IllegalAccessException e) {
- throw new RuntimeException(e);
+ public static Object[] getTemplateString(VariableString vs) {
+ try {
+ return (Object[]) STRING.get(vs);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
}
- }
- public static Expression> getExpressionFromInfo(Object o) {
- try {
- return (Expression>) EXPR.get(o);
- } catch (IllegalAccessException e) {
- throw new RuntimeException(e);
+ public static Expression> getExpressionFromInfo(Object o) {
+ try {
+ return (Expression>) EXPR.get(o);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @SuppressWarnings("deprecation")
+ public static boolean isCurrentEvent(Class extends Event> event) {
+ try {
+ Class.forName("ch.njol.skript.lang.parser.ParserInstance");
+ return ParserInstance.get().isCurrentEvent(event);
+ } catch (ClassNotFoundException e) {
+ return ScriptLoader.isCurrentEvent(event);
+ }
+ }
+
+
+ private static Optional tryGetOldStringField() {
+ try {
+ Field f = VariableString.class.getDeclaredField("string");
+ f.setAccessible(true);
+ return Optional.of(f);
+ } catch (NoSuchFieldException e) {
+ return Optional.empty();
+ }
+ }
+
+ private static Optional tryGetNewStringField() {
+ try {
+ Field f = VariableString.class.getDeclaredField("strings");
+ f.setAccessible(true);
+ return Optional.of(f);
+ } catch (NoSuchFieldException e) {
+ return Optional.empty();
+ }
}
- }
}
diff --git a/src/main/java/com/btk5h/skriptdb/events/SQLQueryCompleteEvent.java b/src/main/java/com/btk5h/skriptdb/events/SQLQueryCompleteEvent.java
index 969582f..511bd28 100644
--- a/src/main/java/com/btk5h/skriptdb/events/SQLQueryCompleteEvent.java
+++ b/src/main/java/com/btk5h/skriptdb/events/SQLQueryCompleteEvent.java
@@ -4,32 +4,26 @@ import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
public class SQLQueryCompleteEvent extends Event {
- private final static HandlerList HANDLERS = new HandlerList();
+
+ private static final HandlerList HANDLERS = new HandlerList();
+
private final String argument;
public SQLQueryCompleteEvent(String argument) {
super(true);
this.argument = argument;
- // this.variables = variables;
- }
-
- public static HandlerList getHandlerList() {
- return HANDLERS;
- }
-
- @Override
- public String getEventName() {
- return super.getEventName();
}
@Override
public HandlerList getHandlers() {
- return HANDLERS;
+ return getHandlerList();
}
public String getQuery() {
return argument;
}
- // public String getVariables() {return;}
+ public static HandlerList getHandlerList() {
+ return HANDLERS;
+ }
}
diff --git a/src/main/java/com/btk5h/skriptdb/skript/EffExecuteStatement.java b/src/main/java/com/btk5h/skriptdb/skript/EffExecuteStatement.java
index 6a74670..ad6bfb5 100644
--- a/src/main/java/com/btk5h/skriptdb/skript/EffExecuteStatement.java
+++ b/src/main/java/com/btk5h/skriptdb/skript/EffExecuteStatement.java
@@ -21,10 +21,13 @@ import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
+import java.sql.Statement;
import java.util.*;
import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CompletionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
+import java.util.regex.Pattern;
/**
* Executes a statement on a database and optionally stores the result in a variable. Expressions
@@ -45,106 +48,85 @@ import java.util.concurrent.Executors;
*/
public class EffExecuteStatement extends Effect {
private static final ExecutorService threadPool = Executors.newFixedThreadPool(SkriptDB.getInstance().getConfig().getInt("thread-pool-size", 10));
+ private static final Pattern ARGUMENT_PLACEHOLDER = Pattern.compile("(? query;
private Expression dataSource;
- private VariableString var;
+ private Expression