package com.w67clement.mineapi.nms.reflection.play_out.message;
import com.w67clement.mineapi.MineAPI;
import com.w67clement.mineapi.api.ReflectionAPI;
import com.w67clement.mineapi.enums.PacketType;
import com.w67clement.mineapi.message.Title;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
public class CraftTitle extends Title
{
/*
* Reflection
*/
private static Class<?> packetTitleClass;
private static Class<?> chatBaseComponentClass;
private static Class<?> enumTitleAction;
private static Object enum_title;
private static Object enum_subtitle;
static
{
packetTitleClass = ReflectionAPI.getNmsClass("PacketPlayOutTitle");
chatBaseComponentClass = ReflectionAPI.NmsClass.getIChatBaseComponentClass();
if (MineAPI.getServerVersion().equals("v1_8_R1"))
{
enumTitleAction = ReflectionAPI.getNmsClass("EnumTitleAction");
}
else
{
enumTitleAction = ReflectionAPI.getNmsClass("PacketPlayOutTitle").getDeclaredClasses()[0];
}
for (Object obj : enumTitleAction.getEnumConstants())
{
if (obj.toString().equals("TIMES"))
{
// Not used.
}
else if (obj.toString().equals("TITLE"))
{
enum_title = obj;
}
else if (obj.toString().equals("SUBTITLE"))
{
enum_subtitle = obj;
}
}
}
public CraftTitle(int fadeIn, int stay, int fadeOut, String title, String subtitle)
{
super(fadeIn, stay, fadeOut, title, subtitle);
}
@Override
public void send(Player player)
{
// Create a Packet
Object timeTitlePacket = ReflectionAPI.newInstance(packetTitleClass.getConstructors()[1], this.fadeIn, this.stay, this.fadeOut);
// Send the packet title with the time.
ReflectionAPI.NmsClass.sendPacket(player, timeTitlePacket);
if (title != null)
{
title = ChatColor.translateAlternateColorCodes('&', title);
// Convert a JSON string to IChatBaseComponent object
Object chatComponentTitle = ReflectionAPI.invokeMethod(null, ReflectionAPI.getMethod(ReflectionAPI.NmsClass.getChatSerializerClass(), "a", String.class), "[{\"text\":\"" + this.title + ChatColor.RESET + "\"}]");
// Create packet
Object titleTitlePacket = ReflectionAPI.newInstance(ReflectionAPI.getConstructor(packetTitleClass, enumTitleAction, chatBaseComponentClass), enum_title, chatComponentTitle);
// Send the title
ReflectionAPI.NmsClass.sendPacket(player, titleTitlePacket);
}
if (subtitle != null)
{
subtitle = ChatColor.translateAlternateColorCodes('&', subtitle);
// Convert a JSON string to IChatBaseComponent object
Object chatComponentSubTitle = ReflectionAPI.invokeMethod(null, ReflectionAPI.getMethod(ReflectionAPI.NmsClass.getChatSerializerClass(), "a", String.class), "[{\"text\":\"" + this.subtitle + ChatColor.RESET + "\"}]");
// Create packet
Object subtitleTitlePacket = ReflectionAPI.newInstance(ReflectionAPI.getConstructor(packetTitleClass, enumTitleAction, chatBaseComponentClass), enum_subtitle, chatComponentSubTitle);
// Send the subtitle
ReflectionAPI.NmsClass.sendPacket(player, subtitleTitlePacket);
}
}
public Object constructPacket()
{
return null;
}
@Override
public PacketType getPacketType()
{
return PacketType.PACKETPLAYOUT;
}
}