package tntrun.utils; import java.io.File; import java.io.IOException; import java.lang.reflect.Constructor; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import tntrun.TNTRun; public class TitleMsg { public static String join = "&7[&6TNTRun&7]"; public static String subjoin = "&6{PLAYER} &7joined"; public static String win = "&6You won"; public static String subwin = "&7Congratulations"; public static String starting = "&7[&6TNTRun&7]"; public static String substarting = "&7Starting in &6{COUNT}"; public static String start = "&7[&6TNTRun&7]"; public static String substart = "&7The Game has started"; public static void sendFullTitle(Player player, String title, String subtitle, int fadeIn, int stay, int fadeOut, TNTRun plugin){ if(plugin.getConfig().getBoolean("special.UseTitle") == false){ return; } sendTitle(player, fadeIn, stay, fadeOut, title, subtitle); } public static void loadTitles(TNTRun plugin) { File messageconfig = new File(plugin.getDataFolder(), "configtitles.yml"); FileConfiguration config = YamlConfiguration.loadConfiguration(messageconfig); join = config.getString("join", join); subjoin = config.getString("subjoin", subjoin); win = config.getString("win", win); subwin = config.getString("subwin", subwin); starting = config.getString("starting", starting); substarting = config.getString("substarting", substarting); start = config.getString("start", start); substart = config.getString("substart", substart); saveTitles(messageconfig); } private static void saveTitles(File messageconfig) { FileConfiguration config = new YamlConfiguration(); config.set("join", join); config.set("subjoin", subjoin); config.set("win", win); config.set("subwin", subwin); config.set("starting", starting); config.set("substarting", substarting); config.set("start", start); config.set("substart", substart); try { config.save(messageconfig); } catch (IOException e) { e.printStackTrace(); } } String[] t = { "Title was made by: https://www.spigotmc.org/resources/authors/connorlinfoot.22614/", "Resource: https://www.spigotmc.org/resources/titleapi-1-8-1-9.1325/"}; public static void sendTitle(Player player, Integer fadeIn, Integer stay, Integer fadeOut, String title, String subtitle) { try { Object e; Object chatTitle; Object chatSubtitle; Constructor subtitleConstructor; Object titlePacket; Object subtitlePacket; if (title != null) { title = ChatColor.translateAlternateColorCodes('&', title); // Times packets e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TIMES").get((Object) null); chatTitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke((Object) null, new Object[]{"{\"text\":\"" + title + "\"}"}); subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(new Class[]{getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE}); titlePacket = subtitleConstructor.newInstance(new Object[]{e, chatTitle, fadeIn, stay, fadeOut}); sendPacket(player, titlePacket); e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TITLE").get((Object) null); chatTitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke((Object) null, new Object[]{"{\"text\":\"" + title + "\"}"}); subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(new Class[]{getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent")}); titlePacket = subtitleConstructor.newInstance(new Object[]{e, chatTitle}); sendPacket(player, titlePacket); } if (subtitle != null) { subtitle = ChatColor.translateAlternateColorCodes('&', subtitle); // Times packets e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TIMES").get((Object) null); chatSubtitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke((Object) null, new Object[]{"{\"text\":\"" + title + "\"}"}); subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(new Class[]{getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE}); subtitlePacket = subtitleConstructor.newInstance(new Object[]{e, chatSubtitle, fadeIn, stay, fadeOut}); sendPacket(player, subtitlePacket); e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("SUBTITLE").get((Object) null); chatSubtitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke((Object) null, new Object[]{"{\"text\":\"" + subtitle + "\"}"}); subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(new Class[]{getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE}); subtitlePacket = subtitleConstructor.newInstance(new Object[]{e, chatSubtitle, fadeIn, stay, fadeOut}); sendPacket(player, subtitlePacket); } } catch (Exception var11) { var11.printStackTrace(); } } public static 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) { e.printStackTrace(); } } public static Class<?> getNMSClass(String name) { String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; try { return Class.forName("net.minecraft.server." + version + "." + name); } catch (ClassNotFoundException e) { e.printStackTrace(); return null; } } }