package com.volmit.iris.util; import org.bukkit.Bukkit; import java.util.Optional; /** * Small reflection class to use CraftBukkit and NMS * * @author MrMicky */ public final class FastReflection { public static final String OBC_PACKAGE = "org.bukkit.craftbukkit"; public static final String NMS_PACKAGE = "net.minecraft.server"; public static final String VERSION = Bukkit.getServer().getClass().getPackage().getName().substring(OBC_PACKAGE.length() + 1); private FastReflection() { throw new UnsupportedOperationException(); } public static String nmsClassName(String className) { return NMS_PACKAGE + '.' + VERSION + '.' + className; } public static Class nmsClass(String className) throws ClassNotFoundException { return Class.forName(nmsClassName(className)); } public static Optional> nmsOptionalClass(String className) { return optionalClass(nmsClassName(className)); } public static String obcClassName(String className) { return OBC_PACKAGE + '.' + VERSION + '.' + className; } public static Class obcClass(String className) throws ClassNotFoundException { return Class.forName(obcClassName(className)); } public static Optional> obcOptionalClass(String className) { return optionalClass(obcClassName(className)); } public static Optional> optionalClass(String className) { try { return Optional.of(Class.forName(className)); } catch (ClassNotFoundException e) { return Optional.empty(); } } @SuppressWarnings({"unchecked", "rawtypes"}) public static Object enumValueOf(Class enumClass, String enumName) { return Enum.valueOf((Class) enumClass, enumName.toUpperCase()); } }