Advertisement
Guest User

TitleAPI

a guest
Aug 24th, 2015
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package me.PDKnight.Main;
  2.  
  3. import java.lang.reflect.Constructor;
  4.  
  5. import org.bukkit.Bukkit;
  6. import org.bukkit.ChatColor;
  7. import org.bukkit.entity.Player;
  8.  
  9. public class TitleAPI {
  10.  
  11. public static void sendPacket(Player player, Object packet) {
  12. try {
  13. Object handle = player.getClass()
  14. .getMethod("getHandle", new Class[0])
  15. .invoke(player, new Object[0]);
  16. Object playerConnection = handle.getClass()
  17. .getField("playerConnection").get(handle);
  18. playerConnection
  19. .getClass()
  20. .getMethod("sendPacket",
  21. new Class[] { getNMSClass("Packet") })
  22. .invoke(playerConnection, new Object[] { packet });
  23. } catch (Exception e) {
  24. e.printStackTrace();
  25. }
  26. }
  27.  
  28. public static Class<?> getNMSClass(String name) {
  29. String version = Bukkit.getServer().getClass().getPackage().getName()
  30. .split("\\.")[3];
  31. try {
  32. return Class
  33. .forName("net.minecraft.server." + version + "." + name);
  34. } catch (ClassNotFoundException e) {
  35. e.printStackTrace();
  36. }
  37. return null;
  38. }
  39.  
  40. public static void sendTitle(Player player, String times, String title, String subtitle) {
  41. try {
  42. int fadeIn = I(times.split(" ")[0]),
  43. stay = I(times.split(" ")[1]),
  44. fadeOut = I(times.split(" ")[2]);
  45. if (title != null) {
  46. title = ChatColor.translateAlternateColorCodes('&', title);
  47. title = title.replaceAll("%player%", player.getDisplayName());
  48. Object enumTitle = getNMSClass("PacketPlayOutTitle")
  49. .getDeclaredClasses()[0].getField("TITLE").get(null);
  50. Object chatTitle = getNMSClass("IChatBaseComponent")
  51. .getDeclaredClasses()[0].getMethod("a",
  52. new Class[] { String.class }).invoke(null,
  53. new Object[] { title });
  54. Constructor<?> titleConstructor = getNMSClass(
  55. "PacketPlayOutTitle").getConstructor(
  56. new Class[] {
  57. getNMSClass("PacketPlayOutTitle")
  58. .getDeclaredClasses()[0],
  59. getNMSClass("IChatBaseComponent"),
  60. Integer.TYPE, Integer.TYPE, Integer.TYPE });
  61. Object titlePacket = titleConstructor.newInstance(new Object[] {
  62. enumTitle, chatTitle, fadeIn, stay, fadeOut });
  63. sendPacket(player, titlePacket);
  64. }
  65. if (subtitle != null) {
  66. subtitle = ChatColor
  67. .translateAlternateColorCodes('&', subtitle);
  68. subtitle = subtitle.replaceAll("%player%",
  69. player.getDisplayName());
  70. Object enumSubtitle = getNMSClass("PacketPlayOutTitle")
  71. .getDeclaredClasses()[0].getField("SUBTITLE").get(null);
  72. Object chatSubtitle = getNMSClass("IChatBaseComponent")
  73. .getDeclaredClasses()[0].getMethod("a",
  74. new Class[] { String.class }).invoke(null,
  75. new Object[] { subtitle });
  76. Constructor<?> subtitleConstructor = getNMSClass(
  77. "PacketPlayOutTitle").getConstructor(
  78. new Class[] {
  79. getNMSClass("PacketPlayOutTitle")
  80. .getDeclaredClasses()[0],
  81. getNMSClass("IChatBaseComponent"),
  82. Integer.TYPE, Integer.TYPE, Integer.TYPE });
  83. Object subtitlePacket = subtitleConstructor
  84. .newInstance(new Object[] { enumSubtitle, chatSubtitle,
  85. fadeIn, stay, fadeOut });
  86. sendPacket(player, subtitlePacket);
  87. }
  88. } catch (Exception e) {
  89. e.printStackTrace();
  90. }
  91. }
  92.  
  93. public static Integer I(String s) {
  94. return Integer.parseInt(s);
  95. }
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement