package com.leontg77.uhc.utils; import java.lang.reflect.Field; import net.minecraft.server.v1_8_R3.IChatBaseComponent; import net.minecraft.server.v1_8_R3.IChatBaseComponent.ChatSerializer; import net.minecraft.server.v1_8_R3.PacketPlayOutChat; import net.minecraft.server.v1_8_R3.PacketPlayOutPlayerListHeaderFooter; import net.minecraft.server.v1_8_R3.PacketPlayOutTitle; import net.minecraft.server.v1_8_R3.PacketPlayOutTitle.EnumTitleAction; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; import org.bukkit.entity.Player; import com.leontg77.uhc.Game; /** * Packet utilities class. * <p> * Contains packet related methods. * * @author LeonTG77 */ public class PacketUtils { /** * Sets a tablist for the given player. * * @param player the player. */ public static void setTabList(Player player) { Game game = Game.getInstance(); if (game.isRecordedRound()) { return; } CraftPlayer craft = (CraftPlayer) player; IChatBaseComponent headerJSON = ChatSerializer.a( "{text:'§4§lArctic UHC§r §8- §a§o@ArcticUHC§r\n" + "§7Follow us for games and updates!\n'}" ); String gamemode = GameUtils.getTeamSize() + game.getScenarios(); String host = game.getHost(); int teamsize = game.getTeamSize(); IChatBaseComponent footerJSON = ChatSerializer.a( "{text:'\n§7" + gamemode + (teamsize > 0 || teamsize < -1 ? "\n§4Host: §a" + host : "") + "'}" ); PacketPlayOutPlayerListHeaderFooter headerPacket = new PacketPlayOutPlayerListHeaderFooter(headerJSON); try { Field field = headerPacket.getClass().getDeclaredField("b"); field.setAccessible(true); field.set(headerPacket, footerJSON); } catch (Exception e) { Bukkit.getServer().getLogger().severe("§cCould not send tab list packets to " + player.getName()); return; } craft.getHandle().playerConnection.sendPacket(headerPacket); } /** * Sends a message in action bar to the given player. * * @param player the player. * @param msg the message. */ public static void sendAction(Player player, String msg) { CraftPlayer craft = (CraftPlayer) player; IChatBaseComponent actionJSON = ChatSerializer.a("{text:'" + msg + "'}"); PacketPlayOutChat actionPacket = new PacketPlayOutChat(actionJSON, (byte) 2); craft.getHandle().playerConnection.sendPacket(actionPacket); } /** * Sends a title message to the given player. * * @param player the player displaying to. * @param title the title. * @param subtitle the subtitle. * * @param in how long it uses to fade in. * @param out how long it uses to fade out. * @param stay how long it stays. */ public static void sendTitle(Player player, String title, String subtitle, int in, int stay, int out) { CraftPlayer craft = (CraftPlayer) player; IChatBaseComponent titleJSON = ChatSerializer.a("{'text': '" + title + "'}"); IChatBaseComponent subtitleJSON = ChatSerializer.a("{'text': '" + subtitle + "'}"); PacketPlayOutTitle titlePacket = new PacketPlayOutTitle(EnumTitleAction.TITLE, titleJSON, in, stay, out); PacketPlayOutTitle subtitlePacket = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, subtitleJSON); craft.getHandle().playerConnection.sendPacket(titlePacket); craft.getHandle().playerConnection.sendPacket(subtitlePacket); } }