86 lines
4.4 KiB
Java
86 lines
4.4 KiB
Java
package me.skymc.taboolib.display;
|
|
|
|
import java.lang.reflect.Constructor;
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
public class TitleUtils {
|
|
|
|
private static void sendPacket(Player player, Object packet)
|
|
{
|
|
try
|
|
{
|
|
Object handle = player.getClass().getMethod("getHandle", new Class[0]).invoke(player);
|
|
Object playerConnection = handle.getClass().getField("playerConnection").get(handle);
|
|
playerConnection.getClass().getMethod("sendPacket", new Class[]{getNMSClass("Packet")}).invoke(playerConnection, packet);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ex.printStackTrace();
|
|
}
|
|
}
|
|
|
|
private static Class<?> getNMSClass(String class_name)
|
|
{
|
|
String version = org.bukkit.Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
|
|
try
|
|
{
|
|
return Class.forName("net.minecraft.server." + version + "." + class_name);
|
|
}
|
|
catch (ClassNotFoundException ex)
|
|
{
|
|
ex.printStackTrace();
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static void sendTitle(Player p, String title, String subtitle, int fadein, int stay, int fadeout) {
|
|
sendTitle(p, title, fadein, stay, fadeout, subtitle, fadein, stay, fadeout);
|
|
}
|
|
|
|
public static void sendTitle(Player p, String title, int fadeint, int stayt, int fadeoutt, String subtitle, int fadeinst, int stayst, int fadeoutst)
|
|
{
|
|
if (title == null) {
|
|
title = "";
|
|
}
|
|
if (subtitle == null) {
|
|
subtitle = "";
|
|
}
|
|
try
|
|
{
|
|
if (title != null)
|
|
{
|
|
Object e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TIMES").get(null);
|
|
Object chatTitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke(null, "{\"text\":\"" + title + "\"}");
|
|
Constructor<?> subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE);
|
|
Object titlePacket = subtitleConstructor.newInstance(e, chatTitle, fadeint, stayt, fadeoutt);
|
|
sendPacket(p, titlePacket);
|
|
|
|
e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TITLE").get(null);
|
|
chatTitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke(null, "{\"text\":\"" + title + "\"}");
|
|
subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"));
|
|
titlePacket = subtitleConstructor.newInstance(e, chatTitle);
|
|
sendPacket(p, titlePacket);
|
|
}
|
|
if (subtitle != null)
|
|
{
|
|
Object e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TIMES").get(null);
|
|
Object chatSubtitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke(null, "{\"text\":\"" + title + "\"}");
|
|
Constructor<?> subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE);
|
|
Object subtitlePacket = subtitleConstructor.newInstance(e, chatSubtitle, fadeinst, stayst, fadeoutst);
|
|
sendPacket(p, subtitlePacket);
|
|
|
|
e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("SUBTITLE").get(null);
|
|
chatSubtitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke(null, "{\"text\":\"" + subtitle + "\"}");
|
|
subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE);
|
|
subtitlePacket = subtitleConstructor.newInstance(e, chatSubtitle, fadeinst, stayst, fadeoutst);
|
|
sendPacket(p, subtitlePacket);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ex.printStackTrace();
|
|
}
|
|
}
|
|
}
|