mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-30 20:21:51 +01:00
96d5e6ca48
Currently includes generated key holder classes for types used in the Registry Modification API
96 lines
4.6 KiB
Diff
96 lines
4.6 KiB
Diff
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
|
|
index dd60025dd956dd360ded51e056163c31908b6d5e..6a36a9bfa0574b8bd72fbf7edb9b49e01753406e 100644
|
|
--- a/src/main/java/org/bukkit/Bukkit.java
|
|
+++ b/src/main/java/org/bukkit/Bukkit.java
|
|
@@ -79,6 +79,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}.
|
|
+ *
|
|
+ * <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
|
|
index 4cb488d68abc80aae733eb6b17e9cfa015c5a229..75c51378095104a0a58babad281ee946a6c9584e 100644
|
|
--- a/src/main/java/org/bukkit/Server.java
|
|
+++ b/src/main/java/org/bukkit/Server.java
|
|
@@ -64,6 +64,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}.
|
|
+ *
|
|
+ * <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
|
|
index 63389474a2b3f0e283b42e7004aa6a94904a3d17..974ff7116b294473ec450757e8a9341540f43dcd 100644
|
|
--- 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
|
|
index de6b6188587fd254ab96cbc1f95fda2056d9cbe2..eaefbb00e9993d54906cc8cf35cf753c0d6c7707 100644
|
|
--- 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());
|