package me.skymc.taboolib.packet; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.ProtocolManager; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.wrappers.WrappedDataWatcher; import com.google.common.base.Preconditions; import org.bukkit.Bukkit; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; /** * @author sky */ public class PacketUtils { public static void checkProtocolLib() { Preconditions.checkArgument(isProtocolLibEnabled(), "Plugin \"ProtocolLib\" cannot found!"); } public static boolean isProtocolLibEnabled() { return Bukkit.getPluginManager().getPlugin("ProtocolLib") != null && Bukkit.getPluginManager().getPlugin("ProtocolLib").isEnabled(); } public static ProtocolManager getManager() { return ProtocolLibrary.getProtocolManager(); } public static void sendPacketEntityStatus(Entity entity, EntityStatus status, Player... players) { PacketContainer packet = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.ENTITY_METADATA); packet.getIntegers().write(0, entity.getEntityId()); WrappedDataWatcher watcher = new WrappedDataWatcher(); WrappedDataWatcher.Serializer serializer = WrappedDataWatcher.Registry.get(Byte.class); switch (status) { case FIRE: watcher.setObject(0, serializer, (byte) 0x01); break; case CROUCHED: watcher.setObject(0, serializer, (byte) 0x02); break; case UNUSED1: watcher.setObject(0, serializer, (byte) 0x04); break; case SPRINTING: watcher.setObject(0, serializer, (byte) 0x08); break; case UNUSED2: watcher.setObject(0, serializer, (byte) 0x10); break; case INVISIBLE: watcher.setObject(0, serializer, (byte) 0x20); break; case GLOWING: watcher.setObject(0, serializer, (byte) 0x40); break; case ELYTRA: watcher.setObject(0, serializer, (byte) 0x80); break; default: watcher.setObject(0, serializer, (byte) 0x00); break; } packet.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects()); try { for (Player player : players) { ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet); } } catch (Exception e) { e.printStackTrace(); } } public static void sendPacketEntityCustomName(Entity entity, String value, Player... players) { PacketContainer packet = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.ENTITY_METADATA); packet.getIntegers().write(0, entity.getEntityId()); WrappedDataWatcher watcher = new WrappedDataWatcher(); WrappedDataWatcher.Serializer serializer = WrappedDataWatcher.Registry.get(String.class); watcher.setObject(2, serializer, value == null ? "" : value); packet.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects()); try { for (Player player : players) { ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet); } } catch (Exception e) { e.printStackTrace(); } } public enum EntityStatus { FIRE, CROUCHED, UNUSED1, UNUSED2, SPRINTING, INVISIBLE, GLOWING, ELYTRA } }