2023-02-19 15:57:10 +01:00
|
|
|
From 0000000000000000000000000000000000000000 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
|
|
|
|
|
|
|
|
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
|
2023-06-06 11:09:19 +02:00
|
|
|
index ffacdd168e2b68663becfcfc5c917a41f8ec817d..003d1613fb1b5a24146fb3eeba0be7bf5a4eb8b8 100644
|
2023-02-19 15:57:10 +01:00
|
|
|
--- a/src/main/java/org/bukkit/Bukkit.java
|
|
|
|
+++ b/src/main/java/org/bukkit/Bukkit.java
|
2023-06-06 11:09:19 +02:00
|
|
|
@@ -77,6 +77,20 @@ public final class Bukkit {
|
2023-02-19 15:57:10 +01:00
|
|
|
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}.
|
|
|
|
+ *
|
|
|
|
+ * <p>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.</p>
|
|
|
|
+ *
|
|
|
|
+ * @return plugins directory
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ public static File getPluginsFolder() {
|
|
|
|
+ return server.getPluginsFolder();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
/**
|
|
|
|
* Attempts to set the {@link Server} singleton.
|
|
|
|
* <p>
|
|
|
|
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
|
2023-06-06 11:09:19 +02:00
|
|
|
index cadf590c7e597a503078892b3d5671642a80eb3f..15b07d05d948d5df21591dc9e1b0fc0232c984ec 100644
|
2023-02-19 15:57:10 +01:00
|
|
|
--- a/src/main/java/org/bukkit/Server.java
|
|
|
|
+++ b/src/main/java/org/bukkit/Server.java
|
2023-06-06 11:09:19 +02:00
|
|
|
@@ -62,6 +62,18 @@ import org.jetbrains.annotations.Nullable;
|
2023-02-19 15:57:10 +01:00
|
|
|
*/
|
|
|
|
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}.
|
|
|
|
+ *
|
|
|
|
+ * <p>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.</p>
|
|
|
|
+ *
|
|
|
|
+ * @return plugins directory
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ File getPluginsFolder();
|
|
|
|
+
|
|
|
|
/**
|
|
|
|
* Used for all administrative messages, such as an operator using a
|
|
|
|
* command.
|
|
|
|
diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
|
2023-06-06 11:09:19 +02:00
|
|
|
index 63389474a2b3f0e283b42e7004aa6a94904a3d17..974ff7116b294473ec450757e8a9341540f43dcd 100644
|
2023-02-19 15:57:10 +01:00
|
|
|
--- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java
|
|
|
|
+++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
|
|
|
|
@@ -116,9 +116,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<File> extraPluginJars) {
|
|
|
|
+ // Paper end
|
|
|
|
if (true) {
|
|
|
|
List<Plugin> pluginList = new ArrayList<>();
|
|
|
|
java.util.Collections.addAll(pluginList, this.paperPluginManager.loadPlugins(directory));
|
|
|
|
+ for (File file : extraPluginJars) {
|
|
|
|
+ try {
|
|
|
|
+ pluginList.add(this.paperPluginManager.loadPlugin(file));
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ this.server.getLogger().log(Level.SEVERE, "Plugin loading error!", e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
return pluginList.toArray(new Plugin[0]);
|
|
|
|
}
|
|
|
|
Preconditions.checkArgument(directory != null, "Directory cannot be null");
|
|
|
|
diff --git a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java
|
2023-03-14 18:11:24 +01:00
|
|
|
index de6b6188587fd254ab96cbc1f95fda2056d9cbe2..eaefbb00e9993d54906cc8cf35cf753c0d6c7707 100644
|
2023-02-19 15:57:10 +01:00
|
|
|
--- a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java
|
|
|
|
+++ b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java
|
|
|
|
@@ -93,7 +93,7 @@ public final class JavaPluginLoader implements PluginLoader {
|
|
|
|
throw new InvalidPluginException(ex);
|
|
|
|
}
|
|
|
|
|
|
|
|
- final File parentFile = file.getParentFile();
|
|
|
|
+ final File parentFile = this.server.getPluginsFolder(); // Paper
|
|
|
|
final File dataFolder = new File(parentFile, description.getName());
|
|
|
|
@SuppressWarnings("deprecation")
|
|
|
|
final File oldDataFolder = new File(parentFile, description.getRawName());
|