aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/api/0479-Allow-Bukkit-plugin-to-use-Paper-PluginLoader-API.patch
blob: 786865aa5f7d1f499840efc3a28118111f9df2ff (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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jason Penilla <11360596+jpenilla@users.noreply.github.com>
Date: Tue, 21 May 2024 13:18:00 -0700
Subject: [PATCH] Allow Bukkit plugin to use Paper PluginLoader API


diff --git a/src/main/java/org/bukkit/plugin/PluginDescriptionFile.java b/src/main/java/org/bukkit/plugin/PluginDescriptionFile.java
index c0691a849831f99268fdcb7b0f471f80a1a2a70e..8f45caade7357bc55c6a90cfe0c3a2feb2d877ff 100644
--- a/src/main/java/org/bukkit/plugin/PluginDescriptionFile.java
+++ b/src/main/java/org/bukkit/plugin/PluginDescriptionFile.java
@@ -259,6 +259,13 @@ public final class PluginDescriptionFile implements io.papermc.paper.plugin.conf
     private Set<PluginAwareness> awareness = ImmutableSet.of();
     private String apiVersion = null;
     private List<String> libraries = ImmutableList.of();
+    // Paper start - plugin loader api
+    private String paperPluginLoader;
+    @org.jetbrains.annotations.ApiStatus.Internal @org.jetbrains.annotations.Nullable
+    public String getPaperPluginLoader() {
+        return this.paperPluginLoader;
+    }
+    // Paper end - plugin loader api
     // Paper start - oh my goddddd
     /**
      * Don't use this.
@@ -1232,6 +1239,23 @@ public final class PluginDescriptionFile implements io.papermc.paper.plugin.conf
         } else {
             libraries = ImmutableList.<String>of();
         }
+        // Paper start - plugin loader api
+        if (map.containsKey("paper-plugin-loader")) {
+            this.paperPluginLoader = map.get("paper-plugin-loader").toString();
+        }
+
+        /*
+        Allow skipping the Bukkit/Spigot 'libraries' list. By default, both the 'libraries'
+        list and the 'paper-plugin-loader' will contribute libraries. It may be desired to only
+        use one or the other. (i.e. 'libraries' on Spigot and 'paper-plugin-loader' on Paper)
+        */
+        if (map.containsKey("paper-skip-libraries")) {
+            String skip = map.get("paper-skip-libraries").toString();
+            if (skip.equalsIgnoreCase("true")) {
+                this.libraries = ImmutableList.of();
+            }
+        }
+        // Paper end - plugin loader api
 
         try {
             lazyPermissions = (Map<?, ?>) map.get("permissions");
diff --git a/src/main/java/org/bukkit/plugin/java/LibraryLoader.java b/src/main/java/org/bukkit/plugin/java/LibraryLoader.java
index 8e1b6be2462aaa692efa1f72986921a6dc357196..c66252802c51174bc26f266cb5cdecdd856ff220 100644
--- a/src/main/java/org/bukkit/plugin/java/LibraryLoader.java
+++ b/src/main/java/org/bukkit/plugin/java/LibraryLoader.java
@@ -84,7 +84,13 @@ public class LibraryLoader
     @Nullable
     public ClassLoader createLoader(@NotNull PluginDescriptionFile desc)
     {
-        if ( desc.getLibraries().isEmpty() )
+        // Paper start - plugin loader api
+        return this.createLoader(desc, null);
+    }
+    @Nullable
+    public ClassLoader createLoader(@NotNull PluginDescriptionFile desc, java.util.@Nullable List<java.nio.file.Path> paperLibraryPaths) {
+        if ( desc.getLibraries().isEmpty() && paperLibraryPaths == null )
+        // Paper end - plugin loader api
         {
             return null;
         }
@@ -103,17 +109,20 @@ public class LibraryLoader
         }
 
         DependencyResult result;
-        try
+        if (!dependencies.isEmpty()) try // Paper - plugin loader api
         {
             result = repository.resolveDependencies( session, new DependencyRequest( new CollectRequest( (Dependency) null, dependencies, repositories ), null ) );
         } catch ( DependencyResolutionException ex )
         {
             throw new RuntimeException( "Error resolving libraries", ex );
-        }
+        } else result = null; // Paper - plugin loader api
 
         List<URL> jarFiles = new ArrayList<>();
         List<java.nio.file.Path> jarPaths = new ArrayList<>(); // Paper - remap libraries
-        for ( ArtifactResult artifact : result.getArtifactResults() )
+        // Paper start - plugin loader api
+        if (paperLibraryPaths != null) jarPaths.addAll(paperLibraryPaths);
+        if (result != null) for ( ArtifactResult artifact : result.getArtifactResults() )
+        // Paper end - plugin loader api
         {
             // Paper start - remap libraries
             jarPaths.add(artifact.getArtifact().getFile().toPath());