package com.w67clement.mineapi.nms.reflection.packets.play.out; import com.w67clement.mineapi.api.ReflectionAPI.*; import com.w67clement.mineapi.api.wrappers.ChatComponentWrapper; import com.w67clement.mineapi.message.PacketChat; import java.lang.reflect.Field; import org.bukkit.entity.Player; import static com.w67clement.mineapi.api.ReflectionAPI.*; /** * Created by w67clement on 13/03/2016. * <p> * Class of project: MineAPI */ public class CraftPacketChat extends PacketChat<Object> { private static final Class<?> packetClass; private static final Field contentField; private static final Field dataField; static { packetClass = getNmsClass("PacketPlayOutChat"); contentField = getField(packetClass, "a", true); dataField = getField(packetClass, "b", true); } public CraftPacketChat(Object packet) { super(packet); } public CraftPacketChat(String json) { this(json, (byte) 1); } public CraftPacketChat(String json, byte data) { super(SunUnsafe.newInstance(packetClass)); if (!this.setContent(json)) this.setContent("[{\"text\":\"\"}]"); this.setData(data); } @Override public String getContent() { return ChatComponentWrapper.makeJsonByChatComponent(getValue(packet, contentField)); } @Override public byte getData() { return getValueWithType(packet, dataField, byte.class); } @Override public PacketChat setData(byte data) { if (data < 1) data = 1; else if (data > 2) data = 2; setValue(this.packet, dataField, data); return this; } @Override public boolean setContent(String json) { try { parser.parse(json); } catch (Exception e) { return false; } setValue(packet, contentField, ChatComponentWrapper.makeChatComponentByJson(json)); return true; } @Override public void send(Player player) { NmsClass.sendPacket(player, this.getHandle()); } }