Advertisement
Guest User

TitleManager

a guest
Jul 4th, 2015
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.95 KB | None | 0 0
  1. public class TitleManager {
  2.  
  3. private static Class<?> title = getNMSClass("PacketPlayOutTitle");
  4. private static Class<?> enumtitleaction = getNMSClass("PacketPlayOutTitle$EnumTitleAction");
  5. private static Class<?> chatserial = getNMSClass("IChatBaseComponent$ChatSerializer");
  6.  
  7. public void sendActionBar(Player p, String text) {
  8. try {
  9. sendPacket(p, "PacketPlayOutChat", new Class[] { getNMSClass("IChatBaseComponent"), byte.class }, chatserial.getMethod("a", String.class).invoke(null, "{\"text\": \"" + text + "\"}"), (byte)2);
  10. } catch (Exception e) {
  11. e.printStackTrace();
  12. }
  13. }
  14.  
  15. public void sendHeaderAndFooter(Player p, String header, String footer) {
  16. try {
  17. Object packet = getNMSClass("PacketPlayOutPlayerListHeaderFooter").newInstance();
  18. getField(packet.getClass().getDeclaredField("a")).set(packet, chatserial.getMethod("a", String.class).invoke(null, "{'text': '" + header + "'}"));
  19. getField(packet.getClass().getDeclaredField("b")).set(packet, chatserial.getMethod("a", String.class).invoke(null, "{'text': '" + footer + "'}"));
  20. sendPacket(p, packet);
  21. } catch (Exception e) {
  22. e.printStackTrace();
  23. }
  24. }
  25.  
  26. public void sendTitles(Player p, String title, String subtitle, int fadeIn, int stay, int fadeOut) {
  27. sendTimings(p, fadeIn, stay, fadeOut);
  28. sendTitle(p, title);
  29. sendSubTitle(p, subtitle);
  30. }
  31.  
  32. public void sendTitle(Player p, String title, int fadeIn, int stay, int fadeOut) {
  33. sendTimings(p, fadeIn, stay, fadeOut);
  34. sendTitle(p, title);
  35. }
  36.  
  37. public void sendTitle(Player p, String title) {
  38. try {
  39. Object t = TitleManager.title.newInstance();
  40. Field f = t.getClass().getDeclaredField("a");
  41. f.setAccessible(true);
  42. f.set(t, getField(enumtitleaction.getDeclaredField("TITLE")).get(null));
  43. f = t.getClass().getDeclaredField("b");
  44. f.setAccessible(true);
  45. f.set(t, chatserial.getMethod("a", String.class).invoke(null, "{'text': '" + title + "'}"));
  46. sendPacket(p, t);
  47. } catch (Exception e) {
  48. e.printStackTrace();
  49. }
  50. }
  51. public void sendSubTitle(Player p, String subtitle, int fadeIn, int stay, int fadeOut) {
  52. sendTimings(p, fadeIn, stay, fadeOut);
  53. sendSubTitle(p, subtitle);
  54. }
  55.  
  56. public void sendSubTitle(Player p, String subtitle) {
  57. try {
  58. Object t = title.newInstance();
  59. Field f = t.getClass().getDeclaredField("a");
  60. f.setAccessible(true);
  61. f.set(t, getField(enumtitleaction.getDeclaredField("SUBTITLE")).get(null));
  62. f = t.getClass().getDeclaredField("b");
  63. f.setAccessible(true);
  64. f.set(t, chatserial.getMethod("a", String.class).invoke(null, "{'text': '" + subtitle + "'}"));
  65. sendPacket(p, t);
  66. } catch (Exception e) {
  67. e.printStackTrace();
  68. }
  69. }
  70.  
  71. public void sendTimings(Player p, int fadeIn, int stay, int fadeOut) {
  72. try {
  73. Object t = title.newInstance();
  74. Field f = t.getClass().getDeclaredField("a");
  75. f.setAccessible(true);
  76. f.set(t, getField(enumtitleaction.getDeclaredField("TIMES")).get(null));
  77. f = t.getClass().getDeclaredField("c");
  78. f.setAccessible(true);
  79. f.set(t, fadeIn);
  80. f = t.getClass().getDeclaredField("d");
  81. f.setAccessible(true);
  82. f.set(t, stay);
  83. f = t.getClass().getDeclaredField("e");
  84. f.setAccessible(true);
  85. f.set(t, fadeOut);
  86. sendPacket(p, t);
  87. } catch (Exception e) {
  88. e.printStackTrace();
  89. }
  90. }
  91.  
  92. public void reset(Player p) {
  93. try {
  94. Object t = title.newInstance();
  95. Field f = t.getClass().getDeclaredField("a");
  96. f.setAccessible(true);
  97. f.set(t, getField(enumtitleaction.getDeclaredField("RESET")).get(null));
  98. sendPacket(p, t);
  99. } catch (Exception e) {
  100. e.printStackTrace();
  101. }
  102. }
  103.  
  104. public void clear(Player p) {
  105. try {
  106. Object t = title.newInstance();
  107. Field f = t.getClass().getDeclaredField("a");
  108. f.setAccessible(true);
  109. f.set(t, getField(enumtitleaction.getDeclaredField("CLEAR")).get(null));
  110. } catch (Exception e) {
  111. e.printStackTrace();
  112. }
  113. }
  114.  
  115. private void sendPacket(Player p, Object packet) {
  116. try {
  117. Object nmsPlayer = getNMSPlayer(p);
  118. Object connection = nmsPlayer.getClass().getField("playerConnection").get(nmsPlayer);
  119. connection.getClass().getMethod("sendPacket", getNMSClass("Packet")).invoke(connection, packet);
  120. } catch (Exception e) {
  121. e.printStackTrace();
  122. }
  123. }
  124.  
  125. private void sendPacket(Player p, String packetName, Class<?>[] parameterclass, Object... parameters) {
  126. try {
  127. Object nmsPlayer = getNMSPlayer(p);
  128. Object connection = nmsPlayer.getClass().getField("playerConnection").get(nmsPlayer);
  129. Object packet = Class.forName(nmsPlayer.getClass().getPackage().getName() + "." + packetName).getConstructor(parameterclass).newInstance(parameters);
  130. connection.getClass().getMethod("sendPacket", getNMSClass("Packet")).invoke(connection, packet);
  131. } catch (Exception e) {
  132. e.printStackTrace();
  133. }
  134. }
  135.  
  136. private static String getVersion() {
  137. String name = Bukkit.getServer().getClass().getPackage().getName();
  138. String version = name.substring(name.lastIndexOf('.') + 1) + ".";
  139. return version;
  140. }
  141. private static Class<?> getNMSClass(String className) {
  142. String fullName = "net.minecraft.server." + getVersion() + className;
  143. Class<?> clazz = null;
  144. try {
  145. clazz = Class.forName(fullName);
  146. } catch (Exception e) {
  147. e.printStackTrace();
  148. }
  149. return clazz;
  150. }
  151.  
  152. public static Object getNMSPlayer(Player p) {
  153. try {
  154. return p.getClass().getMethod("getHandle").invoke(p);
  155. } catch (Exception e) {
  156. e.printStackTrace();
  157. }
  158. return null;
  159. }
  160.  
  161. private static Field getField(Field f) {
  162. f.setAccessible(true);
  163. return f;
  164. }
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement