SkStuff/src/me/TheBukor/SkStuff/util/ReflectionUtils.java

74 lines
2.1 KiB
Java
Executable File

package me.TheBukor.SkStuff.util;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import org.bukkit.Bukkit;
public class ReflectionUtils {
public static Class<?> getNMSClass(String classString) {
String version = getVersion();
String name = "net.minecraft.server." + version + classString;
Class<?> nmsClass = null;
try {
nmsClass = Class.forName(name);
} catch (ClassNotFoundException ex) {
Bukkit.getLogger().warning("Unable to get NMS class \'" + name + "\'! You are probably running an unsupported version!");
return null;
}
return nmsClass;
}
public static Class<?> getOBCClass(String classString) {
String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3] + ".";
String name = "org.bukkit.craftbukkit." + version + classString;
Class<?> obcClass = null;
try {
obcClass = Class.forName(name);
} catch (ClassNotFoundException ex) {
Bukkit.getLogger().warning("Unable to get OBC class \'" + name + "\'! You are probably running an unsupported version!");
return null;
}
return obcClass;
}
public static Object getField(String field, Class<?> clazz, Object object) {
Field f = null;
Object obj = null;
try {
f = clazz.getDeclaredField(field);
f.setAccessible(true);
obj = f.get(object);
} catch (IllegalAccessException | NoSuchFieldException ex) {
ex.printStackTrace();
}
return obj;
}
public static void setField(String field, Class<?> clazz, Object object, Object toSet) {
Field f = null;
try {
f = clazz.getDeclaredField(field);
f.setAccessible(true);
f.set(object, toSet);
} catch (IllegalAccessException | IllegalArgumentException | NoSuchFieldException ex) {
ex.printStackTrace();
}
}
public static Constructor<?> getConstructor(Class<?> clazz, Class<?> ... params) {
Constructor<?> constr = null;
try {
constr = clazz.getDeclaredConstructor(params);
constr.setAccessible(true);
} catch (NoSuchMethodException | SecurityException ex) {
ex.printStackTrace();
}
return constr;
}
public static String getVersion() {
return Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3] + ".";
}
}