diff --git a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/BukkitMain.java b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/BukkitMain.java index 3398e18ad..12dd070fc 100644 --- a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/BukkitMain.java +++ b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/BukkitMain.java @@ -2,7 +2,7 @@ package com.github.intellectualsites.plotsquared.bukkit; import com.github.intellectualsites.plotsquared.bukkit.generator.BukkitPlotGenerator; import com.github.intellectualsites.plotsquared.bukkit.listeners.*; -import com.github.intellectualsites.plotsquared.bukkit.titles.DefaultTitle_111; +import com.github.intellectualsites.plotsquared.bukkit.titles.DefaultTitle; import com.github.intellectualsites.plotsquared.bukkit.util.*; import com.github.intellectualsites.plotsquared.bukkit.util.block.BukkitLocalQueue; import com.github.intellectualsites.plotsquared.bukkit.uuid.*; @@ -727,7 +727,7 @@ public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain + " &c[WARN] Titles are disabled - please update your version of Bukkit to support this feature."); Settings.TITLES = false; } else { - AbstractTitle.TITLE_CLASS = new DefaultTitle_111(); + AbstractTitle.TITLE_CLASS = new DefaultTitle(); if (wrapper instanceof DefaultUUIDWrapper || wrapper.getClass() == OfflineUUIDWrapper.class && !Bukkit.getOnlineMode()) { Settings.UUID.NATIVE_UUID_PROVIDER = true; diff --git a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/listeners/WorldEvents.java b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/listeners/WorldEvents.java index 98d6c0f5a..afa821975 100644 --- a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/listeners/WorldEvents.java +++ b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/listeners/WorldEvents.java @@ -12,25 +12,26 @@ import org.bukkit.event.Listener; import org.bukkit.event.world.WorldInitEvent; import org.bukkit.generator.ChunkGenerator; -@SuppressWarnings("unused") public class WorldEvents implements Listener { +@SuppressWarnings("unused") +public class WorldEvents implements Listener { - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onWorldInit(WorldInitEvent event) { - World world = event.getWorld(); - String name = world.getName(); - PlotAreaManager manager = PlotSquared.get().getPlotAreaManager(); - if (manager instanceof SinglePlotAreaManager) { - SinglePlotAreaManager single = (SinglePlotAreaManager) manager; - if (single.isWorld(name)) { - world.setKeepSpawnInMemory(false); - return; - } - } - ChunkGenerator gen = world.getGenerator(); - if (gen instanceof GeneratorWrapper) { - PlotSquared.get().loadWorld(name, (GeneratorWrapper) gen); - } else { - PlotSquared.get().loadWorld(name, new BukkitPlotGenerator(name, gen)); - } + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onWorldInit(WorldInitEvent event) { + World world = event.getWorld(); + String name = world.getName(); + PlotAreaManager manager = PlotSquared.get().getPlotAreaManager(); + if (manager instanceof SinglePlotAreaManager) { + SinglePlotAreaManager single = (SinglePlotAreaManager) manager; + if (single.isWorld(name)) { + world.setKeepSpawnInMemory(false); + return; + } } + ChunkGenerator gen = world.getGenerator(); + if (gen instanceof GeneratorWrapper) { + PlotSquared.get().loadWorld(name, (GeneratorWrapper) gen); + } else { + PlotSquared.get().loadWorld(name, new BukkitPlotGenerator(name, gen)); + } + } } diff --git a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/object/entity/ReplicatingEntityWrapper.java b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/object/entity/ReplicatingEntityWrapper.java index b569e6577..c7e0e04f6 100644 --- a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/object/entity/ReplicatingEntityWrapper.java +++ b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/object/entity/ReplicatingEntityWrapper.java @@ -282,6 +282,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper { this.dataByte = (byte) 0; } storeLiving((LivingEntity) entity); + return; // END LIVING // default: PlotSquared.debug("&cCOULD NOT IDENTIFY ENTITY: " + entity.getType()); @@ -317,8 +318,9 @@ public final class ReplicatingEntityWrapper extends EntityWrapper { if (this.lived.leashed) { // TODO leashes // World world = entity.getWorld(); - // Entity leash = world.spawnEntity(new Location(world, Math.floor(x) + lived.leashX, Math.floor(y) + lived.leashY, Math - // .floor(z) + lived.leashZ), EntityType.LEASH_HITCH); + // Entity leash = world.spawnEntity(new Location(world, Math.floor(x) + + // lived.leashX, Math.floor(y) + lived.leashY, Math.floor(z) + lived.leashZ), + // EntityType.LEASH_HITCH); // entity.setLeashHolder(leash); } } @@ -343,7 +345,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper { } } - public void storeLiving(LivingEntity lived) { + private void storeLiving(LivingEntity lived) { this.lived = new LivingEntityStats(); this.lived.potions = lived.getActivePotionEffects(); this.lived.loot = lived.getCanPickupItems(); diff --git a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/titles/DefaultTitle.java b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/titles/DefaultTitle.java new file mode 100644 index 000000000..626525ccf --- /dev/null +++ b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/titles/DefaultTitle.java @@ -0,0 +1,19 @@ +package com.github.intellectualsites.plotsquared.bukkit.titles; + +import com.github.intellectualsites.plotsquared.bukkit.object.BukkitPlayer; +import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer; +import com.github.intellectualsites.plotsquared.plot.util.AbstractTitle; +import org.bukkit.entity.Player; + +public class DefaultTitle extends AbstractTitle { + + @Override + public void sendTitle(PlotPlayer player, String head, String sub, int in, int delay, int out) { + try { + final Player playerObj = ((BukkitPlayer) player).player; + TitleManager_1_11 title = new TitleManager_1_11(head, sub, in, delay, out); + title.send(playerObj); + } catch (Throwable ignored) { + } + } +} 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 index a5447f9bf..10eef5753 100644 --- 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 @@ -9,121 +9,119 @@ 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); - } + /** + * 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"); - } + /** + * 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); + @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); - } - - /** - * 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); + } + // 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); + } } + } - 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; - } - } + @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); + } - 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; + /** + * 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/DefaultTitle_111.java b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/titles/DefaultTitle_111.java deleted file mode 100644 index c0d176019..000000000 --- a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/titles/DefaultTitle_111.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.github.intellectualsites.plotsquared.bukkit.titles; - -import com.github.intellectualsites.plotsquared.bukkit.object.BukkitPlayer; -import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer; -import com.github.intellectualsites.plotsquared.plot.util.AbstractTitle; -import org.bukkit.entity.Player; - -@SuppressWarnings("deprecation") public class DefaultTitle_111 extends AbstractTitle { - - @Override - public void sendTitle(PlotPlayer player, String head, String sub, int in, int delay, int out) { - try { - final Player playerObj = ((BukkitPlayer) player).player; - TitleManager_1_11 title = new TitleManager_1_11(head, sub, in, delay, out); - title.send(playerObj); - return; - } catch (Throwable ignored) { - } - } -} diff --git a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/titles/HackTitle.java b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/titles/HackTitle.java deleted file mode 100644 index ae2b50a60..000000000 --- a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/titles/HackTitle.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.github.intellectualsites.plotsquared.bukkit.titles; - -import com.github.intellectualsites.plotsquared.bukkit.object.BukkitPlayer; -import com.github.intellectualsites.plotsquared.plot.PlotSquared; -import com.github.intellectualsites.plotsquared.plot.config.Settings; -import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer; -import com.github.intellectualsites.plotsquared.plot.util.AbstractTitle; - -public class HackTitle extends AbstractTitle { - - @Override - public void sendTitle(PlotPlayer player, String head, String sub, int in, int delay, int out) { - try { - HackTitleManager title = new HackTitleManager(head, sub, in, delay, out); - title.send(((BukkitPlayer) player).player); - } catch (Exception ignored) { - PlotSquared.debug("&cYour server version does not support titles!"); - Settings.TITLES = false; - AbstractTitle.TITLE_CLASS = null; - } - } -} diff --git a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/titles/HackTitleManager.java b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/titles/HackTitleManager.java deleted file mode 100644 index 2ec197927..000000000 --- a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/titles/HackTitleManager.java +++ /dev/null @@ -1,177 +0,0 @@ -package com.github.intellectualsites.plotsquared.bukkit.titles; - -import com.github.intellectualsites.plotsquared.bukkit.chat.Reflection; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; - -public class HackTitleManager 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 - */ - HackTitleManager(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 = getClass("org.spigotmc.ProtocolInjector$PacketTitle"); - this.packetActions = getClass("org.spigotmc.ProtocolInjector$PacketTitle$Action"); - this.nmsChatSerializer = Reflection.getNMSClass("ChatSerializer"); - } - - @Override public void send(Player player) - throws IllegalArgumentException, ReflectiveOperationException, SecurityException { - if ((getProtocolVersion(player) >= 47) && isSpigot() && (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, Integer.TYPE, Integer.TYPE, Integer.TYPE) - .newInstance(actions[2], 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, Reflection.getNMSClass("IChatBaseComponent")) - .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, - Reflection.getNMSClass("IChatBaseComponent")) - .newInstance(actions[1], serialized); - sendPacket.invoke(connection, packet); - } - } - } - - @Override public void clearTitle(Player player) - throws IllegalArgumentException, ReflectiveOperationException, SecurityException { - if ((getProtocolVersion(player) >= 47) && isSpigot()) { - // 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).newInstance(actions[3]); - sendPacket.invoke(connection, packet); - } - } - - @Override public void resetTitle(Player player) - throws IllegalArgumentException, ReflectiveOperationException, SecurityException { - if ((getProtocolVersion(player) >= 47) && isSpigot()) { - // 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).newInstance(actions[4]); - sendPacket.invoke(connection, packet); - } - } - - /** - * Get the protocol version of the player. - * - * @param player Player - * @return Protocol version - * @throws IllegalArgumentException - * @throws ReflectiveOperationException - * @throws SecurityException - */ - private int getProtocolVersion(Player player) - throws IllegalArgumentException, ReflectiveOperationException, SecurityException { - Object handle = getHandle(player); - Object connection = getField(handle.getClass(), "playerConnection").get(handle); - Object networkManager = getValue("networkManager", connection); - return (Integer) getMethod("getVersion", networkManager.getClass()).invoke(networkManager); - } - - /** - * Check if running spigot. - * - * @return Spigot - */ - private boolean isSpigot() { - return Bukkit.getVersion().contains("Spigot"); - } - - /** - * Get class by url. - * - * @param namespace Namespace url - * @return Class - */ - private Class getClass(String namespace) { - try { - return Class.forName(namespace); - } catch (ClassNotFoundException ignored) { - } - return null; - } - - private Field getField(String name, Class clazz) - throws NoSuchFieldException, SecurityException { - return clazz.getDeclaredField(name); - } - - private Object getValue(String name, Object obj) - throws ReflectiveOperationException, SecurityException, IllegalArgumentException { - Field f = getField(name, obj.getClass()); - f.setAccessible(true); - return f.get(obj); - } - - private Field getField(Class clazz, String name) { - try { - Field field = clazz.getDeclaredField(name); - field.setAccessible(true); - return field; - } catch (SecurityException | NoSuchFieldException 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; - } - -} 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 index f4c249f97..4b1d4349f 100644 --- 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 @@ -11,246 +11,246 @@ 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 = ""; + 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(); + /** + * 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); } + } - abstract void loadClasses(); + /** + * Clears the title. + * + * @param player Player + * @throws IllegalArgumentException + * @throws ReflectiveOperationException + * @throws SecurityException + */ + public abstract void clearTitle(Player player) + throws IllegalArgumentException, ReflectiveOperationException, SecurityException; - /** - * Gets title text. - * - * @return Title text - */ - public final String getTitle() { - return this.title; + /** + * 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; } + } - /** - * Sets the text for the title. - * - * @param title Title - */ - public final void setTitle(String title) { - this.title = title; + private Class[] toPrimitiveTypeArray(Class[] classes) { + int a; + if (classes != null) { + a = classes.length; + } else { + a = 0; } - - /** - * Gets the subtitle text. - * - * @return Subtitle text - */ - public final String getSubtitle() { - return this.subtitle; + Class[] types = new Class[a]; + for (int i = 0; i < a; i++) { + types[i] = getPrimitiveType(classes[i]); } + return types; + } - /** - * Sets subtitle text. - * - * @param subtitle Subtitle text - */ - public final void setSubtitle(String subtitle) { - this.subtitle = subtitle; + final Object getHandle(Object obj) { + try { + return getMethod("getHandle", obj.getClass()).invoke(obj); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { + e.printStackTrace(); + return null; } + } - /** - * Sets the title color. - * - * @param color Chat color - */ - public final void setTitleColor(ChatColor color) { - this.titleColor = color; + 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; + } - /** - * Sets the subtitle color. - * - * @param color Chat color - */ - public final void setSubtitleColor(ChatColor color) { - this.subtitleColor = color; + private boolean equalsTypeArray(Class[] a, Class[] o) { + if (a.length != o.length) { + return false; } - - /** - * Sets title fade in time. - * - * @param time Time - */ - public final void setFadeInTime(int time) { - this.fadeInTime = time; + for (int i = 0; i < a.length; i++) { + if (!a[i].equals(o[i]) && !a[i].isAssignableFrom(o[i])) { + return false; + } } + return true; + } - /** - * Sets title fade out time. - * - * @param time Time - */ - public final void setFadeOutTime(int time) { - this.fadeOutTime = time; + boolean classListEqual(Class[] l1, Class[] l2) { + if (l1.length != l2.length) { + return false; } - - /** - * 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; + 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 index fc8bfb7aa..627a48157 100644 --- 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 @@ -18,485 +18,488 @@ import java.util.stream.IntStream; * @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; + 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(); + 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])); + } - /** - * Create a new 1.8 title - * - * @param title Title - */ - public TitleManager_1_11(String title) { - this.title = title; - loadClasses(); + /** + * 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); } + } - /** - * 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(); - } + /** + * Gets the title text. + * + * @return Title text + */ + public String getTitle() { + return this.title; + } - /** - * 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(); - } + /** + * Sets the title text. + * + * @param title Title + */ + public void setTitle(String title) { + this.title = title; + } - /** - * 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(); - } + /** + * Gets the subtitle text. + * + * @return Subtitle text + */ + public String getSubtitle() { + return this.subtitle; + } - private static boolean equalsTypeArray(Class[] a, Class[] o) { - if (a.length != o.length) { - return false; + /** + * 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); } - 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); + 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(); + } } + } - /** - * Get title text - * - * @return Title text - */ - public String getTitle() { - return this.title; - } - - /** - * Set title text - * - * @param title Title - */ - public void setTitle(String title) { - this.title = title; - } - - /** - * Get subtitle text - * - * @return Subtitle text - */ - public String getSubtitle() { - return this.subtitle; - } - - /** - * Set subtitle text - * - * @param subtitle Subtitle text - */ - public void setSubtitle(String subtitle) { - this.subtitle = subtitle; - } - - /** - * Set timings to ticks - */ - public void setTimingsToTicks() { - ticks = true; - } - - /** - * Set timings to seconds - */ - public void setTimingsToSeconds() { - ticks = false; - } - - /** - * Send 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 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 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(); + } } + } - 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); } + } - /** - * Broadcast 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(); } + } - /** - * Clear the title - * - * @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(); } + } - /** - * Reset 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 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 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 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 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 String getVersion() { - String name = Bukkit.getServer().getClass().getPackage().getName(); - String version = name.substring(name.lastIndexOf('.') + 1) + "."; - return version; + 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 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 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 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 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; + } - private boolean ClassListEqual(Class[] l1, Class[] l2) { - boolean equal = true; - if (l1.length != l2.length) { - return false; - } - for (int i = 0; i < l1.length; i++) { - if (l1[i] != l2[i]) { - equal = false; - break; - } - } - return equal; - } + public ChatColor getTitleColor() { + return titleColor; + } - public ChatColor getTitleColor() { - return titleColor; - } + /** + * Sets the title color. + * + * @param color Chat color + */ + public void setTitleColor(ChatColor color) { + this.titleColor = color; + } - /** - * Set the title color - * - * @param color Chat color - */ - public void setTitleColor(ChatColor color) { - this.titleColor = color; - } + public ChatColor getSubtitleColor() { + return subtitleColor; + } - public ChatColor getSubtitleColor() { - return subtitleColor; - } + /** + * Sets the subtitle color. + * + * @param color Chat color + */ + public void setSubtitleColor(ChatColor color) { + this.subtitleColor = color; + } - /** - * Set the subtitle color - * - * @param color Chat color - */ - public void setSubtitleColor(ChatColor color) { - this.subtitleColor = color; - } + public int getFadeInTime() { + return fadeInTime; + } - public int getFadeInTime() { - return fadeInTime; - } + /** + * Sets the fade in time for the title. + * + * @param time Time + */ + public void setFadeInTime(int time) { + this.fadeInTime = time; + } - /** - * Set title fade in time - * - * @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; + } - 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; + } - /** - * Set title fade out time - * - * @param time Time - */ - public void setFadeOutTime(int time) { - this.fadeOutTime = time; - } + public int getStayTime() { + return stayTime; + } - public int getStayTime() { - return stayTime; - } + /** + * Sets the title stay time. + * + * @param time Time + */ + public void setStayTime(int time) { + this.stayTime = time; + } - /** - * Set title stay time - * - * @param time Time - */ - public void setStayTime(int time) { - this.stayTime = time; - } - - public boolean isTicks() { - return ticks; - } + public boolean isTicks() { + return ticks; + } } diff --git a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/util/BukkitChunkManager.java b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/util/BukkitChunkManager.java index 54ced2b83..7dcbc5add 100644 --- a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/util/BukkitChunkManager.java +++ b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/util/BukkitChunkManager.java @@ -275,8 +275,6 @@ public class BukkitChunkManager extends ChunkManager { continue; } final LocalBlockQueue queue = GlobalBlockQueue.IMP.getNewQueue(world, false); - RegionWrapper currentPlotClear = - new RegionWrapper(pos1.getX(), pos2.getX(), pos1.getZ(), pos2.getZ()); if (xxb >= p1x && xxt <= p2x && zzb >= p1z && zzt <= p2z) { AugmentedUtils .bypass(ignoreAugment, () -> queue.regenChunkSafe(chunk.x, chunk.z)); @@ -341,6 +339,8 @@ public class BukkitChunkManager extends ChunkManager { if (checkX2 && checkZ2) { map.saveRegion(bukkitWorldObj, xxt2, xxt, zzt2, zzt); // } + RegionWrapper currentPlotClear = + new RegionWrapper(pos1.getX(), pos2.getX(), pos1.getZ(), pos2.getZ()); map.saveEntitiesOut(chunkObj, currentPlotClear); AugmentedUtils.bypass(ignoreAugment, () -> setChunkInPlotArea(null, new RunnableVal() { @@ -611,11 +611,7 @@ public class BukkitChunkManager extends ChunkManager { } } - public void saveEntitiesIn(Chunk chunk, RegionWrapper region) { - saveEntitiesIn(chunk, region, 0, 0, false); - } - - public void saveEntitiesOut(Chunk chunk, RegionWrapper region) { + void saveEntitiesOut(Chunk chunk, RegionWrapper region) { for (Entity entity : chunk.getEntities()) { Location loc = BukkitUtil.getLocation(entity); int x = loc.getX(); @@ -632,7 +628,11 @@ public class BukkitChunkManager extends ChunkManager { } } - public void saveEntitiesIn(Chunk chunk, RegionWrapper region, int offsetX, int offsetZ, + void saveEntitiesIn(Chunk chunk, RegionWrapper region) { + saveEntitiesIn(chunk, region, 0, 0, false); + } + + void saveEntitiesIn(Chunk chunk, RegionWrapper region, int offsetX, int offsetZ, boolean delete) { for (Entity entity : chunk.getEntities()) { Location loc = BukkitUtil.getLocation(entity); @@ -657,7 +657,7 @@ public class BukkitChunkManager extends ChunkManager { } } - public void restoreEntities(World world, int xOffset, int zOffset) { + void restoreEntities(World world, int xOffset, int zOffset) { for (EntityWrapper entity : this.entities) { try { entity.spawn(world, xOffset, zOffset); @@ -670,8 +670,7 @@ public class BukkitChunkManager extends ChunkManager { } //todo optimize maxY - public void saveBlocks(BukkitWorld world, int maxY, int x, int z, int offsetX, - int offsetZ) { + void saveBlocks(BukkitWorld world, int maxY, int x, int z, int offsetX, int offsetZ) { maxY = Math.min(255, maxY); BaseBlock[] ids; ids = new BaseBlock[maxY + 1]; diff --git a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/util/BukkitEventUtil.java b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/util/BukkitEventUtil.java index 5a4cf885a..744d9084f 100644 --- a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/util/BukkitEventUtil.java +++ b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/util/BukkitEventUtil.java @@ -1,9 +1,30 @@ package com.github.intellectualsites.plotsquared.bukkit.util; -import com.github.intellectualsites.plotsquared.bukkit.events.*; +import com.github.intellectualsites.plotsquared.bukkit.events.PlayerClaimPlotEvent; +import com.github.intellectualsites.plotsquared.bukkit.events.PlayerEnterPlotEvent; +import com.github.intellectualsites.plotsquared.bukkit.events.PlayerLeavePlotEvent; +import com.github.intellectualsites.plotsquared.bukkit.events.PlayerPlotDeniedEvent; +import com.github.intellectualsites.plotsquared.bukkit.events.PlayerPlotHelperEvent; +import com.github.intellectualsites.plotsquared.bukkit.events.PlayerPlotTrustedEvent; +import com.github.intellectualsites.plotsquared.bukkit.events.PlayerTeleportToPlotEvent; +import com.github.intellectualsites.plotsquared.bukkit.events.PlotAutoMergeEvent; +import com.github.intellectualsites.plotsquared.bukkit.events.PlotChangeOwnerEvent; +import com.github.intellectualsites.plotsquared.bukkit.events.PlotClearEvent; +import com.github.intellectualsites.plotsquared.bukkit.events.PlotComponentSetEvent; +import com.github.intellectualsites.plotsquared.bukkit.events.PlotDeleteEvent; +import com.github.intellectualsites.plotsquared.bukkit.events.PlotFlagAddEvent; +import com.github.intellectualsites.plotsquared.bukkit.events.PlotFlagRemoveEvent; +import com.github.intellectualsites.plotsquared.bukkit.events.PlotMergeEvent; +import com.github.intellectualsites.plotsquared.bukkit.events.PlotRateEvent; +import com.github.intellectualsites.plotsquared.bukkit.events.PlotUnlinkEvent; import com.github.intellectualsites.plotsquared.bukkit.object.BukkitPlayer; import com.github.intellectualsites.plotsquared.plot.flag.Flag; -import com.github.intellectualsites.plotsquared.plot.object.*; +import com.github.intellectualsites.plotsquared.plot.object.Location; +import com.github.intellectualsites.plotsquared.plot.object.Plot; +import com.github.intellectualsites.plotsquared.plot.object.PlotArea; +import com.github.intellectualsites.plotsquared.plot.object.PlotId; +import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer; +import com.github.intellectualsites.plotsquared.plot.object.Rating; import com.github.intellectualsites.plotsquared.plot.util.EventUtil; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -16,97 +37,95 @@ import java.util.List; import java.util.UUID; /** - * Utility class for handling Bukkit {@link Event events} + * Utility class for handling Bukkit Events. */ public final class BukkitEventUtil extends EventUtil { - @Nullable public Player getPlayer(final PlotPlayer player) { - if (player instanceof BukkitPlayer) { - return ((BukkitPlayer) player).player; - } - return null; + @Nullable public Player getPlayer(final PlotPlayer player) { + if (player instanceof BukkitPlayer) { + return ((BukkitPlayer) player).player; } + return null; + } - private boolean callEvent(@Nonnull final Event event) { - Bukkit.getServer().getPluginManager().callEvent(event); - return !(event instanceof Cancellable) || !((Cancellable) event).isCancelled(); - } + private boolean callEvent(@Nonnull final Event event) { + Bukkit.getServer().getPluginManager().callEvent(event); + return !(event instanceof Cancellable) || !((Cancellable) event).isCancelled(); + } - @Override public boolean callClaim(PlotPlayer player, Plot plot, boolean auto) { - return callEvent(new PlayerClaimPlotEvent(getPlayer(player), plot, auto)); - } + @Override public boolean callClaim(PlotPlayer player, Plot plot, boolean auto) { + return callEvent(new PlayerClaimPlotEvent(getPlayer(player), plot, auto)); + } - @Override public boolean callTeleport(PlotPlayer player, Location from, Plot plot) { - return callEvent(new PlayerTeleportToPlotEvent(getPlayer(player), from, plot)); - } + @Override public boolean callTeleport(PlotPlayer player, Location from, Plot plot) { + return callEvent(new PlayerTeleportToPlotEvent(getPlayer(player), from, plot)); + } - @Override public boolean callComponentSet(Plot plot, String component) { - return callEvent(new PlotComponentSetEvent(plot, component)); - } + @Override public boolean callComponentSet(Plot plot, String component) { + return callEvent(new PlotComponentSetEvent(plot, component)); + } - @Override public boolean callClear(Plot plot) { - return callEvent(new PlotClearEvent(plot)); - } + @Override public boolean callClear(Plot plot) { + return callEvent(new PlotClearEvent(plot)); + } - @Override public boolean callDelete(Plot plot) { - return callEvent(new PlotDeleteEvent(plot)); - } + @Override public boolean callDelete(Plot plot) { + return callEvent(new PlotDeleteEvent(plot)); + } - @Override public boolean callFlagAdd(Flag flag, Plot plot) { - return callEvent(new PlotFlagAddEvent(flag, plot)); - } + @Override public boolean callFlagAdd(Flag flag, Plot plot) { + return callEvent(new PlotFlagAddEvent(flag, plot)); + } - @Override public boolean callFlagRemove(Flag flag, Plot plot, Object value) { - return callEvent(new PlotFlagRemoveEvent(flag, plot)); - } + @Override public boolean callFlagRemove(Flag flag, Plot plot, Object value) { + return callEvent(new PlotFlagRemoveEvent(flag, plot)); + } - @Override public boolean callMerge(Plot plot, int dir, int max) { - return callEvent( - new PlotMergeEvent(BukkitUtil.getWorld(plot.getWorldName()), plot, dir, max)); - } + @Override public boolean callMerge(Plot plot, int dir, int max) { + return callEvent(new PlotMergeEvent(BukkitUtil.getWorld(plot.getWorldName()), plot, dir, max)); + } - @Override public boolean callAutoMerge(Plot plot, List plots) { - return callEvent( - new PlotAutoMergeEvent(BukkitUtil.getWorld(plot.getWorldName()), plot, plots)); - } + @Override public boolean callAutoMerge(Plot plot, List plots) { + return callEvent(new PlotAutoMergeEvent(BukkitUtil.getWorld(plot.getWorldName()), plot, plots)); + } - @Override public boolean callUnlink(PlotArea area, List plots) { - return callEvent(new PlotUnlinkEvent(BukkitUtil.getWorld(area.worldname), area, plots)); - } + @Override public boolean callUnlink(PlotArea area, List plots) { + return callEvent(new PlotUnlinkEvent(BukkitUtil.getWorld(area.worldname), area, plots)); + } - @Override public void callEntry(PlotPlayer player, Plot plot) { - callEvent(new PlayerEnterPlotEvent(getPlayer(player), plot)); - } + @Override public void callEntry(PlotPlayer player, Plot plot) { + callEvent(new PlayerEnterPlotEvent(getPlayer(player), plot)); + } - @Override public void callLeave(PlotPlayer player, Plot plot) { - callEvent(new PlayerLeavePlotEvent(getPlayer(player), plot)); - } + @Override public void callLeave(PlotPlayer player, Plot plot) { + callEvent(new PlayerLeavePlotEvent(getPlayer(player), plot)); + } - @Override public void callDenied(PlotPlayer initiator, Plot plot, UUID player, boolean added) { - callEvent(new PlayerPlotDeniedEvent(getPlayer(initiator), plot, player, added)); - } + @Override public void callDenied(PlotPlayer initiator, Plot plot, UUID player, boolean added) { + callEvent(new PlayerPlotDeniedEvent(getPlayer(initiator), plot, player, added)); + } - @Override public void callTrusted(PlotPlayer initiator, Plot plot, UUID player, boolean added) { - callEvent(new PlayerPlotTrustedEvent(getPlayer(initiator), plot, player, added)); - } + @Override public void callTrusted(PlotPlayer initiator, Plot plot, UUID player, boolean added) { + callEvent(new PlayerPlotTrustedEvent(getPlayer(initiator), plot, player, added)); + } - @Override public void callMember(PlotPlayer initiator, Plot plot, UUID player, boolean added) { - callEvent(new PlayerPlotHelperEvent(getPlayer(initiator), plot, player, added)); - } + @Override public void callMember(PlotPlayer initiator, Plot plot, UUID player, boolean added) { + callEvent(new PlayerPlotHelperEvent(getPlayer(initiator), plot, player, added)); + } - @Override - public boolean callOwnerChange(PlotPlayer initiator, Plot plot, UUID oldOwner, UUID newOwner, - boolean hasOldOwner) { - return callEvent( - new PlotChangeOwnerEvent(getPlayer(initiator), plot, oldOwner, newOwner, hasOldOwner)); - } + @Override + public boolean callOwnerChange(PlotPlayer initiator, Plot plot, UUID oldOwner, UUID newOwner, + boolean hasOldOwner) { + return callEvent( + new PlotChangeOwnerEvent(getPlayer(initiator), plot, oldOwner, newOwner, hasOldOwner)); + } - @Override @Nullable public Rating callRating(PlotPlayer player, Plot plot, Rating rating) { - PlotRateEvent event = new PlotRateEvent(player, rating, plot); - Bukkit.getServer().getPluginManager().callEvent(event); - if (event.isCancelled()) { - return null; - } - return event.getRating(); + @Override @Nullable public Rating callRating(PlotPlayer player, Plot plot, Rating rating) { + PlotRateEvent event = new PlotRateEvent(player, rating, plot); + Bukkit.getServer().getPluginManager().callEvent(event); + if (event.isCancelled()) { + return null; } + return event.getRating(); + } } diff --git a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/util/BukkitInventoryUtil.java b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/util/BukkitInventoryUtil.java index f2b4188e3..2c66f8d3f 100644 --- a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/util/BukkitInventoryUtil.java +++ b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/util/BukkitInventoryUtil.java @@ -21,100 +21,104 @@ import java.util.stream.IntStream; public class BukkitInventoryUtil extends InventoryUtil { - public static ItemStack getItem(PlotItemStack item) { - if (item == null) { - return null; - } - ItemStack stack = new ItemStack(BukkitUtil.getMaterial(item.getPlotBlock()), item.amount); - ItemMeta meta = null; - if (item.name != null) { - meta = stack.getItemMeta(); - meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', item.name)); - } - if (item.lore != null) { - if (meta == null) { - meta = stack.getItemMeta(); - } - List lore = new ArrayList<>(); - for (String entry : item.lore) { - lore.add(ChatColor.translateAlternateColorCodes('&', entry)); - } - meta.setLore(lore); - } - if (meta != null) { - stack.setItemMeta(meta); - } - return stack; + @Override public void open(PlotInventory inv) { + BukkitPlayer bp = (BukkitPlayer) inv.player; + Inventory inventory = Bukkit.createInventory(null, inv.size * 9, inv.getTitle()); + PlotItemStack[] items = inv.getItems(); + for (int i = 0; i < inv.size * 9; i++) { + PlotItemStack item = items[i]; + if (item != null) { + inventory.setItem(i, getItem(item)); + } } + bp.player.openInventory(inventory); + } - @Override public void open(PlotInventory inv) { - BukkitPlayer bp = (BukkitPlayer) inv.player; - Inventory inventory = Bukkit.createInventory(null, inv.size * 9, inv.getTitle()); - PlotItemStack[] items = inv.getItems(); - for (int i = 0; i < inv.size * 9; i++) { - PlotItemStack item = items[i]; - if (item != null) { - inventory.setItem(i, getItem(item)); - } - } - bp.player.openInventory(inventory); + @Override public void close(PlotInventory inv) { + if (!inv.isOpen()) { + return; } + BukkitPlayer bp = (BukkitPlayer) inv.player; + bp.player.closeInventory(); + } - @Override public void close(PlotInventory inv) { - if (!inv.isOpen()) { - return; - } - BukkitPlayer bp = (BukkitPlayer) inv.player; - bp.player.closeInventory(); + @Override public void setItem(PlotInventory inv, int index, PlotItemStack item) { + BukkitPlayer bp = (BukkitPlayer) inv.player; + InventoryView opened = bp.player.getOpenInventory(); + if (!inv.isOpen()) { + return; } + opened.setItem(index, getItem(item)); + bp.player.updateInventory(); + } - @Override public void setItem(PlotInventory inv, int index, PlotItemStack item) { - BukkitPlayer bp = (BukkitPlayer) inv.player; - InventoryView opened = bp.player.getOpenInventory(); - if (!inv.isOpen()) { - return; - } - opened.setItem(index, getItem(item)); - bp.player.updateInventory(); + private static ItemStack getItem(PlotItemStack item) { + if (item == null) { + return null; } + ItemStack stack = new ItemStack(BukkitUtil.getMaterial(item.getPlotBlock()), item.amount); + ItemMeta meta = null; + if (item.name != null) { + meta = stack.getItemMeta(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', item.name)); + } + if (item.lore != null) { + if (meta == null) { + meta = stack.getItemMeta(); + } + List lore = new ArrayList<>(); + for (String entry : item.lore) { + lore.add(ChatColor.translateAlternateColorCodes('&', entry)); + } + meta.setLore(lore); + } + if (meta != null) { + stack.setItemMeta(meta); + } + return stack; + } - public PlotItemStack getItem(ItemStack item) { - if (item == null) { - return null; - } - // int id = item.getTypeId(); - Material id = item.getType(); - short data = item.getDurability(); - int amount = item.getAmount(); - String name = null; - String[] lore = null; - if (item.hasItemMeta()) { - ItemMeta meta = item.getItemMeta(); - if (meta.hasDisplayName()) { - name = meta.getDisplayName(); - } - if (meta.hasLore()) { - List itemLore = meta.getLore(); - lore = itemLore.toArray(new String[0]); - } - } - return new PlotItemStack(id.name(), amount, name, lore); + public PlotItemStack getItem(ItemStack item) { + if (item == null) { + return null; } + // int id = item.getTypeId(); + Material id = item.getType(); + ItemMeta meta = item.getItemMeta(); + int amount = item.getAmount(); + String name = null; + String[] lore = null; + if (item.hasItemMeta()) { + assert meta != null; + if (meta.hasDisplayName()) { + name = meta.getDisplayName(); + } + if (meta.hasLore()) { + List itemLore = meta.getLore(); + lore = itemLore.toArray(new String[0]); + } + } + return new PlotItemStack(id.name(), amount, name, lore); + } - @Override public PlotItemStack[] getItems(PlotPlayer player) { - BukkitPlayer bp = (BukkitPlayer) player; - PlayerInventory inv = bp.player.getInventory(); - return IntStream.range(0, 36).mapToObj(i -> getItem(inv.getItem(i))) - .toArray(PlotItemStack[]::new); - } + @Override public PlotItemStack[] getItems(PlotPlayer player) { + BukkitPlayer bp = (BukkitPlayer) player; + PlayerInventory inv = bp.player.getInventory(); + return IntStream.range(0, 36).mapToObj(i -> getItem(inv.getItem(i))) + .toArray(PlotItemStack[]::new); + } - @Override public boolean isOpen(PlotInventory plotInventory) { - if (!plotInventory.isOpen()) { - return false; - } - BukkitPlayer bp = (BukkitPlayer) plotInventory.player; - InventoryView opened = bp.player.getOpenInventory(); - return plotInventory.isOpen() && opened.getType() == InventoryType.CRAFTING - && opened.getTitle() == null; + @Override public boolean isOpen(PlotInventory plotInventory) { + if (!plotInventory.isOpen()) { + return false; } + BukkitPlayer bp = (BukkitPlayer) plotInventory.player; + InventoryView opened = bp.player.getOpenInventory(); + if (plotInventory.isOpen()) { + if (opened.getType() == InventoryType.CRAFTING) { + opened.getTitle(); + } + } + return false; + } }