Advertisement
Guest User

Untitled

a guest
Sep 21st, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.11 KB | None | 0 0
  1.  
  2. /*
  3. Created by ExoticDev on 2017-08-16
  4. */
  5.  
  6. import org.bukkit.entity.Player;
  7.  
  8. import java.lang.reflect.Field;
  9. import java.lang.reflect.InvocationTargetException;
  10. import java.lang.reflect.Method;
  11.  
  12. public class Reflection {
  13.  
  14. public static Class<?> getClass(PackageType packageType, String className) {
  15. try {
  16. return Class.forName(packageType.getPath() + "." + className);
  17. } catch (Exception exception) {
  18. exception.printStackTrace();
  19. }
  20.  
  21. return null;
  22. }
  23.  
  24. public static Class<?> getChatSerializer() {
  25. Class<?> serializer = getClass(PackageType.MINECRAFT_SERVER, "IChatBaseComponent$ChatSerializer");
  26.  
  27. Class<?> value = null;
  28.  
  29. try {
  30. value = serializer.newInstance().getClass();
  31. } catch (InstantiationException | IllegalAccessException e) {
  32. e.printStackTrace();
  33. }
  34.  
  35. return value;
  36. }
  37.  
  38. public static Class<?> getIChatBaseComponent() {
  39. return getClass(PackageType.MINECRAFT_SERVER, "IChatBaseComponent");
  40. }
  41.  
  42. public static Object getCraftPlayer(Player player) {
  43. try {
  44. return getMethod(player.getClass(), "getHandle").invoke(player);
  45. } catch (IllegalAccessException | InvocationTargetException e) {
  46. e.printStackTrace();
  47. }
  48.  
  49. return null;
  50. }
  51.  
  52. public static void sendPacket(Player player, Object packet) {
  53. Object nmsPlayer = getCraftPlayer(player);
  54. Object playerConnection = getFieldValue(nmsPlayer.getClass(), nmsPlayer, "playerConnection", false);
  55.  
  56. try {
  57. getMethod(playerConnection.getClass(), "sendPacket", getClass(PackageType.MINECRAFT_SERVER, "Packet")).invoke(playerConnection, packet);
  58. } catch (IllegalAccessException | InvocationTargetException e) {
  59. e.printStackTrace();
  60. }
  61. }
  62.  
  63. public static void sendPacket(Object nmsPlayer, Object packet) {
  64. try {
  65. Object playerConnection = getField(nmsPlayer.getClass(), "playerConnection", false).get(nmsPlayer);
  66.  
  67. getMethod(playerConnection.getClass(), "sendPacket", getClass(PackageType.MINECRAFT_SERVER, "Packet")).invoke(playerConnection, packet);
  68. } catch (IllegalAccessException | InvocationTargetException e) {
  69. e.printStackTrace();
  70. }
  71. }
  72.  
  73. public static Method getMethod(Class<?> clazz, String methodName, Class<?>... parameters) {
  74. try {
  75. return clazz.getMethod(methodName, parameters);
  76. } catch (NoSuchMethodException e) {
  77. e.printStackTrace();
  78. }
  79.  
  80. return null;
  81. }
  82.  
  83. public static Method getMethod(PackageType packageType, String clazz, String methodName, Class<?>... parameters) {
  84. try {
  85. return getClass(packageType, clazz).getMethod(methodName, parameters);
  86. } catch (NoSuchMethodException e) {
  87. e.printStackTrace();
  88. }
  89.  
  90. return null;
  91. }
  92.  
  93. public static Method getDeclaredMethod(Class<?> clazz, String methodName, Class<?>... parameters) {
  94. try {
  95. return clazz.getDeclaredMethod(methodName, parameters);
  96. } catch (NoSuchMethodException e) {
  97. e.printStackTrace();
  98. }
  99.  
  100. return null;
  101. }
  102.  
  103.  
  104. public static Method getDeclaredMethod(PackageType packageType, String clazz, String methodName, Class<?>... parameters) {
  105. try {
  106. return getClass(packageType, clazz).getDeclaredMethod(methodName, parameters);
  107. } catch (NoSuchMethodException e) {
  108. e.printStackTrace();
  109. }
  110.  
  111. return null;
  112. }
  113.  
  114. public static Field getField(Class<?> clazz, String fieldName, boolean declared) {
  115. Field field;
  116.  
  117. try {
  118. if(declared) {
  119. field = clazz.getDeclaredField(fieldName);
  120. } else {
  121. field = clazz.getField(fieldName);
  122. }
  123.  
  124. return field;
  125. } catch (NoSuchFieldException e) {
  126. e.printStackTrace();
  127. }
  128.  
  129. return null;
  130. }
  131.  
  132. public static Object getFieldValue(Class<?> clazz, Object object, String fieldName, boolean declared) {
  133. Field field;
  134.  
  135. if(declared) {
  136. field = getField(clazz, fieldName, declared);
  137.  
  138. field.setAccessible(true);
  139. } else {
  140. field = getField(clazz, fieldName, declared);
  141. }
  142.  
  143. try {
  144. return field.get(object);
  145. } catch (IllegalAccessException e) {
  146. e.printStackTrace();
  147. }
  148.  
  149. return null;
  150. }
  151.  
  152. public static void setFieldValue(Class<?> clazz, Object object, String fieldName, Object value, boolean declared) {
  153. Field field;
  154.  
  155. try {
  156. if(declared) {
  157. field = clazz.getDeclaredField(fieldName);
  158.  
  159. field.setAccessible(true);
  160. } else {
  161. field = clazz.getField(fieldName);
  162. }
  163.  
  164. field.set(object, value);
  165. } catch (IllegalAccessException | NoSuchFieldException e) {
  166. e.printStackTrace();
  167. }
  168. }
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement