From e1833556475f33149702a4b38497b892da02a7ef Mon Sep 17 00:00:00 2001 From: Jason Penilla <11360596+jpenilla@users.noreply.github.com> Date: Tue, 18 May 2021 14:42:26 -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 --- paper-api/src/main/java/org/bukkit/Bukkit.java | 14 ++++++++++++++ paper-api/src/main/java/org/bukkit/Server.java | 12 ++++++++++++ .../org/bukkit/plugin/SimplePluginManager.java | 13 +++++++++++++ .../org/bukkit/plugin/java/JavaPluginLoader.java | 2 +- 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/paper-api/src/main/java/org/bukkit/Bukkit.java b/paper-api/src/main/java/org/bukkit/Bukkit.java index a327c71f1..60ad47981 100644 --- a/paper-api/src/main/java/org/bukkit/Bukkit.java +++ b/paper-api/src/main/java/org/bukkit/Bukkit.java @@ -83,6 +83,20 @@ public final class Bukkit { return server; } + /** + * Returns the de facto plugins directory, generally used for storing plugin jars to be loaded, + * as well as their {@link org.bukkit.plugin.Plugin#getDataFolder() data folders}. + * + *
Plugins should use {@link org.bukkit.plugin.Plugin#getDataFolder()} rather than traversing this + * directory manually when determining the location in which to store their data and configuration files.
+ * + * @return plugins directory + */ + @NotNull + public static File getPluginsFolder() { + return server.getPluginsFolder(); + } + /** * Attempts to set the {@link Server} singleton. *diff --git a/paper-api/src/main/java/org/bukkit/Server.java b/paper-api/src/main/java/org/bukkit/Server.java index a1bffe447..f5005063c 100644 --- a/paper-api/src/main/java/org/bukkit/Server.java +++ b/paper-api/src/main/java/org/bukkit/Server.java @@ -68,6 +68,18 @@ import org.jetbrains.annotations.Nullable; */ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audience.ForwardingAudience { // Paper + /** + * Returns the de facto plugins directory, generally used for storing plugin jars to be loaded, + * as well as their {@link org.bukkit.plugin.Plugin#getDataFolder() data folders}. + * + *
Plugins should use {@link org.bukkit.plugin.Plugin#getDataFolder()} rather than traversing this + * directory manually when determining the location in which to store their data and configuration files.
+ * + * @return plugins directory + */ + @NotNull + File getPluginsFolder(); + /** * Used for all administrative messages, such as an operator using a * command. diff --git a/paper-api/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/paper-api/src/main/java/org/bukkit/plugin/SimplePluginManager.java index b03f3e0ce..48b660549 100644 --- a/paper-api/src/main/java/org/bukkit/plugin/SimplePluginManager.java +++ b/paper-api/src/main/java/org/bukkit/plugin/SimplePluginManager.java @@ -117,9 +117,22 @@ public final class SimplePluginManager implements PluginManager { @Override @NotNull public Plugin[] loadPlugins(@NotNull File directory) { + // Paper start - extra jars + return this.loadPlugins(directory, java.util.Collections.emptyList()); + } + @NotNull + public Plugin[] loadPlugins(final @NotNull File directory, final @NotNull List