package com.w67clement.mineapi.nms.reflection.play_out.tab;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.w67clement.mineapi.api.wrappers.ChatComponentWrapper;
import com.w67clement.mineapi.enums.PacketType;
import com.w67clement.mineapi.tab.TabTitle;
import java.lang.reflect.Field;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import static com.w67clement.mineapi.api.ReflectionAPI.*;
/**
* Set a title (header and footer) of the player list Tab.
*
* @author w67clement
* @version 3.0 - For none NMS version.
*/
public class CraftTabTitle extends TabTitle<Object>
{
private static final JsonParser jsonParser = new JsonParser();
private static final Class<?> packetClass;
private static final Field headerField;
private static final Field footerField;
static
{
packetClass = getNmsClass("PacketPlayOutPlayerListHeaderFooter");
headerField = getField(packetClass, "a", true);
footerField = getField(packetClass, "b", true);
}
public CraftTabTitle(Object packet)
{
super(packet);
}
public CraftTabTitle(String header, String footer)
{
super(SunUnsafe.newInstance(packetClass));
this.setHeader(header);
this.setFooter(footer);
}
@Override
public String getHeader()
{
Object header = getValue(packet, headerField);
if (header == null)
return null;
JsonObject jsonHeader = (JsonObject) jsonParser.parse(ChatComponentWrapper.makeJsonByChatComponent(header));
return jsonHeader.get("text").getAsString();
}
@Override
public TabTitle setHeader(String header)
{
if (header == null || header.isEmpty())
{
setValue(packet, headerField, null);
return this;
}
setValue(packet, headerField, ChatComponentWrapper.makeChatComponentByText(ChatColor.translateAlternateColorCodes('&', header) + ChatColor.RESET));
return this;
}
@Override
public String getFooter()
{
Object header = getValue(packet, footerField);
if (header == null)
return null;
JsonObject jsonHeader = (JsonObject) jsonParser.parse(ChatComponentWrapper.makeJsonByChatComponent(header));
return jsonHeader.get("text").getAsString();
}
@Override
public TabTitle setFooter(String footer)
{
if (footer == null || footer.isEmpty())
{
setValue(packet, footerField, null);
return this;
}
setValue(packet, footerField, ChatComponentWrapper.makeChatComponentByText(ChatColor.translateAlternateColorCodes('&', footer) + ChatColor.RESET));
return this;
}
@Override
public PacketType getPacketType()
{
return PacketType.PACKETPLAYOUT;
}
@Override
public void send(Player player)
{
NmsClass.sendPacket(player, this.getHandle());
}
}