Advertisement
Guest User

Reflection.java

a guest
Apr 4th, 2015
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.69 KB | None | 0 0
  1. import java.lang.reflect.Constructor;
  2. import java.lang.reflect.Field;
  3. import java.lang.reflect.InvocationTargetException;
  4. import java.lang.reflect.Method;
  5.  
  6. import org.bukkit.Bukkit;
  7. import org.bukkit.entity.Entity;
  8. import org.bukkit.entity.Player;
  9. import org.bukkit.inventory.ItemStack;
  10.  
  11. public class Reflection {
  12.  
  13.     public static final Class<?> CLASS_CRAFTITEMSTACK = Reflection.getCraftBukkitClass("inventory.CraftItemStack");
  14.     public static final Method METHOD_ASNMSCOPY = Reflection.getMethod(CLASS_CRAFTITEMSTACK, "asNMSCopy");
  15.    
  16.     public static void sendPacket(Player p, Object packet) {
  17.         try {
  18.             Object nmsPlayer = getNMSPlayer(p);
  19.             Object connection = nmsPlayer.getClass()
  20.                     .getField("playerConnection").get(nmsPlayer);
  21.             connection.getClass()
  22.                     .getMethod("sendPacket", getNMSClass("Packet"))
  23.                     .invoke(connection, packet);
  24.         } catch (Exception e) {
  25.             e.printStackTrace();
  26.         }
  27.     }
  28.     public static Field getField(Class<?> clazz, String field) {
  29.         Field re = null;
  30.         try {
  31.             re = clazz.getDeclaredField(field);
  32.         } catch (NoSuchFieldException e) {
  33.             e.printStackTrace();
  34.         } catch (SecurityException e) {
  35.             e.printStackTrace();
  36.         }
  37.         return re;
  38.     }
  39.     public static void sendPacket(Player p, String packetName,
  40.             Class<?>[] parameterclass, Object... parameters) {
  41.         try {
  42.             Object nmsPlayer = getNMSPlayer(p);
  43.             Object connection = nmsPlayer.getClass()
  44.                     .getField("playerConnection").get(nmsPlayer);
  45.             Object packet = Class
  46.                     .forName(
  47.                             nmsPlayer.getClass().getPackage().getName() + "."
  48.                                     + packetName)
  49.                     .getConstructor(parameterclass).newInstance(parameters);
  50.             connection.getClass()
  51.                     .getMethod("sendPacket", getNMSClass("Packet"))
  52.                     .invoke(connection, packet);
  53.         } catch (Exception e) {
  54.             e.printStackTrace();
  55.         }
  56.     }
  57.  
  58.     public static String getVersion() {
  59.         String name = Bukkit.getServer().getClass().getPackage().getName();
  60.         String version = name.substring(name.lastIndexOf('.') + 1) + ".";
  61.         return version;
  62.     }
  63.  
  64.     public static Class<?> getNMSClass(String className) {
  65.         String fullName = "net.minecraft.server." + getVersion() + className;
  66.         Class<?> clazz = null;
  67.         try {
  68.             clazz = Class.forName(fullName);
  69.         } catch (Exception e) {
  70.             e.printStackTrace();
  71.         }
  72.         return clazz;
  73.     }
  74.     public static Class<?> getCraftBukkitClass(String className) {
  75.         String fullName = "org.bukkit.craftbukkit." + getVersion() + className;
  76.         Class<?> clazz = null;
  77.         try {
  78.             clazz = Class.forName(fullName);
  79.         } catch (Exception e) {
  80.             e.printStackTrace();
  81.         }
  82.         return clazz;
  83.     }
  84.  
  85.     public static Object asNMSCopy(ItemStack i) {
  86.         Object re = null;
  87.        
  88.         try {
  89.             METHOD_ASNMSCOPY.invoke(null, i);
  90.         } catch (IllegalAccessException | IllegalArgumentException
  91.                 | InvocationTargetException e) {
  92.             e.printStackTrace();
  93.         }
  94.        
  95.         return re;
  96.     }
  97.    
  98.     public static Field getField(Field f) {
  99.         f.setAccessible(true);
  100.         return f;
  101.     }
  102.     public static Constructor<?> getConstructor(Class<?> clazz, Class<?>... param) {
  103.         Constructor<?> re = null;
  104.         try {
  105.             re = clazz.getConstructor(param);
  106.         } catch(Exception e) {
  107.             e.printStackTrace();
  108.         }
  109.         return re;
  110.     }
  111.     public static Object getHandle(Entity entity) {
  112.         Object object = null;
  113.  
  114.         try {
  115.             object = getMethod(entity.getClass(), "getHandle").invoke(entity);
  116.         } catch (Exception e) {
  117.             e.printStackTrace();
  118.         }
  119.  
  120.         return object;
  121.     }
  122.  
  123.     public static Object getNMSPlayer(Player player) {
  124.         return getHandle(player);
  125.     }
  126.  
  127.     public static Method getMethod(Class<?> c, String methodName) {
  128.         Method returnMethod = null;
  129.  
  130.         for(Method m : c.getDeclaredMethods()) {
  131.             if(m.getName().equals(methodName)) {
  132.                 returnMethod = m;
  133.             }
  134.         }
  135.  
  136.         return returnMethod;
  137.     }
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement