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
|
2024-12-03 17:58:41 +01:00
|
|
|
index a327c71f110fc0330a3a43ab118565d35801eb32..60ad479817c95aef809f73c6688cd6b2a0bb91df 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
|
2024-06-13 17:45:43 +02:00
|
|
|
@@ -83,6 +83,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
|
2024-12-03 17:58:41 +01:00
|
|
|
index a1bffe44764fc3e1bb96bf014c56025b0bde7507..f5005063c33d5e7ac030c4d43cb042c18c799284 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
|
2024-06-13 17:45:43 +02:00
|
|
|
@@ -68,6 +68,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
|
2024-12-03 17:58:41 +01:00
|
|
|
index b03f3e0ce9fdb0bb587cf1a1c10b8cfaa2eab09e..48b66054913c8b53e6e7fd34615c2ab54727693f 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
|
2024-06-13 16:45:27 +02:00
|
|
|
@@ -117,9 +117,22 @@ public final class SimplePluginManager implements PluginManager {
|
2023-02-19 15:57:10 +01:00
|
|
|
@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
|
2024-12-03 17:58:41 +01:00
|
|
|
index 2e4a0a66151b358cc89d8eea26002f9fda16ee48..b412aaf08901d169ac9fc89b36f9d6ccb95c53d3 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());
|