2024-05-23 22:13:02 +02:00
|
|
|
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
|
2024-06-13 16:45:27 +02:00
|
|
|
index c5465431ce35d264d8510af45e73d058b333c60b..a857e46fa6f0c212db93193e1fdd8b0ea9c33c38 100644
|
2024-05-23 22:13:02 +02:00
|
|
|
--- a/src/main/java/org/bukkit/plugin/PluginDescriptionFile.java
|
|
|
|
+++ b/src/main/java/org/bukkit/plugin/PluginDescriptionFile.java
|
2024-06-13 16:45:27 +02:00
|
|
|
@@ -260,6 +260,13 @@ public final class PluginDescriptionFile implements io.papermc.paper.plugin.conf
|
2024-05-23 22:13:02 +02:00
|
|
|
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.
|
2024-06-13 16:45:27 +02:00
|
|
|
@@ -1233,6 +1240,23 @@ public final class PluginDescriptionFile implements io.papermc.paper.plugin.conf
|
2024-05-23 22:13:02 +02:00
|
|
|
} 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());
|