diff options
author | Joshua Dean Küpper <admin@joshua-kuepper.de> | 2023-08-18 09:07:36 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-18 08:07:36 +0100 |
commit | fef648d8750f168b43653c531133f946565d80a4 (patch) | |
tree | 86d05ac683b0bc4f658ba63c986d237ffd7a5291 /spark-bukkit/src | |
parent | 9b624986f99cd846fbb8f06f639bb3068aa273cf (diff) | |
download | spark-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.java | 22 |
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; + } + } } |