From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jason Penilla <11360596+jpenilla@users.noreply.github.com> Date: Tue, 18 May 2021 14:39:44 -0700 Subject: [PATCH] Add command line option to load extra plugin jars not in the plugins folder ex: java -jar paperclip.jar nogui -add-plugin=/path/to/plugin.jar -add-plugin=/path/to/another/plugin_jar.jar diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java index e6193b5403d4cb762f702b45ca7c07d5f64d8218..401a0976af9f911d1ddcc24b77505dba2665a65f 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -416,6 +416,35 @@ public final class CraftServer implements Server { io.papermc.paper.plugin.entrypoint.LaunchEntryPointHandler.INSTANCE.enter(io.papermc.paper.plugin.entrypoint.Entrypoint.PLUGIN); // Paper - replace implementation } + // Paper start + @Override + public File getPluginsFolder() { + return (File) this.console.options.valueOf("plugins"); + } + + private List extraPluginJars() { + @SuppressWarnings("unchecked") + final List jars = (List) this.console.options.valuesOf("add-plugin"); + final List list = new ArrayList<>(); + for (final File file : jars) { + if (!file.exists()) { + net.minecraft.server.MinecraftServer.LOGGER.warn("File '{}' specified through 'add-plugin' argument does not exist, cannot load a plugin from it!", file.getAbsolutePath()); + continue; + } + if (!file.isFile()) { + net.minecraft.server.MinecraftServer.LOGGER.warn("File '{}' specified through 'add-plugin' argument is not a file, cannot load a plugin from it!", file.getAbsolutePath()); + continue; + } + if (!file.getName().endsWith(".jar")) { + net.minecraft.server.MinecraftServer.LOGGER.warn("File '{}' specified through 'add-plugin' argument is not a jar file, cannot load a plugin from it!", file.getAbsolutePath()); + continue; + } + list.add(file); + } + return list; + } + // Paper end + public void enablePlugins(PluginLoadOrder type) { if (type == PluginLoadOrder.STARTUP) { this.helpMap.clear(); diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java index 4e7208a891da461a10920482e4e4427ace23fb45..a1dc92c7fc48a0fafc14c254b0c0b93afd6481e4 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -159,6 +159,12 @@ public class Main { .ofType(File.class) .defaultsTo(new File("paper.yml")) .describedAs("Yml file"); + + acceptsAll(asList("add-plugin", "add-extra-plugin-jar"), "Specify paths to extra plugin jars to be loaded in addition to those in the plugins folder. This argument can be specified multiple times, once for each extra plugin jar path.") + .withRequiredArg() + .ofType(File.class) + .defaultsTo(new File[] {}) + .describedAs("Jar file"); // Paper end } };