Vinetos

PacketsListener - Reflection

Dec 31st, 2015
460
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.70 KB | None | 0 0
  1. import org.bukkit.Bukkit;
  2. import org.bukkit.entity.Player;
  3. import org.bukkit.scoreboard.Scoreboard;
  4.  
  5. import java.lang.reflect.Array;
  6. import java.lang.reflect.Field;
  7. import java.lang.reflect.Method;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10.  
  11. /**
  12.  * The MIT License (MIT)
  13.  * Created on 27/01/2016.
  14.  * Updated on 06/03/2016
  15.  * Copyright (c) 2016 Vinetos
  16.  */
  17. public class Reflection {
  18.    
  19.     public static Class<?> getClass(String classname) {
  20.         try {
  21.             String version = getNmsVersion();
  22.             String path = classname.replace("{nms}", "net.minecraft.server."+version)
  23.                     .replace("{nm}", "net.minecraft."+version)
  24.                     .replace("{cb}", "org.bukkit.craftbukkit.."+version);
  25.             return Class.forName(path);
  26.         } catch (Throwable t) {
  27.             t.printStackTrace();
  28.             return null;
  29.         }
  30.     }
  31.  
  32.     public static Class[] getArrayClass(String classname, int arraySize) {
  33.         try {
  34.             String version = getNmsVersion();
  35.             String path = classname.replace("{nms}", "net.minecraft.server."+version)
  36.                     .replace("{nm}", "net.minecraft."+version)
  37.                     .replace("{cb}", "org.bukkit.craftbukkit.."+version);
  38.             return new Class[]{ Array.newInstance(getClass(classname), arraySize).getClass() };
  39.         } catch (Throwable t) {
  40.             t.printStackTrace();
  41.             return null;
  42.         }
  43.     }
  44.  
  45.     public static String getNmsVersion(){
  46.         return Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
  47.     }
  48.  
  49.     public static Object getNmsPlayer(Player p) throws Exception{
  50.         Method getHandle = p.getClass().getMethod("getHandle");
  51.         return getHandle.invoke(p);
  52.     }
  53.  
  54.     public static Object getNmsScoreboard(Scoreboard s) throws Exception {
  55.         Method getHandle = s.getClass().getMethod("getHandle");
  56.         return getHandle.invoke(s);
  57.     }
  58.  
  59.     public static Object getFieldValue(Object instance, String fieldName) throws Exception {
  60.         Field field = instance.getClass().getDeclaredField(fieldName);
  61.         field.setAccessible(true);
  62.         return field.get(instance);
  63.     }
  64.  
  65.     public static ArrayList<Field> getFields(Object instance, Class<?> fieldType) throws Exception {
  66.         Field[] fields = instance.getClass().getDeclaredFields();
  67.         ArrayList<Field> fieldArrayList = new ArrayList<Field>();
  68.         for(Field field : fields){
  69.             if(field.getType()  == fieldType){
  70.                 field.setAccessible(true);
  71.                 fieldArrayList.add(field);
  72.             }
  73.         }
  74.  
  75.         return fieldArrayList;
  76.     }
  77.  
  78.     public static ArrayList<Field> getArraysFields(Object instance, Class<?> fieldType) throws Exception {
  79.         String[] values = fieldType.toString().split(" ");
  80.         String fieldName = values[values.length - 1];
  81.         Field[] fields = instance.getClass().getDeclaredFields();
  82.         ArrayList<Field> fieldArrayList = new ArrayList<Field>();
  83.         for(Field field : fields) {
  84.             if (field.getType().isArray()) {
  85.                 if (field.getType().toString().contains(fieldName)) {
  86.                     System.out.println("FOund !");
  87.                     field.setAccessible(true);
  88.                     fieldArrayList.add(field);
  89.                 } else {
  90.                     System.out.println("Nop: " + field.getType().toString() + " |> " + fieldName);
  91.                 }
  92.             }
  93.         }
  94.         return fieldArrayList;
  95.     }
  96.  
  97.  
  98.     @SuppressWarnings("unchecked")
  99.     public static <T> T getFieldValue(Field field, Object obj) {
  100.         try {
  101.             return (T) field.get(obj);
  102.         } catch (Exception e) {
  103.             e.printStackTrace();
  104.             return null;
  105.         }
  106.     }
  107.  
  108.     public static Field getField(Class<?> clazz, String fieldName) throws Exception {
  109.         Field field = clazz.getDeclaredField(fieldName);
  110.         field.setAccessible(true);
  111.         return field;
  112.     }
  113.  
  114.     public static void setValue(Object instance, String field, Object value) {
  115.         try {
  116.             Field f = instance.getClass().getDeclaredField(field);
  117.             f.setAccessible(true);
  118.             f.set(instance, value);
  119.         } catch (Throwable t) {
  120.             t.printStackTrace();
  121.         }
  122.     }
  123.     public static void sendAllPacket(Object packet) throws Exception {
  124.         for (Player p : Bukkit.getOnlinePlayers()) {
  125.             Object nmsPlayer = getNmsPlayer(p);
  126.             Object connection = nmsPlayer.getClass().getField("playerConnection").get(nmsPlayer);
  127.             connection.getClass().getMethod("sendPacket", Reflection.getClass("{nms}.Packet")).invoke(connection, packet);
  128.         }
  129.     }
  130.     public static void sendListPacket(List<String> players, Object packet) {
  131.         try {
  132.             for (String name : players) {
  133.                 Object nmsPlayer = getNmsPlayer(Bukkit.getPlayer(name));
  134.                 Object connection = nmsPlayer.getClass().getField("playerConnection").get(nmsPlayer);
  135.                 connection.getClass().getMethod("sendPacket", Reflection.getClass("{nms}.Packet")).invoke(connection, packet);
  136.             }
  137.         } catch (Throwable t) {
  138.             t.printStackTrace();
  139.         }
  140.     }
  141.     public static void sendPlayerPacket(Player p, Object packet) throws Exception {
  142.         Object nmsPlayer = getNmsPlayer(p);
  143.         Object connection = nmsPlayer.getClass().getField("playerConnection").get(nmsPlayer);
  144.         connection.getClass().getMethod("sendPacket", Reflection.getClass("{nms}.Packet")).invoke(connection, packet);
  145.     }
  146.  
  147.     public static void sendMessage(Player p, Object message) throws Exception {
  148.         Object nmsPlayer = getNmsPlayer(p);
  149.         nmsPlayer.getClass().getMethod("sendMessage", Reflection.getClass("{nms}.IChatBaseComponent")).invoke(nmsPlayer, message);
  150.  
  151.     }
  152.  
  153.     public static void sendMessages(Player p, Object message) throws Exception {
  154.         Object nmsPlayer = getNmsPlayer(p);
  155.         Class c = Reflection.getClass("{nms}.IChatBaseComponent");
  156.         Method m = nmsPlayer.getClass().getMethod("sendMessage", new Class[]{ Array.newInstance(c, 4).getClass() });
  157.         m.invoke(nmsPlayer, new Object[]{message});
  158.  
  159.     }
  160.  
  161.     public static int ping(Player p) throws Exception {
  162.         Object nmsPlayer = Reflection.getNmsPlayer(p);
  163.         return Integer.valueOf(getFieldValue(nmsPlayer, "ping").toString());
  164.     }
  165.  
  166.     public static Field getFirstFieldByType(Class<?> clazz, Class<?> type) {
  167.         for(Field field : clazz.getDeclaredFields()) {
  168.             field.setAccessible(true);
  169.             if(field.getType() == type) {
  170.                 return field;
  171.             }
  172.         }
  173.         return null;
  174.     }
  175. }
Advertisement
Add Comment
Please, Sign In to add comment