diff options
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; + } + } } |