2021-06-11 12:02:28 +00:00
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2021-06-17 09:37:24 +00:00
From: Jason Penilla <11360596+jpenilla@users.noreply.github.com>
2021-06-11 12:02:28 +00:00
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
2022-06-12 08:07:43 +00:00
index 441ec74f965744c384fd44795540ec1906a4815c..3a9d6ba52f512e8d2468d99783e518ef613a5822 100644
2021-06-11 12:02:28 +00:00
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
2022-06-07 19:15:06 +00:00
@@ -394,10 +394,15 @@ public final class CraftServer implements Server {
2021-10-15 21:54:22 +00:00
public void loadPlugins() {
this.pluginManager.registerInterface(JavaPluginLoader.class);
2021-06-11 12:02:28 +00:00
2021-10-15 21:54:22 +00:00
- File pluginFolder = (File) console.options.valueOf("plugins");
+ File pluginFolder = this.getPluginsFolder(); // Paper
2021-06-11 12:02:28 +00:00
- if (pluginFolder.exists()) {
2021-06-15 02:59:31 +00:00
- Plugin[] plugins = this.pluginManager.loadPlugins(pluginFolder);
2021-06-11 12:02:28 +00:00
+ // Paper start
+ if (true || pluginFolder.exists()) {
+ if (!pluginFolder.exists()) {
+ pluginFolder.mkdirs();
+ }
2021-06-15 02:59:31 +00:00
+ Plugin[] plugins = this.pluginManager.loadPlugins(pluginFolder, this.extraPluginJars());
2021-06-11 12:02:28 +00:00
+ // Paper end
for (Plugin plugin : plugins) {
try {
String message = String.format("Loading %s", plugin.getDescription().getFullName());
2022-06-07 19:15:06 +00:00
@@ -412,6 +417,35 @@ public final class CraftServer implements Server {
2021-06-11 12:02:28 +00:00
}
}
+ // Paper start
2021-10-15 21:54:22 +00:00
+ @Override
+ public File getPluginsFolder() {
+ return (File) this.console.options.valueOf("plugins");
+ }
+
2021-06-11 12:02:28 +00:00
+ private List<File> extraPluginJars() {
+ @SuppressWarnings("unchecked")
+ final List<File> jars = (List<File>) this.console.options.valuesOf("add-plugin");
2021-10-15 21:54:22 +00:00
+ final List<File> list = new ArrayList<>();
+ for (final File file : jars) {
+ if (!file.exists()) {
2022-02-12 13:20:33 +00:00
+ net.minecraft.server.MinecraftServer.LOGGER.warn("File '{}' specified through 'add-plugin' argument does not exist, cannot load a plugin from it!", file.getAbsolutePath());
2021-10-15 21:54:22 +00:00
+ continue;
+ }
+ if (!file.isFile()) {
2022-02-12 13:20:33 +00:00
+ net.minecraft.server.MinecraftServer.LOGGER.warn("File '{}' specified through 'add-plugin' argument is not a file, cannot load a plugin from it!", file.getAbsolutePath());
2021-10-15 21:54:22 +00:00
+ continue;
+ }
+ if (!file.getName().endsWith(".jar")) {
2022-02-12 13:20:33 +00:00
+ 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());
2021-10-15 21:54:22 +00:00
+ continue;
+ }
+ list.add(file);
+ }
+ return list;
2021-06-11 12:02:28 +00:00
+ }
+ // Paper end
+
public void enablePlugins(PluginLoadOrder type) {
if (type == PluginLoadOrder.STARTUP) {
2021-06-15 02:59:31 +00:00
this.helpMap.clear();
2021-06-11 12:02:28 +00:00
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
2022-06-12 08:07:43 +00:00
index 18652607d36a980a4b0956584f8a722be776dad2..556ab2908c2a9f448d4bd856bb9fbf82867148b1 100644
2021-06-11 12:02:28 +00:00
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
2022-06-12 08:07:43 +00:00
@@ -147,6 +147,12 @@ public class Main {
2021-11-24 01:09:49 +00:00
.ofType(File.class)
.defaultsTo(new File("paper.yml"))
.describedAs("Yml file");
2021-06-11 12:02:28 +00:00
+
2021-06-29 09:09:02 +00:00
+ 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.")
2021-06-11 12:02:28 +00:00
+ .withRequiredArg()
+ .ofType(File.class)
+ .defaultsTo(new File[] {})
2021-06-29 09:09:02 +00:00
+ .describedAs("Jar file");
2021-06-11 12:02:28 +00:00
// Paper end
}
};