Skip to content

Commit 8f0005b

Browse files
committed
Added support for skript 2.10 by adding DeprecationUtils from <a href="https://github.com/JakeGBLP/Lusk">Lusk</a>.
1 parent 5e6c741 commit 8f0005b

File tree

4 files changed

+103
-9
lines changed

4 files changed

+103
-9
lines changed

build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,28 @@ plugins {
55
}
66

77
group 'io.github.apickledwalrus'
8-
version '1.3'
8+
version '1.3.1-jakegblp-Skript_2.10'
99

1010
compileJava.options.encoding = 'UTF-8'
1111

1212
java {
1313
toolchain {
14-
languageVersion.set(JavaLanguageVersion.of(8))
14+
languageVersion.set(JavaLanguageVersion.of(16))
1515
}
1616
}
1717

1818
repositories {
1919
mavenCentral()
2020
maven { url 'https://repo.skriptlang.org/releases' }
21-
maven { url 'https://papermc.io/repo/repository/maven-public/' }
21+
maven { url 'https://repo.papermc.io/repository/maven-public/' }
2222
maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
2323
}
2424

2525
dependencies {
2626
implementation group: 'org.eclipse.jdt', name: 'org.eclipse.jdt.annotation', version: '2.2.600'
2727
implementation group: 'com.google.code.findbugs', name: 'findbugs', version: '3.0.1'
2828
implementation group: 'com.destroystokyo.paper', name: 'paper-api', version: '1.16.5-R0.1-SNAPSHOT'
29-
implementation (group: 'com.github.SkriptLang', name: 'Skript', version: '2.6.2') {
29+
implementation (group: 'com.github.SkriptLang', name: 'Skript', version: '2.10.0') {
3030
transitive = false
3131
}
3232
}
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package io.github.apickledwalrus.skriptgui;
22

3-
import ch.njol.skript.registrations.Converters;
43
import io.github.apickledwalrus.skriptgui.gui.GUI;
54
import org.bukkit.inventory.Inventory;
65

6+
import static it.jakegblp.lusk.utils.DeprecationUtils.registerConverter;
7+
78
public class SkriptConverters {
89

910
public SkriptConverters() {
10-
11-
Converters.registerConverter(GUI.class, Inventory.class, GUI::getInventory);
12-
11+
registerConverter(GUI.class, Inventory.class, GUI::getInventory);
1312
}
1413

1514
}

src/main/java/io/github/apickledwalrus/skriptgui/elements/conditions/CondHasGUI.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import io.github.apickledwalrus.skriptgui.SkriptGUI;
1717
import org.eclipse.jdt.annotation.Nullable;
1818

19+
import static it.jakegblp.lusk.utils.DeprecationUtils.test;
20+
1921
@Name("Has GUI")
2022
@Description("Checks whether the given player(s) has/have a GUI open.")
2123
@Examples({
@@ -46,7 +48,7 @@ public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean kleenean
4648

4749
@Override
4850
public boolean check(Event e) {
49-
return players.check(e, p -> SkriptGUI.getGUIManager().hasGUI(p), isNegated());
51+
return test(e, players, player -> SkriptGUI.getGUIManager().hasGUI(player), isNegated());
5052
}
5153

5254
@Override
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package it.jakegblp.lusk.utils;
2+
3+
import ch.njol.skript.Skript;
4+
import ch.njol.skript.lang.Expression;
5+
import ch.njol.skript.util.Version;
6+
import org.bukkit.event.Event;
7+
import org.jetbrains.annotations.Nullable;
8+
import org.skriptlang.skript.lang.converter.Converters;
9+
10+
import java.lang.reflect.InvocationTargetException;
11+
import java.lang.reflect.Method;
12+
import java.lang.reflect.Proxy;
13+
import java.util.function.Function;
14+
import java.util.function.Predicate;
15+
import java.util.logging.Level;
16+
import java.util.logging.Logger;
17+
18+
/**
19+
* The contents of this class have been made with support and translated over from <a href="https://github.com/JakeGBLP/Lusk">Lusk</a>.
20+
* @author <a href="https://jakegblp.github.io/">JakeGBLP</a>
21+
*/
22+
public class DeprecationUtils {
23+
24+
public static final boolean
25+
SKRIPT_2_10 = !Skript.getVersion().isSmallerThan(new Version(2,10)),
26+
SKRIPT_2_7 = !Skript.getVersion().isSmallerThan(new Version(2,7));
27+
28+
@SuppressWarnings("all")
29+
public static <T> boolean test(Event event, Expression<T> expr, Predicate<T> predicate) {
30+
if (SKRIPT_2_10) {
31+
return expr.check(event, predicate);
32+
} else {
33+
try {
34+
Class<?> checkerClass = Class.forName("ch.njol.util.Checker");
35+
36+
Object checkerInstance = Proxy.newProxyInstance(
37+
checkerClass.getClassLoader(),
38+
new Class<?>[]{checkerClass},
39+
(proxy, method, args) -> {
40+
if ("check".equals(method.getName()) && args != null && args.length == 1) {
41+
return predicate.test((T) args[0]);
42+
}
43+
return null;
44+
}
45+
);
46+
47+
Method checkMethod = expr.getClass().getMethod("check", Event.class, checkerClass);
48+
return (boolean) checkMethod.invoke(expr, event, checkerInstance);
49+
} catch (InvocationTargetException | IllegalAccessException | ClassNotFoundException | NoSuchMethodException e) {
50+
Skript.warning("Something went wrong with a condition: "+ e.getMessage());
51+
}
52+
}
53+
return false;
54+
}
55+
56+
public static <T> boolean test(Event event, Expression<T> expr, Predicate<T> predicate, @Nullable Boolean negated) {
57+
boolean bool = test(event, expr, predicate);
58+
if (negated != null) return bool ^ negated;
59+
return bool;
60+
}
61+
62+
63+
@SuppressWarnings("all")
64+
public static <F, T> void registerConverter(Class<F> from, Class<T> to, Function<F, T> converter) {
65+
if (SKRIPT_2_7) {
66+
Converters.registerConverter(from, to, converter::apply);
67+
} else {
68+
Logger skriptLogger = Skript.getInstance().getLogger();
69+
Level logLevel = skriptLogger.getLevel();
70+
skriptLogger.setLevel(Level.OFF);
71+
try {
72+
Class<?> converterClass = Class.forName("ch.njol.skript.classes.Converter");
73+
74+
Object converterInstance = Proxy.newProxyInstance(
75+
converterClass.getClassLoader(),
76+
new Class<?>[]{converterClass},
77+
(proxy, method, args) -> {
78+
if ("convert".equals(method.getName()) && args != null && args.length == 1) {
79+
return converter.apply((F) args[0]);
80+
}
81+
return null;
82+
}
83+
);
84+
85+
Method registerConverterMethod = Class.forName("ch.njol.skript.registrations.Converters").getMethod("registerConverter", Class.class, Class.class, converterClass);
86+
registerConverterMethod.invoke(from, to, converterInstance);
87+
skriptLogger.setLevel(logLevel);
88+
} catch (InvocationTargetException | IllegalAccessException | ClassNotFoundException | NoSuchMethodException e) {
89+
Skript.warning("Something went wrong with converters: " + e.getMessage());
90+
}
91+
}
92+
}
93+
}

0 commit comments

Comments
 (0)