package crtest; import java.lang.reflect.Constructor; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Player; public class Title { private String nms;{ String ver = Bukkit.getServer().getClass().getPackage().getName(); nms = ver.substring(ver.lastIndexOf('.') + 1); } private String title; private String subtitle; private int fadeIn; private int time; private int fadeOut; public Title() {} public Title(String title, int fadeIn, int time, int fadeOut) { this.title = title; this.fadeIn = fadeIn; this.time = time; this.fadeOut = fadeOut; } public Title(String title, String subtitle, int fadeIn, int time, int fadeOut) { this.title = title; this.subtitle = subtitle; this.fadeIn = fadeIn; this.time = time; this.fadeOut = fadeOut; } public String getTitle() { return this.title; } public void setTitle(String title) { this.title = title; } public String getSubtitle() { return this.subtitle; } public void setSubtitle(String subtitle) { this.subtitle = subtitle; } public int getFadeIn() { return this.fadeIn; } public void setFadeIn(int fadeIn) { this.fadeIn = fadeIn; } public int getTime() { return this.time; } public void setTime(int time) { this.time = time; } public int getFadeOut() { return this.fadeOut; } public void setFadeOut(int fadeOut) { this.fadeOut = fadeOut; } public void send(Player p) { if(title == null) return; sendPacket(p, titlePacket(title, fadeIn, time, fadeOut)); if(subtitle != null) sendPacket(p, subtitlePacket(subtitle, fadeIn, time, fadeOut)); } private Class getNMSClass(String name) { try { if(name.equals("IChatBaseComponent")) { return Class.forName("net.minecraft.server." + nms + ".IChatBaseComponent"); } else if(name.equals("PacketPlayOutTitle")) { return Class.forName("net.minecraft.server." + nms + ".PacketPlayOutTitle"); }else if(name.equals("Packet")) { return Class.forName("net.minecraft.server." + nms + ".Packet"); } } catch(ClassNotFoundException ex) {} return null; } private Object titlePacket(String message, int fadeIn, int time, int fadeOut) { String json = "{\"text\":\""+ color(message) + "\"}"; try { Object enumTitle = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TITLE").get(null); Object chat = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", String.class).invoke(null, json); Constructor titleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), int.class, int.class, int.class); return titleConstructor.newInstance(enumTitle, chat, fadeIn, time, fadeOut); } catch (Exception e) {} return null; } private Object subtitlePacket(String message, int fadeIn, int time, int fadeOut) { String json = "{\"text\":\""+ color(message) + "\"}"; try { Object enumTitle = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("SUBTITLE").get(null); Object chat = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", String.class).invoke(null, json); Constructor titleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), int.class, int.class, int.class); return titleConstructor.newInstance(enumTitle, chat, fadeIn, time, fadeOut); } catch (Exception e) {} return null; } private String color(String s) { return ChatColor.translateAlternateColorCodes('&', s); } private void sendPacket(Player player, Object packet) { try { Object handle = player.getClass().getMethod("getHandle").invoke(player); Object playerConnection = handle.getClass().getField("playerConnection").get(handle); playerConnection.getClass().getMethod("sendPacket", getNMSClass("Packet")).invoke(playerConnection, packet); } catch (Exception e) {} } }