Dateien nach "src/main/java/pb/ajneb97/lib/titleapi" hochladen
This commit is contained in:
57
src/main/java/pb/ajneb97/lib/titleapi/TabTitleSendEvent.java
Normal file
57
src/main/java/pb/ajneb97/lib/titleapi/TabTitleSendEvent.java
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
package pb.ajneb97.lib.titleapi;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
|
||||||
|
public class TabTitleSendEvent extends Event {
|
||||||
|
private static final HandlerList handlers = new HandlerList();
|
||||||
|
private final Player player;
|
||||||
|
private String header;
|
||||||
|
private String footer;
|
||||||
|
private boolean cancelled = false;
|
||||||
|
|
||||||
|
public TabTitleSendEvent(Player player, String header, String footer) {
|
||||||
|
this.player = player;
|
||||||
|
this.header = header;
|
||||||
|
this.footer = footer;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HandlerList getHandlers() {
|
||||||
|
return handlers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HandlerList getHandlerList() {
|
||||||
|
return handlers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Player getPlayer() {
|
||||||
|
return player;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHeader() {
|
||||||
|
return header;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHeader(String header) {
|
||||||
|
this.header = header;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFooter() {
|
||||||
|
return footer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFooter(String footer) {
|
||||||
|
this.footer = footer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isCancelled() {
|
||||||
|
return cancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCancelled(boolean cancelled) {
|
||||||
|
this.cancelled = cancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
154
src/main/java/pb/ajneb97/lib/titleapi/TitleAPI.java
Normal file
154
src/main/java/pb/ajneb97/lib/titleapi/TitleAPI.java
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
package pb.ajneb97.lib.titleapi;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
|
import pb.ajneb97.utils.UtilidadesOtros;
|
||||||
|
|
||||||
|
import java.lang.reflect.Constructor;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
|
|
||||||
|
public class TitleAPI implements Listener {
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public static void sendSubtitle(Player player, Integer fadeIn, Integer stay, Integer fadeOut, String message) {
|
||||||
|
sendTitle(player, fadeIn, stay, fadeOut, null, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public static void sendFullTitle(Player player, Integer fadeIn, Integer stay, Integer fadeOut, String title, String subtitle) {
|
||||||
|
sendTitle(player, fadeIn, stay, fadeOut, title, subtitle);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sendPacket(Player player, Object packet) {
|
||||||
|
try {
|
||||||
|
Object handle = player.getClass().getMethod("getHandle").invoke(player);
|
||||||
|
Object playerConnection = handle.getClass().getField("playerConnection").get(handle);
|
||||||
|
playerConnection.getClass().getMethod("sendPacket", getNMSClass("Packet")).invoke(playerConnection, packet);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Class<?> getNMSClass(String name) {
|
||||||
|
String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
|
||||||
|
try {
|
||||||
|
return Class.forName("net.minecraft.server." + version + "." + name);
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sendTitle(Player player, Integer fadeIn, Integer stay, Integer fadeOut, String title, String subtitle) {
|
||||||
|
TitleSendEvent titleSendEvent = new TitleSendEvent(player, title, subtitle);
|
||||||
|
if(!UtilidadesOtros.isLegacy()) {
|
||||||
|
if(title.isEmpty()) {
|
||||||
|
title = " ";
|
||||||
|
}
|
||||||
|
if(subtitle.isEmpty()) {
|
||||||
|
subtitle = " ";
|
||||||
|
}
|
||||||
|
title = ChatColor.translateAlternateColorCodes('&', title);
|
||||||
|
subtitle = ChatColor.translateAlternateColorCodes('&', subtitle);
|
||||||
|
player.sendTitle(title, subtitle, fadeIn, stay, fadeOut);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Bukkit.getPluginManager().callEvent(titleSendEvent);
|
||||||
|
if (titleSendEvent.isCancelled())
|
||||||
|
return;
|
||||||
|
|
||||||
|
try {
|
||||||
|
Object e;
|
||||||
|
Object chatTitle;
|
||||||
|
Object chatSubtitle;
|
||||||
|
Constructor subtitleConstructor;
|
||||||
|
Object titlePacket;
|
||||||
|
Object subtitlePacket;
|
||||||
|
|
||||||
|
if (title != null) {
|
||||||
|
title = ChatColor.translateAlternateColorCodes('&', title);
|
||||||
|
title = title.replaceAll("%player%", player.getDisplayName());
|
||||||
|
// Times packets
|
||||||
|
e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TIMES").get((Object) null);
|
||||||
|
chatTitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke((Object) null, new Object[]{"{\"text\":\"" + title + "\"}"});
|
||||||
|
subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(new Class[]{getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE});
|
||||||
|
titlePacket = subtitleConstructor.newInstance(new Object[]{e, chatTitle, fadeIn, stay, fadeOut});
|
||||||
|
sendPacket(player, titlePacket);
|
||||||
|
|
||||||
|
e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TITLE").get((Object) null);
|
||||||
|
chatTitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke((Object) null, new Object[]{"{\"text\":\"" + title + "\"}"});
|
||||||
|
subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(new Class[]{getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent")});
|
||||||
|
titlePacket = subtitleConstructor.newInstance(new Object[]{e, chatTitle});
|
||||||
|
sendPacket(player, titlePacket);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (subtitle != null) {
|
||||||
|
subtitle = ChatColor.translateAlternateColorCodes('&', subtitle);
|
||||||
|
subtitle = subtitle.replaceAll("%player%", player.getDisplayName());
|
||||||
|
// Times packets
|
||||||
|
e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TIMES").get((Object) null);
|
||||||
|
chatSubtitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke((Object) null, new Object[]{"{\"text\":\"" + title + "\"}"});
|
||||||
|
subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(new Class[]{getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE});
|
||||||
|
subtitlePacket = subtitleConstructor.newInstance(new Object[]{e, chatSubtitle, fadeIn, stay, fadeOut});
|
||||||
|
sendPacket(player, subtitlePacket);
|
||||||
|
|
||||||
|
e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("SUBTITLE").get((Object) null);
|
||||||
|
chatSubtitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke((Object) null, new Object[]{"{\"text\":\"" + subtitle + "\"}"});
|
||||||
|
subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(new Class[]{getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE});
|
||||||
|
subtitlePacket = subtitleConstructor.newInstance(new Object[]{e, chatSubtitle, fadeIn, stay, fadeOut});
|
||||||
|
sendPacket(player, subtitlePacket);
|
||||||
|
}
|
||||||
|
} catch (Exception var11) {
|
||||||
|
var11.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void clearTitle(Player player) {
|
||||||
|
sendTitle(player, 0, 0, 0, "", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sendTabTitle(Player player, String header, String footer) {
|
||||||
|
if (header == null) header = "";
|
||||||
|
header = ChatColor.translateAlternateColorCodes('&', header);
|
||||||
|
|
||||||
|
if (footer == null) footer = "";
|
||||||
|
footer = ChatColor.translateAlternateColorCodes('&', footer);
|
||||||
|
|
||||||
|
TabTitleSendEvent tabTitleSendEvent = new TabTitleSendEvent(player, header, footer);
|
||||||
|
Bukkit.getPluginManager().callEvent(tabTitleSendEvent);
|
||||||
|
if (tabTitleSendEvent.isCancelled())
|
||||||
|
return;
|
||||||
|
|
||||||
|
header = header.replaceAll("%player%", player.getDisplayName());
|
||||||
|
footer = footer.replaceAll("%player%", player.getDisplayName());
|
||||||
|
|
||||||
|
try {
|
||||||
|
Object tabHeader = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", String.class).invoke(null, "{\"text\":\"" + header + "\"}");
|
||||||
|
Object tabFooter = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", String.class).invoke(null, "{\"text\":\"" + footer + "\"}");
|
||||||
|
Constructor<?> titleConstructor = getNMSClass("PacketPlayOutPlayerListHeaderFooter").getConstructor();
|
||||||
|
Object packet = titleConstructor.newInstance();
|
||||||
|
try {
|
||||||
|
Field aField = packet.getClass().getDeclaredField("a");
|
||||||
|
aField.setAccessible(true);
|
||||||
|
aField.set(packet, tabHeader);
|
||||||
|
Field bField = packet.getClass().getDeclaredField("b");
|
||||||
|
bField.setAccessible(true);
|
||||||
|
bField.set(packet, tabFooter);
|
||||||
|
} catch (Exception e) {
|
||||||
|
Field aField = packet.getClass().getDeclaredField("header");
|
||||||
|
aField.setAccessible(true);
|
||||||
|
aField.set(packet, tabHeader);
|
||||||
|
Field bField = packet.getClass().getDeclaredField("footer");
|
||||||
|
bField.setAccessible(true);
|
||||||
|
bField.set(packet, tabFooter);
|
||||||
|
}
|
||||||
|
sendPacket(player, packet);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
57
src/main/java/pb/ajneb97/lib/titleapi/TitleSendEvent.java
Normal file
57
src/main/java/pb/ajneb97/lib/titleapi/TitleSendEvent.java
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
package pb.ajneb97.lib.titleapi;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
|
||||||
|
public class TitleSendEvent extends Event {
|
||||||
|
private static final HandlerList handlers = new HandlerList();
|
||||||
|
private final Player player;
|
||||||
|
private String title;
|
||||||
|
private String subtitle;
|
||||||
|
private boolean cancelled = false;
|
||||||
|
|
||||||
|
public TitleSendEvent(Player player, String title, String subtitle) {
|
||||||
|
this.player = player;
|
||||||
|
this.title = title;
|
||||||
|
this.subtitle = subtitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HandlerList getHandlers() {
|
||||||
|
return handlers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HandlerList getHandlerList() {
|
||||||
|
return handlers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Player getPlayer() {
|
||||||
|
return player;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTitle(String title) {
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSubtitle() {
|
||||||
|
return subtitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSubtitle(String subtitle) {
|
||||||
|
this.subtitle = subtitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isCancelled() {
|
||||||
|
return cancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCancelled(boolean cancelled) {
|
||||||
|
this.cancelled = cancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user