mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-22 21:26:45 +01:00
Remove unused title classes
This commit is contained in:
parent
adefe2eeef
commit
84911c1a8c
@ -1,127 +0,0 @@
|
|||||||
package com.github.intellectualsites.plotsquared.bukkit.titles;
|
|
||||||
|
|
||||||
import com.github.intellectualsites.plotsquared.bukkit.chat.Reflection;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
|
|
||||||
public class DefaultTitleManager extends TitleManager {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new 1.8 title.
|
|
||||||
*
|
|
||||||
* @param title Title text
|
|
||||||
* @param subtitle Subtitle text
|
|
||||||
* @param fadeInTime Fade in time
|
|
||||||
* @param stayTime Stay on screen time
|
|
||||||
* @param fadeOutTime Fade out time
|
|
||||||
*/
|
|
||||||
DefaultTitleManager(String title, String subtitle, int fadeInTime, int stayTime,
|
|
||||||
int fadeOutTime) {
|
|
||||||
super(title, subtitle, fadeInTime, stayTime, fadeOutTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Load spigot and NMS classes.
|
|
||||||
*/
|
|
||||||
@Override void loadClasses() {
|
|
||||||
this.packetTitle = Reflection.getNMSClass("PacketPlayOutTitle");
|
|
||||||
this.packetActions = Reflection.getNMSClass("EnumTitleAction");
|
|
||||||
this.chatBaseComponent = Reflection.getNMSClass("IChatBaseComponent");
|
|
||||||
this.nmsChatSerializer = Reflection.getNMSClass("ChatSerializer");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override public void send(Player player)
|
|
||||||
throws IllegalArgumentException, ReflectiveOperationException, SecurityException {
|
|
||||||
if (this.packetTitle != null) {
|
|
||||||
// First reset previous settings
|
|
||||||
resetTitle(player);
|
|
||||||
// Send timings first
|
|
||||||
Object handle = getHandle(player);
|
|
||||||
Object connection = getField(handle.getClass(), "playerConnection").get(handle);
|
|
||||||
Object[] actions = this.packetActions.getEnumConstants();
|
|
||||||
Method sendPacket = getMethod(connection.getClass(), "sendPacket");
|
|
||||||
Object packet = this.packetTitle
|
|
||||||
.getConstructor(this.packetActions, this.chatBaseComponent, Integer.TYPE, Integer.TYPE,
|
|
||||||
Integer.TYPE).newInstance(actions[2], null, this.fadeInTime * (this.ticks ? 1 : 20),
|
|
||||||
this.stayTime * (this.ticks ? 1 : 20), this.fadeOutTime * (this.ticks ? 1 : 20));
|
|
||||||
// Send if set
|
|
||||||
if (this.fadeInTime != -1 && this.fadeOutTime != -1 && this.stayTime != -1) {
|
|
||||||
sendPacket.invoke(connection, packet);
|
|
||||||
}
|
|
||||||
// Send title
|
|
||||||
Object serialized = getMethod(this.nmsChatSerializer, "a", String.class).invoke(null,
|
|
||||||
"{text:\"" + ChatColor.translateAlternateColorCodes('&', this.getTitle()) + "\",color:"
|
|
||||||
+ this.titleColor.name().toLowerCase() + '}');
|
|
||||||
packet = this.packetTitle.getConstructor(this.packetActions, this.chatBaseComponent)
|
|
||||||
.newInstance(actions[0], serialized);
|
|
||||||
sendPacket.invoke(connection, packet);
|
|
||||||
if (!this.getSubtitle().isEmpty()) {
|
|
||||||
// Send subtitle if present
|
|
||||||
serialized = getMethod(this.nmsChatSerializer, "a", String.class).invoke(null,
|
|
||||||
"{text:\"" + ChatColor.translateAlternateColorCodes('&', this.getSubtitle())
|
|
||||||
+ "\",color:" + this.subtitleColor.name().toLowerCase() + '}');
|
|
||||||
packet = this.packetTitle.getConstructor(this.packetActions, this.chatBaseComponent)
|
|
||||||
.newInstance(actions[1], serialized);
|
|
||||||
sendPacket.invoke(connection, packet);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override public void clearTitle(Player player)
|
|
||||||
throws IllegalArgumentException, ReflectiveOperationException, SecurityException {
|
|
||||||
// Send timings first
|
|
||||||
Object handle = getHandle(player);
|
|
||||||
Object connection = getField(handle.getClass(), "playerConnection").get(handle);
|
|
||||||
Object[] actions = this.packetActions.getEnumConstants();
|
|
||||||
Method sendPacket = getMethod(connection.getClass(), "sendPacket");
|
|
||||||
Object packet = this.packetTitle.getConstructor(this.packetActions, this.chatBaseComponent)
|
|
||||||
.newInstance(actions[3], null);
|
|
||||||
sendPacket.invoke(connection, packet);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reset the title settings.
|
|
||||||
*
|
|
||||||
* @param player Player
|
|
||||||
* @throws SecurityException
|
|
||||||
* @throws ReflectiveOperationException
|
|
||||||
* @throws SecurityException
|
|
||||||
*/
|
|
||||||
@Override public void resetTitle(Player player)
|
|
||||||
throws IllegalArgumentException, ReflectiveOperationException, SecurityException {
|
|
||||||
// Send timings first
|
|
||||||
Object handle = getHandle(player);
|
|
||||||
Object connection = getField(handle.getClass(), "playerConnection").get(handle);
|
|
||||||
Object[] actions = this.packetActions.getEnumConstants();
|
|
||||||
Method sendPacket = getMethod(connection.getClass(), "sendPacket");
|
|
||||||
Object packet = this.packetTitle.getConstructor(this.packetActions, this.chatBaseComponent)
|
|
||||||
.newInstance(actions[4], null);
|
|
||||||
sendPacket.invoke(connection, packet);
|
|
||||||
}
|
|
||||||
|
|
||||||
Field getField(Class<?> clazz, String name) {
|
|
||||||
try {
|
|
||||||
Field field = clazz.getDeclaredField(name);
|
|
||||||
field.setAccessible(true);
|
|
||||||
return field;
|
|
||||||
} catch (NoSuchFieldException | SecurityException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Method getMethod(Class<?> clazz, String name, Class<?>... args) {
|
|
||||||
for (Method m : clazz.getMethods()) {
|
|
||||||
if (m.getName().equals(name) && (args.length == 0 || classListEqual(args,
|
|
||||||
m.getParameterTypes()))) {
|
|
||||||
m.setAccessible(true);
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,256 +0,0 @@
|
|||||||
package com.github.intellectualsites.plotsquared.bukkit.titles;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public abstract class TitleManager {
|
|
||||||
|
|
||||||
private static final Map<Class<?>, Class<?>> CORRESPONDING_TYPES = new HashMap<>();
|
|
||||||
/* Title packet */ Class<?> packetTitle;
|
|
||||||
/* Title packet actions ENUM */ Class<?> packetActions;
|
|
||||||
/* Chat serializer */ Class<?> nmsChatSerializer;
|
|
||||||
Class<?> chatBaseComponent;
|
|
||||||
ChatColor titleColor = ChatColor.WHITE;
|
|
||||||
ChatColor subtitleColor = ChatColor.WHITE;
|
|
||||||
/* Title timings */ int fadeInTime = -1;
|
|
||||||
int stayTime = -1;
|
|
||||||
int fadeOutTime = -1;
|
|
||||||
boolean ticks = false;
|
|
||||||
/* Title text and color */
|
|
||||||
private String title;
|
|
||||||
/* Subtitle text and color */
|
|
||||||
private String subtitle;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new 1.8 title.
|
|
||||||
*
|
|
||||||
* @param title Title text
|
|
||||||
* @param subtitle Subtitle text
|
|
||||||
* @param fadeInTime Fade in time
|
|
||||||
* @param stayTime Stay on screen time
|
|
||||||
* @param fadeOutTime Fade out time
|
|
||||||
*/
|
|
||||||
TitleManager(String title, String subtitle, int fadeInTime, int stayTime, int fadeOutTime) {
|
|
||||||
this.title = title;
|
|
||||||
this.subtitle = subtitle;
|
|
||||||
this.fadeInTime = fadeInTime;
|
|
||||||
this.stayTime = stayTime;
|
|
||||||
this.fadeOutTime = fadeOutTime;
|
|
||||||
loadClasses();
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract void loadClasses();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets title text.
|
|
||||||
*
|
|
||||||
* @return Title text
|
|
||||||
*/
|
|
||||||
public final String getTitle() {
|
|
||||||
return this.title;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the text for the title.
|
|
||||||
*
|
|
||||||
* @param title Title
|
|
||||||
*/
|
|
||||||
public final void setTitle(String title) {
|
|
||||||
this.title = title;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the subtitle text.
|
|
||||||
*
|
|
||||||
* @return Subtitle text
|
|
||||||
*/
|
|
||||||
public final String getSubtitle() {
|
|
||||||
return this.subtitle;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets subtitle text.
|
|
||||||
*
|
|
||||||
* @param subtitle Subtitle text
|
|
||||||
*/
|
|
||||||
public final void setSubtitle(String subtitle) {
|
|
||||||
this.subtitle = subtitle;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the title color.
|
|
||||||
*
|
|
||||||
* @param color Chat color
|
|
||||||
*/
|
|
||||||
public final void setTitleColor(ChatColor color) {
|
|
||||||
this.titleColor = color;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the subtitle color.
|
|
||||||
*
|
|
||||||
* @param color Chat color
|
|
||||||
*/
|
|
||||||
public final void setSubtitleColor(ChatColor color) {
|
|
||||||
this.subtitleColor = color;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets title fade in time.
|
|
||||||
*
|
|
||||||
* @param time Time
|
|
||||||
*/
|
|
||||||
public final void setFadeInTime(int time) {
|
|
||||||
this.fadeInTime = time;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets title fade out time.
|
|
||||||
*
|
|
||||||
* @param time Time
|
|
||||||
*/
|
|
||||||
public final void setFadeOutTime(int time) {
|
|
||||||
this.fadeOutTime = time;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets title stay time.
|
|
||||||
*
|
|
||||||
* @param time Time
|
|
||||||
*/
|
|
||||||
public final void setStayTime(int time) {
|
|
||||||
this.stayTime = time;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets timings to ticks.
|
|
||||||
*/
|
|
||||||
public final void setTimingsToTicks() {
|
|
||||||
this.ticks = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets timings to seconds.
|
|
||||||
*/
|
|
||||||
public final void setTimingsToSeconds() {
|
|
||||||
this.ticks = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends the title to a player.
|
|
||||||
*
|
|
||||||
* @param player Player
|
|
||||||
* @throws IllegalArgumentException
|
|
||||||
* @throws ReflectiveOperationException
|
|
||||||
* @throws SecurityException
|
|
||||||
*/
|
|
||||||
public abstract void send(Player player)
|
|
||||||
throws IllegalArgumentException, ReflectiveOperationException, SecurityException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Broadcasts the title to all players.
|
|
||||||
*
|
|
||||||
* @throws Exception
|
|
||||||
*/
|
|
||||||
public final void broadcast() throws Exception {
|
|
||||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
|
||||||
send(player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clears the title.
|
|
||||||
*
|
|
||||||
* @param player Player
|
|
||||||
* @throws IllegalArgumentException
|
|
||||||
* @throws ReflectiveOperationException
|
|
||||||
* @throws SecurityException
|
|
||||||
*/
|
|
||||||
public abstract void clearTitle(Player player)
|
|
||||||
throws IllegalArgumentException, ReflectiveOperationException, SecurityException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Resets the title settings.
|
|
||||||
*
|
|
||||||
* @param player Player
|
|
||||||
* @throws IllegalArgumentException
|
|
||||||
* @throws ReflectiveOperationException
|
|
||||||
* @throws SecurityException
|
|
||||||
*/
|
|
||||||
public abstract void resetTitle(Player player)
|
|
||||||
throws IllegalArgumentException, ReflectiveOperationException, SecurityException;
|
|
||||||
|
|
||||||
private Class<?> getPrimitiveType(Class<?> clazz) {
|
|
||||||
if (CORRESPONDING_TYPES.containsKey(clazz)) {
|
|
||||||
return CORRESPONDING_TYPES.get(clazz);
|
|
||||||
} else {
|
|
||||||
return clazz;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Class<?>[] toPrimitiveTypeArray(Class<?>[] classes) {
|
|
||||||
int a;
|
|
||||||
if (classes != null) {
|
|
||||||
a = classes.length;
|
|
||||||
} else {
|
|
||||||
a = 0;
|
|
||||||
}
|
|
||||||
Class<?>[] types = new Class<?>[a];
|
|
||||||
for (int i = 0; i < a; i++) {
|
|
||||||
types[i] = getPrimitiveType(classes[i]);
|
|
||||||
}
|
|
||||||
return types;
|
|
||||||
}
|
|
||||||
|
|
||||||
final Object getHandle(Object obj) {
|
|
||||||
try {
|
|
||||||
return getMethod("getHandle", obj.getClass()).invoke(obj);
|
|
||||||
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
final Method getMethod(String name, Class<?> clazz, Class<?>... paramTypes) {
|
|
||||||
Class<?>[] t = toPrimitiveTypeArray(paramTypes);
|
|
||||||
for (Method m : clazz.getMethods()) {
|
|
||||||
Class<?>[] types = toPrimitiveTypeArray(m.getParameterTypes());
|
|
||||||
if (m.getName().equals(name) && equalsTypeArray(types, t)) {
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean equalsTypeArray(Class<?>[] a, Class<?>[] o) {
|
|
||||||
if (a.length != o.length) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
for (int i = 0; i < a.length; i++) {
|
|
||||||
if (!a[i].equals(o[i]) && !a[i].isAssignableFrom(o[i])) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean classListEqual(Class<?>[] l1, Class<?>[] l2) {
|
|
||||||
if (l1.length != l2.length) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
boolean equal = true;
|
|
||||||
for (int i = 0; i < l1.length; i++) {
|
|
||||||
if (l1[i] != l2[i]) {
|
|
||||||
equal = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return equal;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,505 +0,0 @@
|
|||||||
package com.github.intellectualsites.plotsquared.bukkit.titles;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.stream.IntStream;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Minecraft 1.8 Title
|
|
||||||
* For 1.11
|
|
||||||
*
|
|
||||||
* @author Maxim Van de Wynckel
|
|
||||||
* @version 1.1.0
|
|
||||||
*/
|
|
||||||
public class TitleManager_1_11 {
|
|
||||||
private static final Map<Class<?>, Class<?>> CORRESPONDING_TYPES = new HashMap<>();
|
|
||||||
/* Title packet */
|
|
||||||
private static Class<?> packetTitle;
|
|
||||||
/* Title packet actions ENUM */
|
|
||||||
private static Class<?> packetActions;
|
|
||||||
/* Chat serializer */
|
|
||||||
private static Class<?> nmsChatSerializer;
|
|
||||||
private static Class<?> chatBaseComponent;
|
|
||||||
/* NMS player and connection */
|
|
||||||
private static Class<?> nmsPlayer;
|
|
||||||
private static Class<?> nmsPlayerConnection;
|
|
||||||
private static Field playerConnection;
|
|
||||||
private static Method sendPacket;
|
|
||||||
private static Class<?> obcPlayer;
|
|
||||||
private static Method methodPlayerGetHandle;
|
|
||||||
/* Title text and color */
|
|
||||||
private String title = "";
|
|
||||||
private ChatColor titleColor = ChatColor.WHITE;
|
|
||||||
/* Subtitle text and color */
|
|
||||||
private String subtitle = "";
|
|
||||||
private ChatColor subtitleColor = ChatColor.WHITE;
|
|
||||||
/* Title timings */
|
|
||||||
private int fadeInTime = -1;
|
|
||||||
private int stayTime = -1;
|
|
||||||
private int fadeOutTime = -1;
|
|
||||||
private boolean ticks = false;
|
|
||||||
|
|
||||||
public TitleManager_1_11() {
|
|
||||||
loadClasses();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new 1.8 title.
|
|
||||||
*
|
|
||||||
* @param title Title
|
|
||||||
*/
|
|
||||||
public TitleManager_1_11(String title) {
|
|
||||||
this.title = title;
|
|
||||||
loadClasses();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new 1.8 title
|
|
||||||
*
|
|
||||||
* @param title Title text
|
|
||||||
* @param subtitle Subtitle text
|
|
||||||
*/
|
|
||||||
public TitleManager_1_11(String title, String subtitle) {
|
|
||||||
this.title = title;
|
|
||||||
this.subtitle = subtitle;
|
|
||||||
loadClasses();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copy 1.8 title.
|
|
||||||
*
|
|
||||||
* @param title Title
|
|
||||||
*/
|
|
||||||
public TitleManager_1_11(TitleManager_1_11 title) {
|
|
||||||
// Copy title
|
|
||||||
this.title = title.getTitle();
|
|
||||||
this.subtitle = title.getSubtitle();
|
|
||||||
this.titleColor = title.getTitleColor();
|
|
||||||
this.subtitleColor = title.getSubtitleColor();
|
|
||||||
this.fadeInTime = title.getFadeInTime();
|
|
||||||
this.fadeOutTime = title.getFadeOutTime();
|
|
||||||
this.stayTime = title.getStayTime();
|
|
||||||
this.ticks = title.isTicks();
|
|
||||||
loadClasses();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new 1.8 title.
|
|
||||||
*
|
|
||||||
* @param title Title text
|
|
||||||
* @param subtitle Subtitle text
|
|
||||||
* @param fadeInTime Fade in time
|
|
||||||
* @param stayTime Stay on screen time
|
|
||||||
* @param fadeOutTime Fade out time
|
|
||||||
*/
|
|
||||||
public TitleManager_1_11(String title, String subtitle, int fadeInTime, int stayTime,
|
|
||||||
int fadeOutTime) {
|
|
||||||
this.title = title;
|
|
||||||
this.subtitle = subtitle;
|
|
||||||
this.fadeInTime = fadeInTime;
|
|
||||||
this.stayTime = stayTime;
|
|
||||||
this.fadeOutTime = fadeOutTime;
|
|
||||||
loadClasses();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean equalsTypeArray(Class<?>[] a, Class<?>[] o) {
|
|
||||||
if (a.length != o.length) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return IntStream.range(0, a.length)
|
|
||||||
.noneMatch(i -> !a[i].equals(o[i]) && !a[i].isAssignableFrom(o[i]));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Load spigot and NMS classes.
|
|
||||||
*/
|
|
||||||
private void loadClasses() {
|
|
||||||
if (packetTitle == null) {
|
|
||||||
packetTitle = getNMSClass("PacketPlayOutTitle");
|
|
||||||
packetActions = getNMSClass("PacketPlayOutTitle$EnumTitleAction");
|
|
||||||
chatBaseComponent = getNMSClass("IChatBaseComponent");
|
|
||||||
nmsChatSerializer = getNMSClass("ChatComponentText");
|
|
||||||
nmsPlayer = getNMSClass("EntityPlayer");
|
|
||||||
nmsPlayerConnection = getNMSClass("PlayerConnection");
|
|
||||||
playerConnection = getField(nmsPlayer, "playerConnection");
|
|
||||||
sendPacket = getMethod(nmsPlayerConnection, "sendPacket");
|
|
||||||
obcPlayer = getOBCClass("entity.CraftPlayer");
|
|
||||||
methodPlayerGetHandle = getMethod("getHandle", obcPlayer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the title text.
|
|
||||||
*
|
|
||||||
* @return Title text
|
|
||||||
*/
|
|
||||||
public String getTitle() {
|
|
||||||
return this.title;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the title text.
|
|
||||||
*
|
|
||||||
* @param title Title
|
|
||||||
*/
|
|
||||||
public void setTitle(String title) {
|
|
||||||
this.title = title;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the subtitle text.
|
|
||||||
*
|
|
||||||
* @return Subtitle text
|
|
||||||
*/
|
|
||||||
public String getSubtitle() {
|
|
||||||
return this.subtitle;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the subtitle text.
|
|
||||||
*
|
|
||||||
* @param subtitle Subtitle text
|
|
||||||
*/
|
|
||||||
public void setSubtitle(String subtitle) {
|
|
||||||
this.subtitle = subtitle;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets timings to ticks.
|
|
||||||
*/
|
|
||||||
public void setTimingsToTicks() {
|
|
||||||
ticks = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets timings to seconds.
|
|
||||||
*/
|
|
||||||
public void setTimingsToSeconds() {
|
|
||||||
ticks = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends the title to a player.
|
|
||||||
*
|
|
||||||
* @param player Player
|
|
||||||
*/
|
|
||||||
public void send(Player player) {
|
|
||||||
if (packetTitle != null) {
|
|
||||||
// First reset previous settings
|
|
||||||
resetTitle(player);
|
|
||||||
try {
|
|
||||||
// Send timings first
|
|
||||||
Object handle = getHandle(player);
|
|
||||||
Object connection = playerConnection.get(handle);
|
|
||||||
Object[] actions = packetActions.getEnumConstants();
|
|
||||||
Object packet = packetTitle
|
|
||||||
.getConstructor(packetActions, chatBaseComponent, Integer.TYPE, Integer.TYPE,
|
|
||||||
Integer.TYPE).newInstance(actions[3], null, fadeInTime * (ticks ? 1 : 20),
|
|
||||||
stayTime * (ticks ? 1 : 20), fadeOutTime * (ticks ? 1 : 20));
|
|
||||||
// Send if set
|
|
||||||
if (fadeInTime != -1 && fadeOutTime != -1 && stayTime != -1) {
|
|
||||||
sendPacket.invoke(connection, packet);
|
|
||||||
}
|
|
||||||
|
|
||||||
Object serialized;
|
|
||||||
if (!subtitle.equals("")) {
|
|
||||||
// Send subtitle if present
|
|
||||||
serialized = nmsChatSerializer.getConstructor(String.class)
|
|
||||||
.newInstance(subtitleColor + ChatColor.translateAlternateColorCodes('&', subtitle));
|
|
||||||
packet = packetTitle.getConstructor(packetActions, chatBaseComponent)
|
|
||||||
.newInstance(actions[1], serialized);
|
|
||||||
sendPacket.invoke(connection, packet);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send title
|
|
||||||
serialized = nmsChatSerializer.getConstructor(String.class)
|
|
||||||
.newInstance(titleColor + ChatColor.translateAlternateColorCodes('&', title));
|
|
||||||
packet = packetTitle.getConstructor(packetActions, chatBaseComponent)
|
|
||||||
.newInstance(actions[0], serialized);
|
|
||||||
sendPacket.invoke(connection, packet);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateTimes(Player player) {
|
|
||||||
if (TitleManager_1_11.packetTitle != null) {
|
|
||||||
try {
|
|
||||||
Object handle = getHandle(player);
|
|
||||||
Object connection = playerConnection.get(handle);
|
|
||||||
Object[] actions = TitleManager_1_11.packetActions.getEnumConstants();
|
|
||||||
Object packet = TitleManager_1_11.packetTitle.getConstructor(
|
|
||||||
new Class[] {TitleManager_1_11.packetActions, chatBaseComponent, Integer.TYPE,
|
|
||||||
Integer.TYPE, Integer.TYPE})
|
|
||||||
.newInstance(actions[3], null, this.fadeInTime * (this.ticks ? 1 : 20),
|
|
||||||
this.stayTime * (this.ticks ? 1 : 20), this.fadeOutTime * (this.ticks ? 1 : 20));
|
|
||||||
if ((this.fadeInTime != -1) && (this.fadeOutTime != -1) && (this.stayTime != -1)) {
|
|
||||||
sendPacket.invoke(connection, packet);
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateTitle(Player player) {
|
|
||||||
if (TitleManager_1_11.packetTitle != null) {
|
|
||||||
try {
|
|
||||||
Object handle = getHandle(player);
|
|
||||||
Object connection = getField(handle.getClass(), "playerConnection").get(handle);
|
|
||||||
Object[] actions = TitleManager_1_11.packetActions.getEnumConstants();
|
|
||||||
Method sendPacket = getMethod(connection.getClass(), "sendPacket");
|
|
||||||
Object serialized = nmsChatSerializer.getConstructor(String.class)
|
|
||||||
.newInstance(titleColor + ChatColor.translateAlternateColorCodes('&', this.title));
|
|
||||||
Object packet = TitleManager_1_11.packetTitle
|
|
||||||
.getConstructor(new Class[] {TitleManager_1_11.packetActions, chatBaseComponent})
|
|
||||||
.newInstance(actions[0], serialized);
|
|
||||||
sendPacket.invoke(connection, packet);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateSubtitle(Player player) {
|
|
||||||
if (TitleManager_1_11.packetTitle != null) {
|
|
||||||
try {
|
|
||||||
Object handle = getHandle(player);
|
|
||||||
Object connection = playerConnection.get(handle);
|
|
||||||
Object[] actions = TitleManager_1_11.packetActions.getEnumConstants();
|
|
||||||
Object serialized = nmsChatSerializer.getConstructor(String.class).newInstance(
|
|
||||||
subtitleColor + ChatColor.translateAlternateColorCodes('&', this.subtitle));
|
|
||||||
Object packet = TitleManager_1_11.packetTitle
|
|
||||||
.getConstructor(new Class[] {TitleManager_1_11.packetActions, chatBaseComponent})
|
|
||||||
.newInstance(actions[1], serialized);
|
|
||||||
sendPacket.invoke(connection, packet);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Broadcasts the title to all players.
|
|
||||||
*/
|
|
||||||
public void broadcast() {
|
|
||||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
|
||||||
send(p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clears the title from the players screen.
|
|
||||||
*
|
|
||||||
* @param player Player
|
|
||||||
*/
|
|
||||||
public void clearTitle(Player player) {
|
|
||||||
try {
|
|
||||||
// Send timings first
|
|
||||||
Object handle = getHandle(player);
|
|
||||||
Object connection = playerConnection.get(handle);
|
|
||||||
Object[] actions = packetActions.getEnumConstants();
|
|
||||||
Object packet = packetTitle.getConstructor(packetActions, chatBaseComponent)
|
|
||||||
.newInstance(actions[4], null);
|
|
||||||
sendPacket.invoke(connection, packet);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Resets the title settings.
|
|
||||||
*
|
|
||||||
* @param player Player
|
|
||||||
*/
|
|
||||||
public void resetTitle(Player player) {
|
|
||||||
try {
|
|
||||||
// Send timings first
|
|
||||||
Object handle = getHandle(player);
|
|
||||||
Object connection = playerConnection.get(handle);
|
|
||||||
Object[] actions = packetActions.getEnumConstants();
|
|
||||||
Object packet = packetTitle.getConstructor(packetActions, chatBaseComponent)
|
|
||||||
.newInstance(actions[5], null);
|
|
||||||
sendPacket.invoke(connection, packet);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Class<?> getPrimitiveType(Class<?> clazz) {
|
|
||||||
return CORRESPONDING_TYPES.containsKey(clazz) ? CORRESPONDING_TYPES.get(clazz) : clazz;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Class<?>[] toPrimitiveTypeArray(Class<?>[] classes) {
|
|
||||||
int a = classes != null ? classes.length : 0;
|
|
||||||
Class<?>[] types = new Class<?>[a];
|
|
||||||
for (int i = 0; i < a; i++) {
|
|
||||||
types[i] = getPrimitiveType(classes[i]);
|
|
||||||
}
|
|
||||||
return types;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Object getHandle(Player player) {
|
|
||||||
try {
|
|
||||||
return methodPlayerGetHandle.invoke(player);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Method getMethod(String name, Class<?> clazz, Class<?>... paramTypes) {
|
|
||||||
Class<?>[] t = toPrimitiveTypeArray(paramTypes);
|
|
||||||
for (Method m : clazz.getMethods()) {
|
|
||||||
Class<?>[] types = toPrimitiveTypeArray(m.getParameterTypes());
|
|
||||||
if (m.getName().equals(name) && equalsTypeArray(types, t)) {
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getVersion() {
|
|
||||||
String name = Bukkit.getServer().getClass().getPackage().getName();
|
|
||||||
return name.substring(name.lastIndexOf('.') + 1) + ".";
|
|
||||||
}
|
|
||||||
|
|
||||||
private Class<?> getNMSClass(String className) {
|
|
||||||
String fullName = "net.minecraft.server." + getVersion() + className;
|
|
||||||
Class<?> clazz = null;
|
|
||||||
try {
|
|
||||||
clazz = Class.forName(fullName);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return clazz;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Class<?> getOBCClass(String className) {
|
|
||||||
String fullName = "org.bukkit.craftbukkit." + getVersion() + className;
|
|
||||||
Class<?> clazz = null;
|
|
||||||
try {
|
|
||||||
clazz = Class.forName(fullName);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return clazz;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Field getField(Class<?> clazz, String name) {
|
|
||||||
try {
|
|
||||||
Field field = clazz.getDeclaredField(name);
|
|
||||||
field.setAccessible(true);
|
|
||||||
return field;
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Method getMethod(Class<?> clazz, String name, Class<?>... args) {
|
|
||||||
for (Method m : clazz.getMethods()) {
|
|
||||||
if (m.getName().equals(name) && (args.length == 0 || ClassListEqual(args,
|
|
||||||
m.getParameterTypes()))) {
|
|
||||||
m.setAccessible(true);
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean ClassListEqual(Class<?>[] l1, Class<?>[] l2) {
|
|
||||||
if (l1.length != l2.length) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
boolean equal = true;
|
|
||||||
for (int i = 0; i < l1.length; i++) {
|
|
||||||
if (l1[i] != l2[i]) {
|
|
||||||
equal = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return equal;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChatColor getTitleColor() {
|
|
||||||
return titleColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the title color.
|
|
||||||
*
|
|
||||||
* @param color Chat color
|
|
||||||
*/
|
|
||||||
public void setTitleColor(ChatColor color) {
|
|
||||||
this.titleColor = color;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChatColor getSubtitleColor() {
|
|
||||||
return subtitleColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the subtitle color.
|
|
||||||
*
|
|
||||||
* @param color Chat color
|
|
||||||
*/
|
|
||||||
public void setSubtitleColor(ChatColor color) {
|
|
||||||
this.subtitleColor = color;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getFadeInTime() {
|
|
||||||
return fadeInTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the fade in time for the title.
|
|
||||||
*
|
|
||||||
* @param time Time
|
|
||||||
*/
|
|
||||||
public void setFadeInTime(int time) {
|
|
||||||
this.fadeInTime = time;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the fade out time for the title.
|
|
||||||
*
|
|
||||||
* @return the time to fade out
|
|
||||||
*/
|
|
||||||
public int getFadeOutTime() {
|
|
||||||
return fadeOutTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the fade out time for the title.
|
|
||||||
*
|
|
||||||
* @param time fade-out time
|
|
||||||
*/
|
|
||||||
public void setFadeOutTime(int time) {
|
|
||||||
this.fadeOutTime = time;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getStayTime() {
|
|
||||||
return stayTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the title stay time.
|
|
||||||
*
|
|
||||||
* @param time Time
|
|
||||||
*/
|
|
||||||
public void setStayTime(int time) {
|
|
||||||
this.stayTime = time;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isTicks() {
|
|
||||||
return ticks;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user