Armorstand names now adapt to basic entity sizes, and player sneaking. Doesn't handle poses.
This commit is contained in:
		| @@ -116,6 +116,8 @@ public abstract class Disguise { | |||||||
|         return DisguiseUtilities.reverse(multiName); |         return DisguiseUtilities.reverse(multiName); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public abstract double getHeight(); | ||||||
|  |  | ||||||
|     public void setMultiName(String... name) { |     public void setMultiName(String... name) { | ||||||
|         if (name.length == 1 && name[0].isEmpty()) { |         if (name.length == 1 && name[0].isEmpty()) { | ||||||
|             name = new String[0]; |             name = new String[0]; | ||||||
|   | |||||||
| @@ -47,10 +47,12 @@ public class FlagWatcher { | |||||||
|     private HashMap<Integer, Object> entityValues = new HashMap<>(); |     private HashMap<Integer, Object> entityValues = new HashMap<>(); | ||||||
|     private LibsEquipment equipment; |     private LibsEquipment equipment; | ||||||
|     private boolean hasDied; |     private boolean hasDied; | ||||||
|  |     @Getter | ||||||
|     private boolean[] modifiedEntityAnimations = new boolean[8]; |     private boolean[] modifiedEntityAnimations = new boolean[8]; | ||||||
|     private transient List<WrappedWatchableObject> watchableObjects; |     private transient List<WrappedWatchableObject> watchableObjects; | ||||||
|     private boolean sleeping; |     private boolean sleeping; | ||||||
|     private boolean swimming; |     private boolean swimming; | ||||||
|  |     private transient boolean previouslySneaking; | ||||||
|  |  | ||||||
|     public FlagWatcher(Disguise disguise) { |     public FlagWatcher(Disguise disguise) { | ||||||
|         this.disguise = (TargetedDisguise) disguise; |         this.disguise = (TargetedDisguise) disguise; | ||||||
| @@ -150,8 +152,10 @@ public class FlagWatcher { | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             if (value != null) { |             if (value != null) { | ||||||
|                 if (isEntityAnimationsAdded() && id == 0) { |                 if (isEntityAnimationsAdded() && id == MetaIndex.ENTITY_META.getIndex()) { | ||||||
|                     value = addEntityAnimations((byte) value, (byte) watch.getValue()); |                     value = addEntityAnimations((byte) value, (byte) watch.getValue()); | ||||||
|  |  | ||||||
|  |                     doSneakCheck((Byte) value); | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 boolean isDirty = watch.getDirtyState(); |                 boolean isDirty = watch.getDirtyState(); | ||||||
| @@ -175,6 +179,10 @@ public class FlagWatcher { | |||||||
|                 if (!isDirty) { |                 if (!isDirty) { | ||||||
|                     watch.setDirtyState(false); |                     watch.setDirtyState(false); | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|  |                 if (id == MetaIndex.ENTITY_META.getIndex()) { | ||||||
|  |                     doSneakCheck((Byte) watch.getValue()); | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             newList.add(watch); |             newList.add(watch); | ||||||
| @@ -207,7 +215,7 @@ public class FlagWatcher { | |||||||
|                 getDisguise().getEntity() instanceof Player) { |                 getDisguise().getEntity() instanceof Player) { | ||||||
|             for (WrappedWatchableObject watch : newList) { |             for (WrappedWatchableObject watch : newList) { | ||||||
|                 // Its a health packet |                 // Its a health packet | ||||||
|                 if (watch.getIndex() == 6) { |                 if (watch.getIndex() == MetaIndex.LIVING_HEALTH.getIndex()) { | ||||||
|                     Object value = watch.getValue(); |                     Object value = watch.getValue(); | ||||||
|  |  | ||||||
|                     if (value instanceof Float) { |                     if (value instanceof Float) { | ||||||
| @@ -236,6 +244,21 @@ public class FlagWatcher { | |||||||
|         return newList; |         return newList; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private void doSneakCheck(byte value) { | ||||||
|  |         if (getModifiedEntityAnimations()[1] || !getDisguise().isPlayerDisguise()) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         boolean sneak = (value & 1 << 1) != 0; | ||||||
|  |  | ||||||
|  |         if (sneak == previouslySneaking) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         previouslySneaking = sneak; | ||||||
|  |         updateNameHeight(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     @NmsAddedIn(val = NmsVersion.v1_14) |     @NmsAddedIn(val = NmsVersion.v1_14) | ||||||
|     public EntityPose getEntityPose() { |     public EntityPose getEntityPose() { | ||||||
|         return getData(MetaIndex.ENTITY_POSE); |         return getData(MetaIndex.ENTITY_POSE); | ||||||
| @@ -255,6 +278,55 @@ public class FlagWatcher { | |||||||
|         getEquipment().setArmorContents(items); |         getEquipment().setArmorContents(items); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     protected void updateNameHeight() { | ||||||
|  |         if (!getDisguise().isDisguiseInUse()) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (!DisguiseConfig.isArmorstandsName()) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (!getDisguise().isPlayerDisguise() && !DisguiseConfig.isOverrideCustomNames()) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (getDisguise().getEntity() == null) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // Not using this as it's "Smooth" and looks a bit weirder | ||||||
|  |         /*int[] ids = getDisguise().getArmorstandIds(); | ||||||
|  |  | ||||||
|  |         ArrayList<PacketContainer> packets = new ArrayList<>(); | ||||||
|  |         Location loc = getDisguise().getEntity().getLocation(); | ||||||
|  |  | ||||||
|  |         for (int i = 0; i < getDisguise().getMultiNameLength(); i++) { | ||||||
|  |             PacketContainer packet = new PacketContainer(Server.ENTITY_TELEPORT); | ||||||
|  |             packet.getIntegers().write(0, ids[i]); | ||||||
|  |  | ||||||
|  |             StructureModifier<Double> doubles = packet.getDoubles(); | ||||||
|  |             doubles.write(0, loc.getX()); | ||||||
|  |             doubles.write(1, loc.getY() + getDisguise().getHeight() + (0.28 * i)); | ||||||
|  |             doubles.write(2, loc.getZ()); | ||||||
|  |  | ||||||
|  |             packets.add(packet); | ||||||
|  |         }*/ | ||||||
|  |  | ||||||
|  |         ArrayList<PacketContainer> packets = DisguiseUtilities.getNamePackets(getDisguise(), new String[0]); | ||||||
|  |  | ||||||
|  |         try { | ||||||
|  |             for (Player player : DisguiseUtilities.getPerverts(getDisguise())) { | ||||||
|  |                 for (PacketContainer packet : packets) { | ||||||
|  |                     ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         catch (InvocationTargetException e) { | ||||||
|  |             e.printStackTrace(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|     public String getCustomName() { |     public String getCustomName() { | ||||||
|         if (!getDisguise().isPlayerDisguise() && DisguiseConfig.isOverrideCustomNames() && |         if (!getDisguise().isPlayerDisguise() && DisguiseConfig.isOverrideCustomNames() && | ||||||
|                 DisguiseConfig.isArmorstandsName()) { |                 DisguiseConfig.isArmorstandsName()) { | ||||||
| @@ -266,6 +338,10 @@ public class FlagWatcher { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         if (!NmsVersion.v1_13.isSupported()) { |         if (!NmsVersion.v1_13.isSupported()) { | ||||||
|  |             if (!hasValue(MetaIndex.ENTITY_CUSTOM_NAME_OLD)) { | ||||||
|  |                 return null; | ||||||
|  |             } | ||||||
|  |  | ||||||
|             return getData(MetaIndex.ENTITY_CUSTOM_NAME_OLD); |             return getData(MetaIndex.ENTITY_CUSTOM_NAME_OLD); | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -470,6 +546,10 @@ public class FlagWatcher { | |||||||
|         setEntityFlag(1, setSneaking); |         setEntityFlag(1, setSneaking); | ||||||
|         sendData(MetaIndex.ENTITY_META); |         sendData(MetaIndex.ENTITY_META); | ||||||
|  |  | ||||||
|  |         if (getDisguise().isPlayerDisguise()) { | ||||||
|  |             updateNameHeight(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         if (NmsVersion.v1_14.isSupported()) { |         if (NmsVersion.v1_14.isSupported()) { | ||||||
|             updatePose(); |             updatePose(); | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -4,6 +4,7 @@ import me.libraryaddict.disguise.disguisetypes.watchers.DroppedItemWatcher; | |||||||
| import me.libraryaddict.disguise.disguisetypes.watchers.FallingBlockWatcher; | import me.libraryaddict.disguise.disguisetypes.watchers.FallingBlockWatcher; | ||||||
| import me.libraryaddict.disguise.disguisetypes.watchers.PaintingWatcher; | import me.libraryaddict.disguise.disguisetypes.watchers.PaintingWatcher; | ||||||
| import me.libraryaddict.disguise.disguisetypes.watchers.SplashPotionWatcher; | import me.libraryaddict.disguise.disguisetypes.watchers.SplashPotionWatcher; | ||||||
|  | import me.libraryaddict.disguise.utilities.DisguiseValues; | ||||||
| import org.bukkit.Art; | import org.bukkit.Art; | ||||||
| import org.bukkit.Material; | import org.bukkit.Material; | ||||||
| import org.bukkit.entity.Entity; | import org.bukkit.entity.Entity; | ||||||
| @@ -63,6 +64,17 @@ public class MiscDisguise extends TargetedDisguise { | |||||||
|         apply(id, new ItemStack(Material.STONE)); |         apply(id, new ItemStack(Material.STONE)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public double getHeight() { | ||||||
|  |         DisguiseValues values = DisguiseValues.getDisguiseValues(getType()); | ||||||
|  |  | ||||||
|  |         if (values == null || values.getAdultBox() == null) { | ||||||
|  |             return 0; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return values.getAdultBox().getY(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     private void apply(int id, ItemStack itemStack) { |     private void apply(int id, ItemStack itemStack) { | ||||||
|         createDisguise(); |         createDisguise(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,7 @@ | |||||||
| package me.libraryaddict.disguise.disguisetypes; | package me.libraryaddict.disguise.disguisetypes; | ||||||
|  |  | ||||||
| import me.libraryaddict.disguise.disguisetypes.watchers.AgeableWatcher; | import me.libraryaddict.disguise.disguisetypes.watchers.*; | ||||||
| import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher; | import me.libraryaddict.disguise.utilities.DisguiseValues; | ||||||
| import me.libraryaddict.disguise.disguisetypes.watchers.ZombieWatcher; |  | ||||||
| import org.bukkit.entity.Entity; | import org.bukkit.entity.Entity; | ||||||
| import org.bukkit.entity.Player; | import org.bukkit.entity.Player; | ||||||
|  |  | ||||||
| @@ -30,6 +29,30 @@ public class MobDisguise extends TargetedDisguise { | |||||||
|         createDisguise(); |         createDisguise(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public double getHeight() { | ||||||
|  |         DisguiseValues values = DisguiseValues.getDisguiseValues(getType()); | ||||||
|  |  | ||||||
|  |         if (values == null || values.getAdultBox() == null) { | ||||||
|  |             return 0; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (!isAdult() && values.getBabyBox() != null) { | ||||||
|  |             return values.getBabyBox().getY(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (getWatcher() != null) { | ||||||
|  |             if (getType() == DisguiseType.ARMOR_STAND) { | ||||||
|  |                 return (((ArmorStandWatcher) getWatcher()).isSmall() ? values.getBabyBox() : values.getAdultBox()) | ||||||
|  |                         .getY(); | ||||||
|  |             } else if (getType() == DisguiseType.SLIME || getType() == DisguiseType.MAGMA_CUBE) { | ||||||
|  |                 return 0.51 * (0.255 * ((SlimeWatcher) getWatcher()).getSize()); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return values.getAdultBox().getY(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public MobDisguise addPlayer(Player player) { |     public MobDisguise addPlayer(Player player) { | ||||||
|         return (MobDisguise) super.addPlayer(player); |         return (MobDisguise) super.addPlayer(player); | ||||||
|   | |||||||
| @@ -38,6 +38,11 @@ public class ModdedDisguise extends TargetedDisguise { | |||||||
|         createDisguise(); |         createDisguise(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public double getHeight() { | ||||||
|  |         return 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public boolean isCustomDisguise() { |     public boolean isCustomDisguise() { | ||||||
|         return true; |         return true; | ||||||
|   | |||||||
| @@ -83,6 +83,19 @@ public class PlayerDisguise extends TargetedDisguise { | |||||||
|         createDisguise(); |         createDisguise(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public double getHeight() { | ||||||
|  |         if (getWatcher() == null) { | ||||||
|  |             return 1.8; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (getEntity() == null || getWatcher().getModifiedEntityAnimations()[1]) { | ||||||
|  |             return getWatcher().isSneaking() ? 1.5 : 1.8; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return getEntity() instanceof Player && ((Player) getEntity()).isSneaking() ? 1.5 : 1.8; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     @Deprecated |     @Deprecated | ||||||
|     public DisguiseUtilities.DScoreTeam getScoreboardName() { |     public DisguiseUtilities.DScoreTeam getScoreboardName() { | ||||||
|         if (!DisguiseConfig.isScoreboardNames()) { |         if (!DisguiseConfig.isScoreboardNames()) { | ||||||
|   | |||||||
| @@ -25,7 +25,13 @@ public class SlimeWatcher extends InsentientWatcher { | |||||||
|             size = 50; |             size = 50; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         if (hasValue(MetaIndex.SLIME_SIZE) && getData(MetaIndex.SLIME_SIZE) == size) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|         setData(MetaIndex.SLIME_SIZE, size); |         setData(MetaIndex.SLIME_SIZE, size); | ||||||
|         sendData(MetaIndex.SLIME_SIZE); |         sendData(MetaIndex.SLIME_SIZE); | ||||||
|  |  | ||||||
|  |         updateNameHeight(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ import me.libraryaddict.disguise.LibsDisguises; | |||||||
| import me.libraryaddict.disguise.disguisetypes.*; | import me.libraryaddict.disguise.disguisetypes.*; | ||||||
| import me.libraryaddict.disguise.disguisetypes.TargetedDisguise.TargetType; | import me.libraryaddict.disguise.disguisetypes.TargetedDisguise.TargetType; | ||||||
| import me.libraryaddict.disguise.disguisetypes.watchers.AgeableWatcher; | import me.libraryaddict.disguise.disguisetypes.watchers.AgeableWatcher; | ||||||
| import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher; | import me.libraryaddict.disguise.disguisetypes.watchers.ArmorStandWatcher; | ||||||
| import me.libraryaddict.disguise.disguisetypes.watchers.ZombieWatcher; | import me.libraryaddict.disguise.disguisetypes.watchers.ZombieWatcher; | ||||||
| import me.libraryaddict.disguise.utilities.json.*; | import me.libraryaddict.disguise.utilities.json.*; | ||||||
| import me.libraryaddict.disguise.utilities.mineskin.MineSkinAPI; | import me.libraryaddict.disguise.utilities.mineskin.MineSkinAPI; | ||||||
| @@ -2323,6 +2323,8 @@ public class DisguiseUtilities { | |||||||
|             destroyIds = Arrays.copyOfRange(standIds, newNames.length, internalOldNames.length); |             destroyIds = Arrays.copyOfRange(standIds, newNames.length, internalOldNames.length); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         double height = disguise.getHeight(); | ||||||
|  |  | ||||||
|         for (int i = 0; i < newNames.length; i++) { |         for (int i = 0; i < newNames.length; i++) { | ||||||
|             if (i < internalOldNames.length) { |             if (i < internalOldNames.length) { | ||||||
|                 if (newNames[i].equals(internalOldNames[i]) || newNames[i].isEmpty()) { |                 if (newNames[i].equals(internalOldNames[i]) || newNames[i].isEmpty()) { | ||||||
| @@ -2358,19 +2360,19 @@ public class DisguiseUtilities { | |||||||
|                 Location loc = disguise.getEntity().getLocation(); |                 Location loc = disguise.getEntity().getLocation(); | ||||||
|  |  | ||||||
|                 packet.getDoubles().write(0, loc.getX()); |                 packet.getDoubles().write(0, loc.getX()); | ||||||
|                 packet.getDoubles().write(1, loc.getY() + -0.175 + (0.28 * i)); |                 packet.getDoubles().write(1, loc.getY() + height + (0.28 * i)); | ||||||
|                 packet.getDoubles().write(2, loc.getZ()); |                 packet.getDoubles().write(2, loc.getZ()); | ||||||
|                 packets.add(packet); |                 packets.add(packet); | ||||||
|  |  | ||||||
|                 WrappedDataWatcher watcher = new WrappedDataWatcher(); |                 WrappedDataWatcher watcher = new WrappedDataWatcher(); | ||||||
|  |  | ||||||
|                 for (MetaIndex index : MetaIndex.getMetaIndexes(LivingWatcher.class)) { |                 for (MetaIndex index : MetaIndex.getMetaIndexes(ArmorStandWatcher.class)) { | ||||||
|                     Object val = index.getDefault(); |                     Object val = index.getDefault(); | ||||||
|  |  | ||||||
|                     if (index == MetaIndex.ENTITY_META) { |                     if (index == MetaIndex.ENTITY_META) { | ||||||
|                         val = (byte) 32; |                         val = (byte) 32; | ||||||
|                     } else if (index == MetaIndex.ARMORSTAND_META) { |                     } else if (index == MetaIndex.ARMORSTAND_META) { | ||||||
|                         val = (byte) 17; |                         val = (byte) 19; | ||||||
|                     } else if (index == MetaIndex.ENTITY_CUSTOM_NAME) { |                     } else if (index == MetaIndex.ENTITY_CUSTOM_NAME) { | ||||||
|                         val = Optional.of(WrappedChatComponent.fromText(newNames[i])); |                         val = Optional.of(WrappedChatComponent.fromText(newNames[i])); | ||||||
|                     } else if (index == MetaIndex.ENTITY_CUSTOM_NAME_OLD) { |                     } else if (index == MetaIndex.ENTITY_CUSTOM_NAME_OLD) { | ||||||
| @@ -2387,7 +2389,7 @@ public class DisguiseUtilities { | |||||||
|  |  | ||||||
|                 if (NmsVersion.v1_15.isSupported()) { |                 if (NmsVersion.v1_15.isSupported()) { | ||||||
|                     PacketContainer metaPacket = ProtocolLibrary.getProtocolManager() |                     PacketContainer metaPacket = ProtocolLibrary.getProtocolManager() | ||||||
|                             .createPacketConstructor(PacketType.Play.Server.ENTITY_METADATA, 0, watcher, true) |                             .createPacketConstructor(PacketType.Play.Server.ENTITY_METADATA, standIds[i], watcher, true) | ||||||
|                             .createPacket(standIds[i], watcher, true); |                             .createPacket(standIds[i], watcher, true); | ||||||
|  |  | ||||||
|                     packets.add(metaPacket); |                     packets.add(metaPacket); | ||||||
|   | |||||||
| @@ -15,19 +15,12 @@ public class DisguiseValues { | |||||||
|         return values.get(type); |         return values.get(type); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static Class getNmsEntityClass(DisguiseType type) { |  | ||||||
|         return getDisguiseValues(type).getNmsEntityClass(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     private FakeBoundingBox adultBox; |     private FakeBoundingBox adultBox; | ||||||
|     private FakeBoundingBox babyBox; |     private FakeBoundingBox babyBox; | ||||||
|     private float[] entitySize; |     private final double maxHealth; | ||||||
|     private double maxHealth; |  | ||||||
|     private Class nmsEntityClass; |  | ||||||
|  |  | ||||||
|     public DisguiseValues(DisguiseType type, Class classType, double maxHealth) { |     public DisguiseValues(DisguiseType type, double maxHealth) { | ||||||
|         values.put(type, this); |         values.put(type, this); | ||||||
|         nmsEntityClass = classType; |  | ||||||
|         this.maxHealth = maxHealth; |         this.maxHealth = maxHealth; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -50,8 +43,4 @@ public class DisguiseValues { | |||||||
|     public double getMaxHealth() { |     public double getMaxHealth() { | ||||||
|         return maxHealth; |         return maxHealth; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public Class getNmsEntityClass() { |  | ||||||
|         return nmsEntityClass; |  | ||||||
|     } |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -49,6 +49,7 @@ public class PacketHandlerMovement implements IPacketHandler { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         ArrayList<PacketContainer> toAdd = new ArrayList<>(); |         ArrayList<PacketContainer> toAdd = new ArrayList<>(); | ||||||
|  |         double height = disguise.getHeight(); | ||||||
|  |  | ||||||
|         for (PacketContainer packet : packets.getPackets()) { |         for (PacketContainer packet : packets.getPackets()) { | ||||||
|             for (int i = 0; i < len; i++) { |             for (int i = 0; i < len; i++) { | ||||||
| @@ -57,7 +58,7 @@ public class PacketHandlerMovement implements IPacketHandler { | |||||||
|                 packet2.getIntegers().write(0, standId); |                 packet2.getIntegers().write(0, standId); | ||||||
|  |  | ||||||
|                 if (packet2.getType() == PacketType.Play.Server.ENTITY_TELEPORT) { |                 if (packet2.getType() == PacketType.Play.Server.ENTITY_TELEPORT) { | ||||||
|                     packet2.getDoubles().write(1, packet2.getDoubles().read(1) + -0.175 + (0.28 * i)); |                     packet2.getDoubles().write(1, packet2.getDoubles().read(1) + height + (0.28 * i)); | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 toAdd.add(packet2); |                 toAdd.add(packet2); | ||||||
|   | |||||||
| @@ -48,8 +48,10 @@ public class DisguiseParser { | |||||||
|                     disguise = new MiscDisguise(type); |                     disguise = new MiscDisguise(type); | ||||||
|                 } else if (type.isMob()) { |                 } else if (type.isMob()) { | ||||||
|                     disguise = new MobDisguise(type); |                     disguise = new MobDisguise(type); | ||||||
|                 } else { |                 } else if (type.isPlayer()) { | ||||||
|                     disguise = new PlayerDisguise("Foobar"); |                     disguise = new PlayerDisguise("Foobar"); | ||||||
|  |                 } else { | ||||||
|  |                     continue; | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 FlagWatcher watcher = type.getWatcherClass().getConstructor(Disguise.class).newInstance(disguise); |                 FlagWatcher watcher = type.getWatcherClass().getConstructor(Disguise.class).newInstance(disguise); | ||||||
| @@ -217,15 +219,14 @@ public class DisguiseParser { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static void addWatcherDefault(Method setMethod, Method getMethod, Object object) { |     private static void addWatcherDefault(Method setMethod, Method getMethod, Object object) { | ||||||
|  |  | ||||||
|         if (defaultWatcherValues.containsKey(setMethod)) { |         if (defaultWatcherValues.containsKey(setMethod)) { | ||||||
|             Object dObj = defaultWatcherValues.get(setMethod).getValue(); |             Object dObj = defaultWatcherValues.get(setMethod).getValue(); | ||||||
|  |  | ||||||
|             if (!Objects.deepEquals(dObj, object)) { |             if (!Objects.deepEquals(dObj, object)) { | ||||||
|                 throw new IllegalStateException(String.format( |                 throw new IllegalStateException(String.format( | ||||||
|                         "%s has conflicting values! This means it expected the same value again but received a " + |                         "%s has conflicting values! This means it expected the same value again but received a " + | ||||||
|                                 "different value on a different disguise! %s is not the same as %s!", setMethod.getName(), object, |                                 "different value on a different disguise! %s is not the same as %s!", | ||||||
|                         dObj)); |                         setMethod.getName(), object, dObj)); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             return; |             return; | ||||||
|   | |||||||
| @@ -1722,7 +1722,7 @@ public class ReflectionManager { | |||||||
|  |  | ||||||
|         try { |         try { | ||||||
|             if (disguiseType == DisguiseType.UNKNOWN || disguiseType.isCustom()) { |             if (disguiseType == DisguiseType.UNKNOWN || disguiseType.isCustom()) { | ||||||
|                 DisguiseValues disguiseValues = new DisguiseValues(disguiseType, null, 0); |                 DisguiseValues disguiseValues = new DisguiseValues(disguiseType, 0); | ||||||
|  |  | ||||||
|                 disguiseValues.setAdultBox(new FakeBoundingBox(0, 0, 0)); |                 disguiseValues.setAdultBox(new FakeBoundingBox(0, 0, 0)); | ||||||
|  |  | ||||||
| @@ -1763,7 +1763,7 @@ public class ReflectionManager { | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             DisguiseValues disguiseValues = new DisguiseValues(disguiseType, nmsEntity.getClass(), |             DisguiseValues disguiseValues = new DisguiseValues(disguiseType, | ||||||
|                     bukkitEntity instanceof Damageable ? ((Damageable) bukkitEntity).getMaxHealth() : 0); |                     bukkitEntity instanceof Damageable ? ((Damageable) bukkitEntity).getMaxHealth() : 0); | ||||||
|  |  | ||||||
|             WrappedDataWatcher watcher = WrappedDataWatcher.getEntityWatcher(bukkitEntity); |             WrappedDataWatcher watcher = WrappedDataWatcher.getEntityWatcher(bukkitEntity); | ||||||
| @@ -1841,9 +1841,11 @@ public class ReflectionManager { | |||||||
|                 ((Zombie) bukkitEntity).setBaby(true); |                 ((Zombie) bukkitEntity).setBaby(true); | ||||||
|  |  | ||||||
|                 disguiseValues.setBabyBox(ReflectionManager.getBoundingBox(bukkitEntity)); |                 disguiseValues.setBabyBox(ReflectionManager.getBoundingBox(bukkitEntity)); | ||||||
|             } |             } else if (bukkitEntity instanceof ArmorStand) { | ||||||
|  |                 ((ArmorStand) bukkitEntity).setSmall(true); | ||||||
|  |  | ||||||
|             //disguiseValues.setEntitySize(ReflectionManager.getSize(bukkitEntity)); |                 disguiseValues.setBabyBox(ReflectionManager.getBoundingBox(bukkitEntity)); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|         catch (SecurityException | IllegalArgumentException | IllegalAccessException | FieldAccessException ex) { |         catch (SecurityException | IllegalArgumentException | IllegalAccessException | FieldAccessException ex) { | ||||||
|             DisguiseUtilities.getLogger() |             DisguiseUtilities.getLogger() | ||||||
|   | |||||||
| @@ -72,8 +72,10 @@ SaveDisguises: | |||||||
| # EXTENDED - Names are limited to 48 chars but can't be changed without resending disguise | # EXTENDED - Names are limited to 48 chars but can't be changed without resending disguise | ||||||
| # ARMORSTANDS - Names are limited to 256 chars, uses a mix of armorstands and teams to do this. Slightly hacky. | # ARMORSTANDS - Names are limited to 256 chars, uses a mix of armorstands and teams to do this. Slightly hacky. | ||||||
| # Downside of armorstand names is that there's a chance of it becoming desynced from the player disguise | # Downside of armorstand names is that there's a chance of it becoming desynced from the player disguise | ||||||
|  | # And names will always display even if the entity is invisible using potion effects | ||||||
| PlayerNames: TEAMS | PlayerNames: TEAMS | ||||||
| # If doing armorstands, should CustomNames be overridden to use armorstands too? | # If doing ARMORSTANDS in the above option, should CustomNames be overridden to use armorstands too? | ||||||
|  | # This allows multiline names | ||||||
| OverrideCustomNames: true | OverrideCustomNames: true | ||||||
|  |  | ||||||
| # How many ticks before tab packet is sent to remove from tablist. This shouldn't need to be touched | # How many ticks before tab packet is sent to remove from tablist. This shouldn't need to be touched | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user