package eu.univento.core.api; import net.minecraft.server.v1_8_R3.IChatBaseComponent; import net.minecraft.server.v1_8_R3.PacketPlayOutPlayerListHeaderFooter; import net.minecraft.server.v1_8_R3.PacketPlayOutTitle; import net.minecraft.server.v1_8_R3.PlayerConnection; import org.bukkit.ChatColor; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; import org.bukkit.entity.Player; import java.lang.reflect.Field; //TODO: find real author, its not me /** * sends title to player * @author joethei * @version 1.0 */ public class Title { /** * send title to player * @param player Player * @param fadeIn Integer * @param stay Integer * @param fadeOut Integer * @param title String * @param subtitle String */ public static void sendTitle(Player player, Integer fadeIn, Integer stay, Integer fadeOut, String title, String subtitle) { PlayerConnection connection = ((CraftPlayer) player).getHandle().playerConnection; PacketPlayOutTitle packetPlayOutTimes = new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.TIMES, null, fadeIn.intValue(), stay.intValue(), fadeOut.intValue()); connection.sendPacket(packetPlayOutTimes); if (subtitle != null) { subtitle = subtitle.replaceAll("%player%", player.getDisplayName()); subtitle = ChatColor.translateAlternateColorCodes('&', subtitle); IChatBaseComponent titleSub = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + subtitle + "\"}"); PacketPlayOutTitle packetPlayOutSubTitle = new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.SUBTITLE, titleSub); connection.sendPacket(packetPlayOutSubTitle); } if (title != null) { title = title.replaceAll("%player%", player.getDisplayName()); title = ChatColor.translateAlternateColorCodes('&', title); IChatBaseComponent titleMain = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + title + "\"}"); PacketPlayOutTitle packetPlayOutTitle = new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.TITLE, titleMain); connection.sendPacket(packetPlayOutTitle); } } /** * sends tab title to player * @param player Player * @param header String * @param footer String */ public static void sendTabTitle(Player player, String header, String footer) { if (header == null) header = ""; header = ChatColor.translateAlternateColorCodes('&', header); if (footer == null) footer = ""; footer = ChatColor.translateAlternateColorCodes('&', footer); header = header.replaceAll("%player%", player.getDisplayName()); footer = footer.replaceAll("%player%", player.getDisplayName()); PlayerConnection connection = ((CraftPlayer) player).getHandle().playerConnection; IChatBaseComponent tabTitle = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + header + "\"}"); IChatBaseComponent tabFoot = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + footer + "\"}"); PacketPlayOutPlayerListHeaderFooter headerPacket = new PacketPlayOutPlayerListHeaderFooter(tabTitle); try { Field field = headerPacket.getClass().getDeclaredField("b"); field.setAccessible(true); field.set(headerPacket, tabFoot); } catch (Exception e) { e.printStackTrace(); } finally { connection.sendPacket(headerPacket); } } /** * checks if String is integer * @param s String * @return boolean */ boolean isInteger(String s) { try { Integer.parseInt(s); } catch (NumberFormatException e) { return false; } return true; } }