diff --git a/evaluator/build.gradle b/evaluator/build.gradle index 03f6bfb..9d52aac 100644 --- a/evaluator/build.gradle +++ b/evaluator/build.gradle @@ -19,6 +19,6 @@ repositories { dependencies { compileOnly project(':evaluator-api') compileOnly fileTree("libs") - implementation 'io.github.slimjar:slimjar:1.2.3' + implementation 'io.github.slimjar:slimjar:1.2.6' testImplementation group: 'junit', name: 'junit', version: '4.12' } diff --git a/evaluator/libs/nashorn-core-15.1.jar b/evaluator/libs/nashorn-core-15.1.jar deleted file mode 100644 index cc1517f..0000000 Binary files a/evaluator/libs/nashorn-core-15.1.jar and /dev/null differ diff --git a/evaluator/libs/nashorn-core-15.3.jar b/evaluator/libs/nashorn-core-15.3.jar new file mode 100644 index 0000000..a33cd5a Binary files /dev/null and b/evaluator/libs/nashorn-core-15.3.jar differ diff --git a/evaluator/src/main/java/com/extendedclip/papi/expansion/javascript/evaluator/NashornScriptEvaluatorFactory.java b/evaluator/src/main/java/com/extendedclip/papi/expansion/javascript/evaluator/NashornScriptEvaluatorFactory.java index 5bfeeb4..e1231b3 100644 --- a/evaluator/src/main/java/com/extendedclip/papi/expansion/javascript/evaluator/NashornScriptEvaluatorFactory.java +++ b/evaluator/src/main/java/com/extendedclip/papi/expansion/javascript/evaluator/NashornScriptEvaluatorFactory.java @@ -12,7 +12,7 @@ import java.util.Map; public final class NashornScriptEvaluatorFactory implements ScriptEvaluatorFactory { public static final Collection LIBRARIES = Arrays.asList( - "nashorn-core-15.1.isolated-jar", + "nashorn-core-15.3.isolated-jar", "asm-commons-9.2.isolated-jar", "asm-util-9.2.isolated-jar", "asm-9.2.isolated-jar" diff --git a/evaluator/src/main/java/com/extendedclip/papi/expansion/javascript/evaluator/QuickJsScriptEvaluatorFactory.java b/evaluator/src/main/java/com/extendedclip/papi/expansion/javascript/evaluator/QuickJsScriptEvaluatorFactory.java index ad90784..8e67226 100644 --- a/evaluator/src/main/java/com/extendedclip/papi/expansion/javascript/evaluator/QuickJsScriptEvaluatorFactory.java +++ b/evaluator/src/main/java/com/extendedclip/papi/expansion/javascript/evaluator/QuickJsScriptEvaluatorFactory.java @@ -1,8 +1,6 @@ package com.extendedclip.papi.expansion.javascript.evaluator; import com.extendedclip.papi.expansion.javascript.evaluator.util.InjectionUtil; -import io.github.slimjar.injector.loader.Injectable; -import io.github.slimjar.injector.loader.InjectableFactory; import javax.script.ScriptException; import java.io.File; diff --git a/evaluator/src/main/java/com/extendedclip/papi/expansion/javascript/evaluator/util/InjectionUtil.java b/evaluator/src/main/java/com/extendedclip/papi/expansion/javascript/evaluator/util/InjectionUtil.java index bd7a3b6..e94bb82 100644 --- a/evaluator/src/main/java/com/extendedclip/papi/expansion/javascript/evaluator/util/InjectionUtil.java +++ b/evaluator/src/main/java/com/extendedclip/papi/expansion/javascript/evaluator/util/InjectionUtil.java @@ -4,6 +4,8 @@ import com.extendedclip.papi.expansion.javascript.evaluator.LibraryInjectionExce import com.extendedclip.papi.expansion.javascript.evaluator.QuickJsScriptEvaluatorFactory; import io.github.slimjar.injector.loader.Injectable; import io.github.slimjar.injector.loader.InjectableFactory; +import io.github.slimjar.resolver.data.Repository; +import io.github.slimjar.resolver.mirrors.SimpleMirrorSelector; import java.io.File; import java.io.IOException; @@ -18,6 +20,7 @@ import java.nio.file.StandardOpenOption; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.jar.JarFile; import java.util.zip.ZipEntry; @@ -42,9 +45,18 @@ public final class InjectionUtil { public static void inject(final Collection libraries) throws LibraryInjectionException { try { - final Collection libraryURLs = extractLibraries(libraries); + final File selfFile = new File(SELF_JAR_URL.toURI()); + final File libsFolder = getLibsFolder(selfFile); + + final Collection libraryURLs = extractLibraries(selfFile, libsFolder, libraries); final ClassLoader bukkitClassLoader = InjectionUtil.class.getClassLoader().getParent(); - final Injectable injectable = InjectableFactory.create(bukkitClassLoader); + final Injectable injectable = InjectableFactory.create( + libsFolder.toPath(), + //Collections.singletonList(new Repository(new URL(SimpleMirrorSelector.CENTRAL_URL))), + Collections.emptyList(), + bukkitClassLoader + ); + for (final URL libraryURL : libraryURLs) { injectable.inject(libraryURL); } @@ -53,12 +65,12 @@ public final class InjectionUtil { } } - private static Collection extractLibraries(final Collection libraries) throws IOException, URISyntaxException, NoSuchAlgorithmException, ReflectiveOperationException { + private static Collection extractLibraries(final File selfFile, final File libsFolder, final Collection libraries) throws IOException, URISyntaxException, NoSuchAlgorithmException, ReflectiveOperationException { final Collection extracted = new ArrayList<>(); - final File selfFile = new File(SELF_JAR_URL.toURI()); final JarFile jarFile = new JarFile(selfFile); + for (final String library : libraries) { - final File extractedFile = getExtractionFile(library, selfFile); + final File extractedFile = getExtractionFile(library, libsFolder); if (extractedFile.exists()) { extracted.add(extractedFile.toURI().toURL()); continue; @@ -72,8 +84,8 @@ public final class InjectionUtil { //noinspection ResultOfMethodCallIgnored extractedFile.createNewFile(); try (final InputStream stream = jarFile.getInputStream(entry); - final ReadableByteChannel inChannel = Channels.newChannel(stream); - final FileChannel outChannel = FileChannel.open(extractedFile.toPath(), StandardOpenOption.CREATE, StandardOpenOption.WRITE)) { + final ReadableByteChannel inChannel = Channels.newChannel(stream); + final FileChannel outChannel = FileChannel.open(extractedFile.toPath(), StandardOpenOption.CREATE, StandardOpenOption.WRITE)) { outChannel.transferFrom(inChannel, 0, entry.getSize()); } extracted.add(extractedFile.toURI().toURL()); @@ -81,7 +93,11 @@ public final class InjectionUtil { return extracted; } - private static File getExtractionFile(final String name, final File selfFile) { - return new File(selfFile.getParentFile(), "libraries/" + name.replace("isolated-jar", "jar")); + private static File getExtractionFile(final String name, final File libsFolder) { + return new File(libsFolder, name.replace("isolated-jar", "jar")); + } + + private static File getLibsFolder(final File selfFile) { + return new File(selfFile.getParentFile(), "libraries"); } }