2021-07-01 20:16:25 +00:00
|
|
|
package com.fastasyncworldedit.bukkit.util;
|
2018-08-12 14:03:07 +00:00
|
|
|
|
2021-07-01 20:16:25 +00:00
|
|
|
import com.fastasyncworldedit.core.util.ReflectionUtils;
|
2018-08-12 14:03:07 +00:00
|
|
|
import org.bukkit.Bukkit;
|
|
|
|
import org.bukkit.Server;
|
|
|
|
|
2019-06-23 17:27:34 +00:00
|
|
|
import java.lang.reflect.Method;
|
|
|
|
|
2018-08-12 14:03:07 +00:00
|
|
|
public class BukkitReflectionUtils {
|
|
|
|
/**
|
2020-07-14 02:50:59 +00:00
|
|
|
* Prefix of Bukkit classes.
|
2018-08-12 14:03:07 +00:00
|
|
|
*/
|
|
|
|
private static volatile String preClassB = null;
|
|
|
|
/**
|
2020-07-14 02:50:59 +00:00
|
|
|
* Prefix of Minecraft classes.
|
2018-08-12 14:03:07 +00:00
|
|
|
*/
|
|
|
|
private static volatile String preClassM = null;
|
|
|
|
|
|
|
|
/**
|
2020-07-14 02:50:59 +00:00
|
|
|
* Check server version and class names.
|
2018-08-12 14:03:07 +00:00
|
|
|
*/
|
|
|
|
public static void init() {
|
2019-06-04 15:48:30 +00:00
|
|
|
final Server server = Bukkit.getServer();
|
|
|
|
final Class<?> bukkitServerClass = server.getClass();
|
|
|
|
String[] pas = bukkitServerClass.getName().split("\\.");
|
|
|
|
if (pas.length == 5) {
|
|
|
|
final String verB = pas[3];
|
|
|
|
preClassB = "org.bukkit.craftbukkit." + verB;
|
|
|
|
}
|
|
|
|
try {
|
|
|
|
final Method getHandle = bukkitServerClass.getDeclaredMethod("getHandle");
|
|
|
|
final Object handle = getHandle.invoke(server);
|
2020-02-14 19:29:08 +00:00
|
|
|
final Class<?> handleServerClass = handle.getClass();
|
2019-06-04 15:48:30 +00:00
|
|
|
pas = handleServerClass.getName().split("\\.");
|
2018-08-12 14:03:07 +00:00
|
|
|
if (pas.length == 5) {
|
2019-06-04 15:48:30 +00:00
|
|
|
final String verM = pas[3];
|
|
|
|
preClassM = "net.minecraft.server." + verM;
|
2018-08-12 14:03:07 +00:00
|
|
|
}
|
2019-06-04 15:48:30 +00:00
|
|
|
} catch (final Exception e) {
|
2019-06-27 00:14:00 +00:00
|
|
|
e.printStackTrace();
|
2018-08-12 14:03:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Class<?> getNmsClass(final String name) {
|
|
|
|
final String className = "net.minecraft.server." + getVersion() + "." + name;
|
|
|
|
return ReflectionUtils.getClass(className);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Class<?> getCbClass(final String name) {
|
|
|
|
final String className = "org.bukkit.craftbukkit." + getVersion() + "." + name;
|
|
|
|
return ReflectionUtils.getClass(className);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static String getVersion() {
|
|
|
|
final String packageName = Bukkit.getServer().getClass().getPackage().getName();
|
|
|
|
return packageName.substring(packageName.lastIndexOf('.') + 1);
|
|
|
|
}
|
|
|
|
}
|