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 | } |