aboutsummaryrefslogtreecommitdiff
path: root/spark-bukkit/src
diff options
context:
space:
mode:
authorJoshua Dean Küpper <admin@joshua-kuepper.de>2023-08-18 09:07:36 +0200
committerGitHub <noreply@github.com>2023-08-18 08:07:36 +0100
commitfef648d8750f168b43653c531133f946565d80a4 (patch)
tree86d05ac683b0bc4f658ba63c986d237ffd7a5291 /spark-bukkit/src
parent9b624986f99cd846fbb8f06f639bb3068aa273cf (diff)
downloadspark-fef648d8750f168b43653c531133f946565d80a4.tar.gz
spark-fef648d8750f168b43653c531133f946565d80a4.tar.bz2
spark-fef648d8750f168b43653c531133f946565d80a4.zip
Add support for Paper Plugins (#347)
Diffstat (limited to 'spark-bukkit/src')
-rw-r--r--spark-bukkit/src/main/java/me/lucko/spark/bukkit/BukkitClassSourceLookup.java22
1 files changed, 22 insertions, 0 deletions
diff --git a/spark-bukkit/src/main/java/me/lucko/spark/bukkit/BukkitClassSourceLookup.java b/spark-bukkit/src/main/java/me/lucko/spark/bukkit/BukkitClassSourceLookup.java
index f9c0c0b..d3b2aa1 100644
--- a/spark-bukkit/src/main/java/me/lucko/spark/bukkit/BukkitClassSourceLookup.java
+++ b/spark-bukkit/src/main/java/me/lucko/spark/bukkit/BukkitClassSourceLookup.java
@@ -30,11 +30,22 @@ public class BukkitClassSourceLookup extends ClassSourceLookup.ByClassLoader {
private static final Class<?> PLUGIN_CLASS_LOADER;
private static final Field PLUGIN_FIELD;
+ private static final Class<?> PAPER_PLUGIN_CLASS_LOADER;
+ private static final Field PAPER_PLUGIN_FIELD;
+
static {
try {
PLUGIN_CLASS_LOADER = Class.forName("org.bukkit.plugin.java.PluginClassLoader");
PLUGIN_FIELD = PLUGIN_CLASS_LOADER.getDeclaredField("plugin");
PLUGIN_FIELD.setAccessible(true);
+
+ PAPER_PLUGIN_CLASS_LOADER = getPaperPluginClassLoader();
+ if (PAPER_PLUGIN_CLASS_LOADER != null) {
+ PAPER_PLUGIN_FIELD = PAPER_PLUGIN_CLASS_LOADER.getDeclaredField("loadedJavaPlugin");
+ PAPER_PLUGIN_FIELD.setAccessible(true);
+ } else {
+ PAPER_PLUGIN_FIELD = null;
+ }
} catch (ReflectiveOperationException e) {
throw new ExceptionInInitializerError(e);
}
@@ -45,8 +56,19 @@ public class BukkitClassSourceLookup extends ClassSourceLookup.ByClassLoader {
if (PLUGIN_CLASS_LOADER.isInstance(loader)) {
JavaPlugin plugin = (JavaPlugin) PLUGIN_FIELD.get(loader);
return plugin.getName();
+ } else if (PAPER_PLUGIN_CLASS_LOADER != null && PAPER_PLUGIN_CLASS_LOADER.isInstance(loader)) {
+ JavaPlugin plugin = (JavaPlugin) PAPER_PLUGIN_FIELD.get(loader);
+ return plugin.getName();
}
return null;
}
+
+ private static Class<?> getPaperPluginClassLoader() {
+ try {
+ return Class.forName("io.papermc.paper.plugin.entrypoint.classloader.PaperPluginClassLoader");
+ } catch (ClassNotFoundException e) {
+ return null;
+ }
+ }
}