Add method to get PluginClassLoader's classes map
This commit is contained in:
parent
700119edbb
commit
8b4a334873
@ -4,6 +4,7 @@ import eu.mikroskeem.utils.reflect.Reflect;
|
|||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.bukkit.plugin.java.JavaPluginLoader;
|
import org.bukkit.plugin.java.JavaPluginLoader;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
@ -43,6 +44,7 @@ public class ServerUtils {
|
|||||||
* @return Plugin ClassLoader
|
* @return Plugin ClassLoader
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
|
@Nullable
|
||||||
public static ClassLoader getPluginClassLoader(JavaPlugin plugin){
|
public static ClassLoader getPluginClassLoader(JavaPlugin plugin){
|
||||||
/*
|
/*
|
||||||
* Note: CB/Spigot has PluginClassLoader package-private, PaperSpigot has public
|
* Note: CB/Spigot has PluginClassLoader package-private, PaperSpigot has public
|
||||||
@ -83,6 +85,34 @@ public class ServerUtils {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get PluginClassLoader classes map
|
||||||
|
* @param classLoader PluginClassLoader instance
|
||||||
|
* @return Classes map
|
||||||
|
* @throws RuntimeException if ClassLoader doesn't extend PluginClassLoader
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Nullable
|
||||||
|
public static Map<String, Class<?>> getClassesMap(ClassLoader classLoader){
|
||||||
|
Class<?> clClass = classLoader.getClass();
|
||||||
|
try {
|
||||||
|
Class<?> pluginClassLoader = checkNotNull(Reflect.getClass(
|
||||||
|
"org.bukkit.plugin.java.PluginClassLoader"));
|
||||||
|
if(pluginClassLoader.isAssignableFrom(clClass)){
|
||||||
|
Field classesField = checkNotNull(Reflect.getField(clClass, "classes"));
|
||||||
|
return (Map<String, Class<?>>) checkNotNull(Reflect.readField(classesField, classLoader));
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException(
|
||||||
|
clClass.getName()
|
||||||
|
+ " does not extend "
|
||||||
|
+ pluginClassLoader.getName());
|
||||||
|
}
|
||||||
|
} catch(NullPointerException e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get NMS version of current running server
|
* Get NMS version of current running server
|
||||||
* @return NMS version or 0 length string
|
* @return NMS version or 0 length string
|
||||||
|
Loading…
Reference in New Issue
Block a user