diff --git a/HolographicDisplays/src/com/gmail/filoghost/holograms/api/HolographicDisplaysAPI.java b/HolographicDisplays/src/com/gmail/filoghost/holograms/api/HolographicDisplaysAPI.java index 7aedab07..8c5a6b22 100644 --- a/HolographicDisplays/src/com/gmail/filoghost/holograms/api/HolographicDisplaysAPI.java +++ b/HolographicDisplays/src/com/gmail/filoghost/holograms/api/HolographicDisplaysAPI.java @@ -4,6 +4,8 @@ import static com.gmail.filoghost.holograms.HolographicDisplays.nmsManager; import java.util.List; +import net.minecraft.util.com.google.common.collect.Lists; + import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Entity; @@ -16,7 +18,6 @@ import com.gmail.filoghost.holograms.object.APICraftHologram; import com.gmail.filoghost.holograms.object.APIFloatingItemManager; import com.gmail.filoghost.holograms.object.APIHologramManager; import com.gmail.filoghost.holograms.object.CraftFloatingItem; -import com.gmail.filoghost.holograms.utils.GenericUtils; import com.gmail.filoghost.holograms.utils.Validator; import com.gmail.filoghost.holograms.utils.VisibilityManager; @@ -80,7 +81,7 @@ public class HolographicDisplaysAPI { * @return the new hologram created. */ public static Hologram createIndividualHologram(Plugin plugin, Location source, Player whoCanSee, String... lines) { - return createIndividualHologram(plugin, source, GenericUtils.createList(whoCanSee), lines); + return createIndividualHologram(plugin, source, Lists.newArrayList(whoCanSee), lines); } /** @@ -131,7 +132,7 @@ public class HolographicDisplaysAPI { * @return the new hologram created. */ public static FloatingItem createIndividualFloatingItem(Plugin plugin, Location source, Player whoCanSee, ItemStack itemstack) { - return createIndividualFloatingItem(plugin, source, GenericUtils.createList(whoCanSee), itemstack); + return createIndividualFloatingItem(plugin, source, Lists.newArrayList(whoCanSee), itemstack); } /** diff --git a/HolographicDisplays/src/com/gmail/filoghost/holograms/nms/v1_8_R1/CraftCustomItem.java b/HolographicDisplays/src/com/gmail/filoghost/holograms/nms/v1_8_R1/CraftCustomItem.java index 6b382d60..bc120056 100644 --- a/HolographicDisplays/src/com/gmail/filoghost/holograms/nms/v1_8_R1/CraftCustomItem.java +++ b/HolographicDisplays/src/com/gmail/filoghost/holograms/nms/v1_8_R1/CraftCustomItem.java @@ -21,6 +21,7 @@ public class CraftCustomItem extends CraftItem { public void remove() { // Cannot be removed, this is the most important to override. } + // Methods from Entity @Override public void setVelocity(Vector vel) { } @@ -33,6 +34,8 @@ public class CraftCustomItem extends CraftItem { @Override public boolean eject() { return false; } @Override public boolean leaveVehicle() { return false; } @Override public void playEffect(EntityEffect effect) { } + @Override public void setCustomName(String name) { } + @Override public void setCustomNameVisible(boolean flag) { } // Methods from Item @Override public void setItemStack(ItemStack stack) { } diff --git a/HolographicDisplays/src/com/gmail/filoghost/holograms/nms/v1_8_R1/CraftTouchSlime.java b/HolographicDisplays/src/com/gmail/filoghost/holograms/nms/v1_8_R1/CraftTouchSlime.java index 77e56a70..8c1bf9ef 100644 --- a/HolographicDisplays/src/com/gmail/filoghost/holograms/nms/v1_8_R1/CraftTouchSlime.java +++ b/HolographicDisplays/src/com/gmail/filoghost/holograms/nms/v1_8_R1/CraftTouchSlime.java @@ -24,6 +24,7 @@ public class CraftTouchSlime extends CraftSlime { // Cannot be removed, this is the most important to override. } + // Methods from LivingEntity class @Override public boolean addPotionEffect(PotionEffect effect) { return false; } @Override public boolean addPotionEffect(PotionEffect effect, boolean param) { return false; } @@ -41,7 +42,8 @@ public class CraftTouchSlime extends CraftSlime { @Override public boolean eject() { return false; } @Override public boolean leaveVehicle() { return false; } @Override public void playEffect(EntityEffect effect) { } - + @Override public void setCustomName(String name) { } + @Override public void setCustomNameVisible(boolean flag) { } // Methods from Slime @Override public void setSize(int size) { } diff --git a/HolographicDisplays/src/com/gmail/filoghost/holograms/nms/v1_8_R1/EntityCustomItem.java b/HolographicDisplays/src/com/gmail/filoghost/holograms/nms/v1_8_R1/EntityCustomItem.java index 44c0be89..68883279 100644 --- a/HolographicDisplays/src/com/gmail/filoghost/holograms/nms/v1_8_R1/EntityCustomItem.java +++ b/HolographicDisplays/src/com/gmail/filoghost/holograms/nms/v1_8_R1/EntityCustomItem.java @@ -115,6 +115,16 @@ public class EntityCustomItem extends EntityItem implements CustomItem, BasicEnt lockTick = lock; } + @Override + public void setCustomName(String customName) { + // Locks the custom name. + } + + @Override + public void setCustomNameVisible(boolean visible) { + // Locks the custom name. + } + @Override public void die() { setLockTick(false); diff --git a/HolographicDisplays/src/com/gmail/filoghost/holograms/protocol/ProtocolLibHook.java b/HolographicDisplays/src/com/gmail/filoghost/holograms/protocol/ProtocolLibHook.java index 45e92a21..ec887af4 100644 --- a/HolographicDisplays/src/com/gmail/filoghost/holograms/protocol/ProtocolLibHook.java +++ b/HolographicDisplays/src/com/gmail/filoghost/holograms/protocol/ProtocolLibHook.java @@ -19,13 +19,22 @@ import com.comphenix.protocol.wrappers.WrappedDataWatcher; import com.comphenix.protocol.wrappers.WrappedWatchableObject; import com.gmail.filoghost.holograms.HolographicDisplays; import com.gmail.filoghost.holograms.object.HologramBase; +import com.gmail.filoghost.holograms.utils.VersionUtils; public class ProtocolLibHook { + private static int customNameWatcherIndex; + public static void initialize() { if (Bukkit.getPluginManager().isPluginEnabled("ProtocolLib")) { HolographicDisplays.getInstance().getLogger().info("Found ProtocolLib, adding support for player relative variables."); + if (HolographicDisplays.is1_8) { + customNameWatcherIndex = 2; + } else { + customNameWatcherIndex = 10; + } + ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(HolographicDisplays.getInstance(), ListenerPriority.NORMAL, PacketType.Play.Server.SPAWN_ENTITY_LIVING, PacketType.Play.Server.SPAWN_ENTITY, PacketType.Play.Server.ENTITY_METADATA) { @@ -56,18 +65,18 @@ public class ProtocolLibHook { return; } - if (entity.getType() != EntityType.HORSE) { - // Enough, only horses are used with custom names. + if (entity.getType() != EntityType.HORSE && !VersionUtils.isArmorstand(entity.getType())) { + // Enough, only horses and armor stands are used with custom names. return; } WrappedDataWatcher dataWatcher = spawnEntityPacket.getMetadata(); - String customName = dataWatcher.getString(10); + String customName = dataWatcher.getString(customNameWatcherIndex); if (customName.contains("{player}") || customName.contains("{displayname}")) { WrappedDataWatcher dataWatcherClone = dataWatcher.deepClone(); - dataWatcherClone.setObject(10, customName.replace("{player}", player.getName()).replace("{displayname}", player.getDisplayName())); + dataWatcherClone.setObject(customNameWatcherIndex, customName.replace("{player}", player.getName()).replace("{displayname}", player.getDisplayName())); spawnEntityPacket.setMetadata(dataWatcherClone); event.setPacket(spawnEntityPacket.getHandle()); @@ -116,8 +125,8 @@ public class ProtocolLibHook { return; } - if (entity.getType() != EntityType.HORSE) { - // Enough, only horses are used with custom names. + if (entity.getType() != EntityType.HORSE && !VersionUtils.isArmorstand(entity.getType())) { + // Enough, only horses and armorstands are used with custom names. return; } @@ -125,7 +134,7 @@ public class ProtocolLibHook { for (int i = 0; i < dataWatcherValues.size(); i++) { - if (dataWatcherValues.get(i).getIndex() == 10) { + if (dataWatcherValues.get(i).getIndex() == customNameWatcherIndex) { Object customNameObject = dataWatcherValues.get(i).deepClone().getValue(); if (customNameObject instanceof String == false) { @@ -154,18 +163,9 @@ public class ProtocolLibHook { } private static boolean isHologramType(EntityType type) { - return type == EntityType.HORSE || type == EntityType.WITHER_SKULL || type == EntityType.DROPPED_ITEM || type == EntityType.SLIME || isArmorstand(type); // To maintain compatibility with 1.8 + return type == EntityType.HORSE || type == EntityType.WITHER_SKULL || type == EntityType.DROPPED_ITEM || type == EntityType.SLIME || VersionUtils.isArmorstand(type); // To maintain backwards compatibility } - private static boolean isArmorstand(EntityType type) { - if (!HolographicDisplays.is1_8) { - return false; - } - - return type == EntityType.ARMOR_STAND; - } - - // Horses are always part of a CraftHologram private static HologramBase getHologram(Entity bukkitEntity) { return nmsManager.getParentHologram(bukkitEntity); } diff --git a/HolographicDisplays/src/com/gmail/filoghost/holograms/utils/GenericUtils.java b/HolographicDisplays/src/com/gmail/filoghost/holograms/utils/GenericUtils.java index d0b1a84d..a5d80380 100644 --- a/HolographicDisplays/src/com/gmail/filoghost/holograms/utils/GenericUtils.java +++ b/HolographicDisplays/src/com/gmail/filoghost/holograms/utils/GenericUtils.java @@ -1,19 +1,6 @@ package com.gmail.filoghost.holograms.utils; -import java.util.ArrayList; -import java.util.List; - public class GenericUtils { - - public static List createList(E object) { - if (object == null) { - return null; - } - - List list = new ArrayList(); - list.add(object); - return list; - } public static double square(double d) { return d * d; diff --git a/HolographicDisplays/src/com/gmail/filoghost/holograms/utils/VersionUtils.java b/HolographicDisplays/src/com/gmail/filoghost/holograms/utils/VersionUtils.java index 57d2a1c3..c58d9346 100644 --- a/HolographicDisplays/src/com/gmail/filoghost/holograms/utils/VersionUtils.java +++ b/HolographicDisplays/src/com/gmail/filoghost/holograms/utils/VersionUtils.java @@ -4,6 +4,9 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import org.bukkit.Bukkit; +import org.bukkit.entity.EntityType; + +import com.gmail.filoghost.holograms.HolographicDisplays; public class VersionUtils { @@ -30,4 +33,11 @@ public class VersionUtils { return Bukkit.getName().toLowerCase().contains("mcpc") || Bukkit.getName().toLowerCase().contains("cauldron"); } + public static boolean isArmorstand(EntityType type) { + if (!HolographicDisplays.is1_8) { + return false; + } + + return type == EntityType.ARMOR_STAND; + } }