From 5ccd68db272ebb50f22b4de31017798a1132a13e Mon Sep 17 00:00:00 2001 From: Mark Vainomaa Date: Fri, 16 Dec 2016 17:25:08 +0200 Subject: [PATCH] Add method to get Plugin ClassLoader and we're 1.3 --- BukkitUtils/pom.xml | 6 ++--- .../mikroskeem/utils/bukkit/ServerUtils.java | 27 +++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/BukkitUtils/pom.xml b/BukkitUtils/pom.xml index 60314dd..00ea6fc 100644 --- a/BukkitUtils/pom.xml +++ b/BukkitUtils/pom.xml @@ -10,7 +10,7 @@ 4.0.0 bukkitutils - 1.2-SNAPSHOT + 1.3-SNAPSHOT @@ -27,7 +27,7 @@ eu.mikroskeem reflect - 1.0-SNAPSHOT + 1.1-SNAPSHOT com.destroystokyo.paper @@ -53,4 +53,4 @@ RELEASE - \ No newline at end of file + diff --git a/BukkitUtils/src/main/java/eu/mikroskeem/utils/bukkit/ServerUtils.java b/BukkitUtils/src/main/java/eu/mikroskeem/utils/bukkit/ServerUtils.java index 72ee69b..06ca1ba 100644 --- a/BukkitUtils/src/main/java/eu/mikroskeem/utils/bukkit/ServerUtils.java +++ b/BukkitUtils/src/main/java/eu/mikroskeem/utils/bukkit/ServerUtils.java @@ -2,9 +2,13 @@ package eu.mikroskeem.utils.bukkit; import eu.mikroskeem.utils.reflect.Reflect; import org.bukkit.Bukkit; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.plugin.java.JavaPluginLoader; +import org.bukkit.plugin.java.PluginClassLoader; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.util.List; public class ServerUtils { /** @@ -35,4 +39,27 @@ public class ServerUtils { } return new double[]{-1, -1, -1}; } + + /** + * Get plugin class loader. Useful when you want to add new classes on runtime + * + * @param plugin Plugin which will be used to get plugin ClassLoader + * @return Plugin ClassLoader + */ + public static ClassLoader getPluginClassLoader(JavaPlugin plugin){ + JavaPluginLoader pl = (JavaPluginLoader)plugin.getPluginLoader(); + Field loadersField = Reflect.getField(pl.getClass(), "loaders"); + if(loadersField != null) { + @SuppressWarnings("unchecked") + List loaders = (List) Reflect.readField(loadersField, pl); + if(loaders != null) { + for(PluginClassLoader loader : loaders) { + if(loader.getPlugin().getName().equals(plugin.getName())){ + return loader; + } + } + } + } + return null; + } }