aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-API-Patches-Unmapped/0241-Enable-multi-release-plugin-jars.patch
blob: 892d1d4874b2f846719c314dd9c1279082f2aec6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Kyle Wood <demonwav@gmail.com>
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 62f7a6817da079513f471e36cd79739d36a36d86..7760be3e34fa20825faf145d9fb5b2855c1a4602 100644
--- a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
+++ b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
@@ -56,7 +56,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<JarFile> 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();