View difference between Paste ID: hiXSrdsv and JQpsEsah
SHOW: | | - or go back to the newest paste.
1
package me.PDKnight.Main;
2
3
import java.lang.reflect.Constructor;
4
5
import org.bukkit.Bukkit;
6
import org.bukkit.ChatColor;
7
import org.bukkit.entity.Player;
8
9
public class TitleAPI {
10
11
	public static void sendPacket(Player player, Object packet) {
12
		try {
13
			Object handle = player.getClass()
14
					.getMethod("getHandle", new Class[0])
15
					.invoke(player, new Object[0]);
16
			Object playerConnection = handle.getClass()
17
					.getField("playerConnection").get(handle);
18
			playerConnection
19
					.getClass()
20
					.getMethod("sendPacket",
21
							new Class[] { getNMSClass("Packet") })
22
					.invoke(playerConnection, new Object[] { packet });
23
		} catch (Exception e) {
24
			e.printStackTrace();
25
		}
26
	}
27
28
	public static Class<?> getNMSClass(String name) {
29
		String version = Bukkit.getServer().getClass().getPackage().getName()
30
				.split("\\.")[3];
31
		try {
32
			return Class
33
					.forName("net.minecraft.server." + version + "." + name);
34
		} catch (ClassNotFoundException e) {
35
			e.printStackTrace();
36
		}
37
		return null;
38
	}
39
40
	public static void sendTitle(Player player, String times, String title, String subtitle) {
41
		try {
42
			int fadeIn = I(times.split(" ")[0]),
43
				stay = I(times.split(" ")[1]),
44
				fadeOut = I(times.split(" ")[2]);
45
			if (title != null) {
46
				title = ChatColor.translateAlternateColorCodes('&', title);
47
				title = title.replaceAll("%player%", player.getDisplayName());
48
				Object enumTitle = getNMSClass("PacketPlayOutTitle")
49
						.getDeclaredClasses()[0].getField("TITLE").get(null);
50
				Object chatTitle = getNMSClass("IChatBaseComponent")
51
						.getDeclaredClasses()[0].getMethod("a",
52
						new Class[] { String.class }).invoke(null,
53
						new Object[] { title });
54
				Constructor<?> titleConstructor = getNMSClass(
55
						"PacketPlayOutTitle").getConstructor(
56
						new Class[] {
57
								getNMSClass("PacketPlayOutTitle")
58
										.getDeclaredClasses()[0],
59
								getNMSClass("IChatBaseComponent"),
60
								Integer.TYPE, Integer.TYPE, Integer.TYPE });
61
				Object titlePacket = titleConstructor.newInstance(new Object[] {
62
						enumTitle, chatTitle, fadeIn, stay, fadeOut });
63
				sendPacket(player, titlePacket);
64
			}
65
			if (subtitle != null) {
66
				subtitle = ChatColor
67
						.translateAlternateColorCodes('&', subtitle);
68
				subtitle = subtitle.replaceAll("%player%",
69
						player.getDisplayName());
70
				Object enumSubtitle = getNMSClass("PacketPlayOutTitle")
71
						.getDeclaredClasses()[0].getField("SUBTITLE").get(null);
72
				Object chatSubtitle = getNMSClass("IChatBaseComponent")
73
						.getDeclaredClasses()[0].getMethod("a",
74
						new Class[] { String.class }).invoke(null,
75
						new Object[] { subtitle });
76
				Constructor<?> subtitleConstructor = getNMSClass(
77
						"PacketPlayOutTitle").getConstructor(
78
						new Class[] {
79
								getNMSClass("PacketPlayOutTitle")
80
										.getDeclaredClasses()[0],
81
								getNMSClass("IChatBaseComponent"),
82
								Integer.TYPE, Integer.TYPE, Integer.TYPE });
83
				Object subtitlePacket = subtitleConstructor
84
						.newInstance(new Object[] { enumSubtitle, chatSubtitle,
85
								fadeIn, stay, fadeOut });
86
				sendPacket(player, subtitlePacket);
87
			}
88
		} catch (Exception e) {
89
			e.printStackTrace();
90
		}
91
	}
92
	
93
	public static Integer I(String s) {
94
		return Integer.parseInt(s);
95
	}
96
}