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