diff --git a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/titles/DefaultTitleManager.java b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/titles/DefaultTitleManager.java deleted file mode 100644 index 10eef5753..000000000 --- a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/titles/DefaultTitleManager.java +++ /dev/null @@ -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; - } - -} diff --git a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/titles/TitleManager.java b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/titles/TitleManager.java deleted file mode 100644 index 4b1d4349f..000000000 --- a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/titles/TitleManager.java +++ /dev/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> 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; - } -} diff --git a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/titles/TitleManager_1_11.java b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/titles/TitleManager_1_11.java deleted file mode 100644 index 627a48157..000000000 --- a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/titles/TitleManager_1_11.java +++ /dev/null @@ -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> 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; - } -}