mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-22 17:07:34 +01:00
d8e07590e3
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 5dbedae1 PR-864: Fix Registry#match() failing namespaced inputs 49256865 PR-863: Fix boolean PersistentDataType 9f15450b SPIGOT-7195, SPIGOT-7197: Add DataPack API ebef5b6a Disable InterfaceIsType Checkstyle check 01d577f5 Slight tweak to boolean PersistentDataType javadoc d2b99e56 PR-857: Add boolean PersistentDataType CraftBukkit Changes: 2270366cd PR-1196: Test Registry instances more thoroughly 863dacb7a PR-1191: Do not start on pre-release Java 17 1f2dd8e12 SPIGOT-7362: Properly handle null in CraftBlock#blockFaceToNotch() dbc70bed5 SPIGOT-7195, SPIGOT-7197: Add DataPack API
97 lines
4.6 KiB
Diff
97 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 ffacdd168e2b68663becfcfc5c917a41f8ec817d..003d1613fb1b5a24146fb3eeba0be7bf5a4eb8b8 100644
|
|
--- a/src/main/java/org/bukkit/Bukkit.java
|
|
+++ b/src/main/java/org/bukkit/Bukkit.java
|
|
@@ -77,6 +77,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 cadf590c7e597a503078892b3d5671642a80eb3f..15b07d05d948d5df21591dc9e1b0fc0232c984ec 100644
|
|
--- a/src/main/java/org/bukkit/Server.java
|
|
+++ b/src/main/java/org/bukkit/Server.java
|
|
@@ -62,6 +62,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());
|