SHARE
TWEET

TitleAPI

a guest Aug 24th, 2015 66 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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top