Allow Bukkit plugin to use Paper PluginLoader API

This commit is contained in:
Jason Penilla 2024-05-21 13:18:00 -07:00
parent 962554a0de
commit 236fa2126f
2 changed files with 37 additions and 4 deletions

View file

@ -260,6 +260,13 @@ public final class PluginDescriptionFile implements io.papermc.paper.plugin.conf
private Set<PluginAwareness> awareness = ImmutableSet.of(); private Set<PluginAwareness> awareness = ImmutableSet.of();
private String apiVersion = null; private String apiVersion = null;
private List<String> libraries = ImmutableList.of(); 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 // Paper start - oh my goddddd
/** /**
* Don't use this. * Don't use this.
@ -1233,6 +1240,23 @@ public final class PluginDescriptionFile implements io.papermc.paper.plugin.conf
} else { } else {
libraries = ImmutableList.<String>of(); 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 { try {
lazyPermissions = (Map<?, ?>) map.get("permissions"); lazyPermissions = (Map<?, ?>) map.get("permissions");

View file

@ -84,7 +84,13 @@ public class LibraryLoader
@Nullable @Nullable
public ClassLoader createLoader(@NotNull PluginDescriptionFile desc) 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; return null;
} }
@ -103,17 +109,20 @@ public class LibraryLoader
} }
DependencyResult result; DependencyResult result;
try if (!dependencies.isEmpty()) try // Paper - plugin loader api
{ {
result = repository.resolveDependencies( session, new DependencyRequest( new CollectRequest( (Dependency) null, dependencies, repositories ), null ) ); result = repository.resolveDependencies( session, new DependencyRequest( new CollectRequest( (Dependency) null, dependencies, repositories ), null ) );
} catch ( DependencyResolutionException ex ) } catch ( DependencyResolutionException ex )
{ {
throw new RuntimeException( "Error resolving libraries", ex ); throw new RuntimeException( "Error resolving libraries", ex );
} } else result = null; // Paper - plugin loader api
List<URL> jarFiles = new ArrayList<>(); List<URL> jarFiles = new ArrayList<>();
List<java.nio.file.Path> jarPaths = new ArrayList<>(); // Paper - remap libraries 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 // Paper start - remap libraries
jarPaths.add(artifact.getArtifact().getFile().toPath()); jarPaths.add(artifact.getArtifact().getFile().toPath());