AsmClassTransformer

This commit is contained in:
Izzel_Aliz
2018-04-29 15:44:01 +08:00
parent 250d168c2e
commit da8890b30a
12 changed files with 285 additions and 92 deletions

View File

@@ -1,39 +1,37 @@
package me.skymc.taboolib.display;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import me.skymc.taboolib.nms.NMSUtils;
import org.bukkit.entity.Player;
import me.skymc.taboolib.nms.NMSUtils;
import java.lang.reflect.Constructor;
/**
* @author Bkm016
* @since 2018-04-26
*/
public class TitleUtils {
private static Class<?> Packet = NMSUtils.getNMSClass("Packet");
private static Class<?> PacketPlayOutTitle = NMSUtils.getNMSClass("PacketPlayOutTitle");
private static Class<?> IChatBaseComponent = NMSUtils.getNMSClass("IChatBaseComponent");
private static Class<?> EnumTitleAction = PacketPlayOutTitle.getDeclaredClasses()[0];
private static Class<?> Packet = NMSUtils.getNMSClass("Packet");
private static Class<?> PacketPlayOutTitle = NMSUtils.getNMSClass("PacketPlayOutTitle");
private static Class<?> IChatBaseComponent = NMSUtils.getNMSClass("IChatBaseComponent");
private static Class<?> EnumTitleAction = PacketPlayOutTitle.getDeclaredClasses()[0];
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);
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 (p == null) {
return;
}
try {
if (p == null) {
return;
}
try {
if (title != null) {
Object times = EnumTitleAction.getField("TIMES").get(null);
Object chatTitle = IChatBaseComponent.getDeclaredClasses()[0].getMethod("a", String.class).invoke(null, "{\"text\":\"" + title + "\"}");
Constructor<?> subtitleConstructor = PacketPlayOutTitle.getConstructor(EnumTitleAction, IChatBaseComponent, Integer.TYPE, Integer.TYPE, Integer.TYPE);
Object titlePacket = subtitleConstructor.newInstance(times, chatTitle, fadeint, stayt, fadeoutt);
sendPacket(p, titlePacket);
times = EnumTitleAction.getField("TITLE").get(null);
chatTitle = IChatBaseComponent.getDeclaredClasses()[0].getMethod("a", String.class).invoke(null, "{\"text\":\"" + title + "\"}");
subtitleConstructor = PacketPlayOutTitle.getConstructor(EnumTitleAction, IChatBaseComponent);
@@ -46,18 +44,17 @@ public class TitleUtils {
Constructor<?> subtitleConstructor = PacketPlayOutTitle.getConstructor(EnumTitleAction, IChatBaseComponent, Integer.TYPE, Integer.TYPE, Integer.TYPE);
Object subtitlePacket = subtitleConstructor.newInstance(times, chatSubtitle, fadeinst, stayst, fadeoutst);
sendPacket(p, subtitlePacket);
times = EnumTitleAction.getField("SUBTITLE").get(null);
chatSubtitle = IChatBaseComponent.getDeclaredClasses()[0].getMethod("a", String.class).invoke(null, "{\"text\":\"" + subtitle + "\"}");
subtitleConstructor = PacketPlayOutTitle.getConstructor(EnumTitleAction, IChatBaseComponent, Integer.TYPE, Integer.TYPE, Integer.TYPE);
subtitlePacket = subtitleConstructor.newInstance(times, chatSubtitle, fadeinst, stayst, fadeoutst);
sendPacket(p, subtitlePacket);
}
}
catch (Exception ignored) {
} catch (Exception ignored) {
}
}
private static void sendPacket(Player player, Object packet) {
try {
Object handle = player.getClass().getDeclaredMethod("getHandle").invoke(player);