From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Kyle Wood Date: Fri, 4 Dec 2020 15:53:19 -0800 Subject: [PATCH] Enable multi-release plugin jars diff --git a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java index 11e5618ff66385574ba04db0942a75227cf8eb0f..c833cee9fddd12afdfe6bde1435559819b9ad656 100644 --- a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java +++ b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java @@ -58,7 +58,18 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot this.description = description; this.dataFolder = dataFolder; this.file = file; - this.jar = new JarFile(file); + // Paper - enable multi-release jars for Java 9+ + JarFile jarFile; + try { + final java.lang.reflect.Method runtimeVersionMethod = JarFile.class.getMethod("runtimeVersion"); + final Object runtimeVersion = runtimeVersionMethod.invoke(null); + @SuppressWarnings("JavaReflectionMemberAccess") final java.lang.reflect.Constructor constructor = JarFile.class.getConstructor(File.class, boolean.class, int.class, runtimeVersion.getClass()); + jarFile = constructor.newInstance(file, true, java.util.zip.ZipFile.OPEN_READ, runtimeVersion); + } catch (Exception ignored) { + jarFile = new JarFile(file); + } + this.jar = jarFile; + // Paper end this.manifest = jar.getManifest(); this.url = file.toURI().toURL(); this.libraryLoader = libraryLoader;