Paper Plugins

Co-authored-by: Micah Rao <micah.s.rao@gmail.com>
This commit is contained in:
Owen1212055
2022-07-06 23:00:31 -04:00
parent 329dfdabdc
commit 216388dfdf
103 changed files with 7450 additions and 42 deletions

View File

@@ -0,0 +1,64 @@
package io.papermc.paper.plugin.loader;
import io.papermc.paper.plugin.bootstrap.PluginProviderContext;
import io.papermc.paper.plugin.loader.library.ClassPathLibrary;
import io.papermc.paper.plugin.loader.library.PaperLibraryStore;
import io.papermc.paper.plugin.entrypoint.classloader.PaperPluginClassLoader;
import io.papermc.paper.plugin.provider.configuration.PaperPluginMeta;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.jar.JarFile;
import java.util.logging.Logger;
public class PaperClasspathBuilder implements PluginClasspathBuilder {
private final List<ClassPathLibrary> libraries = new ArrayList<>();
private final PluginProviderContext context;
public PaperClasspathBuilder(PluginProviderContext context) {
this.context = context;
}
@Override
public @NotNull PluginProviderContext getContext() {
return this.context;
}
@Override
public @NotNull PluginClasspathBuilder addLibrary(@NotNull ClassPathLibrary classPathLibrary) {
this.libraries.add(classPathLibrary);
return this;
}
public PaperPluginClassLoader buildClassLoader(Logger logger, Path source, JarFile jarFile, PaperPluginMeta configuration) {
PaperLibraryStore paperLibraryStore = new PaperLibraryStore();
for (ClassPathLibrary library : this.libraries) {
library.register(paperLibraryStore);
}
List<Path> paths = paperLibraryStore.getPaths();
URL[] urls = new URL[paths.size()];
for (int i = 0; i < paths.size(); i++) {
Path path = paperLibraryStore.getPaths().get(i);
try {
urls[i] = path.toUri().toURL();
} catch (MalformedURLException e) {
throw new AssertionError(e);
}
}
try {
return new PaperPluginClassLoader(logger, source, jarFile, configuration, this.getClass().getClassLoader(), new URLClassLoader(urls, getClass().getClassLoader()));
} catch (IOException exception) {
throw new RuntimeException(exception);
}
}
}

View File

@@ -0,0 +1,21 @@
package io.papermc.paper.plugin.loader.library;
import org.jetbrains.annotations.NotNull;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
public class PaperLibraryStore implements LibraryStore {
private final List<Path> paths = new ArrayList<>();
@Override
public void addLibrary(@NotNull Path library) {
this.paths.add(library);
}
public List<Path> getPaths() {
return this.paths;
}
}