Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.33 KB | None | 0 0
  1. /*
  2. * Copyright (c) Memexuer 2019. Wszelkie prawa zastrzeżone.
  3. */
  4.  
  5. package pl.memexurer.core.util;
  6.  
  7. import org.bukkit.Bukkit;
  8. import org.bukkit.ChatColor;
  9. import org.bukkit.entity.Player;
  10. import pl.memexurer.core.yaml.Mesages;
  11.  
  12. import java.lang.reflect.Constructor;
  13. import java.lang.reflect.Field;
  14. import java.lang.reflect.Method;
  15.  
  16. public class TitleUtil {
  17. public TitleUtil() {
  18.  
  19. }
  20.  
  21. public static void sendActionBar(Player player, String message) {
  22. String nmsVersion = (nmsVersion = Bukkit.getServer().getClass().getPackage().getName()).substring(nmsVersion.lastIndexOf(".") + 1);
  23. try {
  24. Class<?> c1 = Class.forName("org.bukkit.craftbukkit." + nmsVersion + ".entity.CraftPlayer");
  25. Object p = c1.cast(player);
  26. Object ppoc;
  27. Class<?> c2, c3,
  28. c4 = Class.forName("net.minecraft.server." + nmsVersion + ".PacketPlayOutChat"),
  29. c5 = Class.forName("net.minecraft.server." + nmsVersion + ".Packet");
  30. Object o;
  31. if ((nmsVersion.equalsIgnoreCase("v1_8_R1") || !nmsVersion.startsWith("v1_8_")) && !nmsVersion.startsWith("v1_9_")) {
  32. c2 = Class.forName("net.minecraft.server." + nmsVersion + ".ChatSerializer");
  33. c3 = Class.forName("net.minecraft.server." + nmsVersion + ".IChatBaseComponent");
  34. Method m3 = c2.getDeclaredMethod("a", String.class);
  35. o = c3.cast(m3.invoke(c2, "{\"text\": \"" + message + "\"}"));
  36. } else {
  37. c2 = Class.forName("net.minecraft.server." + nmsVersion + ".ChatComponentText");
  38. c3 = Class.forName("net.minecraft.server." + nmsVersion + ".IChatBaseComponent");
  39. o = c2.getConstructor(new Class<?>[]{String.class}).newInstance(message);
  40. }
  41. ppoc = c4.getConstructor(new Class<?>[]{c3, byte.class}).newInstance(o, (byte) 2);
  42. Method m1 = c1.getDeclaredMethod("getHandle");
  43. Object h = m1.invoke(p);
  44. Field f1 = h.getClass().getDeclaredField("playerConnection");
  45. Object pc = f1.get(h);
  46. Method m5 = pc.getClass().getDeclaredMethod("sendPacket", c5);
  47. m5.invoke(pc, ppoc);
  48. } catch (Exception ex) {
  49. ex.printStackTrace();
  50. }
  51. }
  52.  
  53. public static void sendTitle(Player player, String text, int x, int y, int z) {
  54. try {
  55.  
  56. Object enumTitle = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TITLE").get(null);
  57. Object titleChat = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", String.class).invoke(null, "\"" + ColorUtil.tr(text) + "\"");
  58.  
  59. Constructor<?> titleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), int.class, int.class, int.class);
  60. Object titlePacket = titleConstructor.newInstance(enumTitle, titleChat, x, y, z);
  61.  
  62.  
  63. sendPacket(player, titlePacket);
  64. } catch (Exception ex) {
  65. //Do something
  66. }
  67. }
  68.  
  69. public static void sendSubtitle(Player player, String text, int x, int y, int z) {
  70. try {
  71. Object enumSubtitle = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("SUBTITLE").get(null);
  72. Object subtitleChat = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", String.class).invoke(null, "\"" + ColorUtil.tr(text) + "\"");
  73. Constructor<?> titleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), int.class, int.class, int.class);
  74. Object subtitlePacket = titleConstructor.newInstance(enumSubtitle, subtitleChat, x, y, z);
  75. sendPacket(player, subtitlePacket);
  76. } catch (Exception ex) {
  77. //Do something
  78. }
  79. }
  80.  
  81. private static void sendPacket(Player player, Object packet) {
  82. try {
  83. Object handle = player.getClass().getMethod("getHandle").invoke(player);
  84. Object playerConnection = handle.getClass().getField("playerConnection").get(handle);
  85. playerConnection.getClass().getMethod("sendPacket", getNMSClass("Packet")).invoke(playerConnection, packet);
  86.  
  87.  
  88. } catch (Exception e) {
  89. e.printStackTrace();
  90. }
  91. }
  92.  
  93. /**
  94. * Get NMS class using reflection
  95. *
  96. * @param name Name of the class
  97. * @return Class
  98. */
  99. private static Class<?> getNMSClass(String name) {
  100. String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
  101. try {
  102. return Class.forName("net.minecraft.server." + version + "." + name);
  103. } catch (ClassNotFoundException e) {
  104. e.printStackTrace();
  105. return null;
  106. }
  107.  
  108. }
  109.  
  110. public static void sendMsg(Player p, String title, String msg, int in, int stay, int out) {
  111. sendTitle(p, title, in, stay, out);
  112. sendSubtitle(p, msg, in, stay, out);
  113. }
  114. public static void sendPluginMsg(Player p, String title, String msg) {
  115. sendTitle(p, Mesages.colorScheme + ChatColor.BOLD + title, 7,2,10);
  116. sendSubtitle(p, ChatColor.GRAY + msg, 7,2,10);
  117. }
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement