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 f9d148fce42b146e5e1921221020341edbe7c1ec..69489893e648e72e95d8522a5990f27535fc3c0d 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -385,8 +385,13 @@ public final class CraftServer implements Server { File pluginFolder = (File) console.options.valueOf("plugins"); - if (pluginFolder.exists()) { - Plugin[] plugins = this.pluginManager.loadPlugins(pluginFolder); + // Paper start + if (true || pluginFolder.exists()) { + if (!pluginFolder.exists()) { + pluginFolder.mkdirs(); + } + Plugin[] plugins = this.pluginManager.loadPlugins(pluginFolder, this.extraPluginJars()); + // Paper end for (Plugin plugin : plugins) { try { String message = String.format("Loading %s", plugin.getDescription().getFullName()); @@ -401,6 +406,18 @@ public final class CraftServer implements Server { } } + // Paper start + private List extraPluginJars() { + @SuppressWarnings("unchecked") + final List jars = (List) this.console.options.valuesOf("add-plugin"); + return jars.stream() + .filter(File::exists) + .filter(File::isFile) + .filter(file -> file.getName().endsWith(".jar")) + .collect(java.util.stream.Collectors.toList()); + } + // 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 f197d63c618b25c139852809c0b0a6e313c83f18..ea7df53656766a8dc4ab5fe66de894301db634e1 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -153,6 +153,12 @@ public class Main { .ofType(String.class) .defaultsTo("Unknown Server") .describedAs("Name"); + + 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 } };