Add support for 1.8 disguises
This commit is contained in:
		| @@ -10,11 +10,14 @@ import java.io.InputStream; | ||||
| import java.io.InputStreamReader; | ||||
| import java.io.Reader; | ||||
| import java.lang.reflect.Field; | ||||
|  | ||||
| import me.libraryaddict.disguise.commands.*; | ||||
| import me.libraryaddict.disguise.disguisetypes.Disguise; | ||||
| import me.libraryaddict.disguise.disguisetypes.DisguiseType; | ||||
| import me.libraryaddict.disguise.disguisetypes.FlagWatcher; | ||||
| import me.libraryaddict.disguise.disguisetypes.FutureDisguiseType; | ||||
| import me.libraryaddict.disguise.disguisetypes.watchers.AgeableWatcher; | ||||
| import me.libraryaddict.disguise.disguisetypes.watchers.GuardianWatcher; | ||||
| import me.libraryaddict.disguise.disguisetypes.watchers.HorseWatcher; | ||||
| import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher; | ||||
| import me.libraryaddict.disguise.disguisetypes.watchers.MinecartWatcher; | ||||
| @@ -23,9 +26,11 @@ import me.libraryaddict.disguise.disguisetypes.watchers.TameableWatcher; | ||||
| import me.libraryaddict.disguise.disguisetypes.watchers.ZombieWatcher; | ||||
| import me.libraryaddict.disguise.utilities.DisguiseSound; | ||||
| import me.libraryaddict.disguise.utilities.DisguiseUtilities; | ||||
| import me.libraryaddict.disguise.utilities.FakeBoundingBox; | ||||
| import me.libraryaddict.disguise.utilities.PacketsManager; | ||||
| import me.libraryaddict.disguise.utilities.ReflectionManager; | ||||
| import me.libraryaddict.disguise.utilities.DisguiseValues; | ||||
| import me.libraryaddict.disguise.utilities.ReflectionManager.LibVersion; | ||||
|  | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.entity.Ageable; | ||||
| @@ -149,7 +154,7 @@ public class LibsDisguises extends JavaPlugin { | ||||
|      */ | ||||
|     private void registerValues() { | ||||
|         for (DisguiseType disguiseType : DisguiseType.values()) { | ||||
|             if (disguiseType.getEntityType() == null) { | ||||
|             if (disguiseType.getEntityType() == null && !(disguiseType.is1_8() && LibVersion.is1_8())) { | ||||
|                 continue; | ||||
|             } | ||||
|             Class watcherClass = null; | ||||
| @@ -176,6 +181,9 @@ public class LibsDisguises extends JavaPlugin { | ||||
|                 case MAGMA_CUBE: | ||||
|                     watcherClass = SlimeWatcher.class; | ||||
|                     break; | ||||
|                 case ELDER_GUARDIAN: | ||||
|                     watcherClass = GuardianWatcher.class; | ||||
|                     break; | ||||
|                 default: | ||||
|                     watcherClass = Class.forName("me.libraryaddict.disguise.disguisetypes.watchers." | ||||
|                             + toReadable(disguiseType.name()) + "Watcher"); | ||||
| @@ -195,6 +203,28 @@ public class LibsDisguises extends JavaPlugin { | ||||
|                 } | ||||
|             } | ||||
|             disguiseType.setWatcherClass(watcherClass); | ||||
|             if (DisguiseValues.getDisguiseValues(disguiseType) != null) { | ||||
|                 continue; | ||||
|             } | ||||
|             if (disguiseType.is1_8()) { | ||||
|                 int entitySize = 0; | ||||
|                 FutureDisguiseType futureType = disguiseType.getFutureType(); | ||||
|                 DisguiseValues disguiseValues = new DisguiseValues(disguiseType, null, entitySize, futureType.getMaxHealth()); | ||||
|                 Object[] objs = disguiseType.getFutureType().getDataWatcher(); | ||||
|                 for (int i = 0; i < objs.length; i += 2) { | ||||
|                     disguiseValues.setMetaValue((Integer) objs[i], objs[i + 1]); | ||||
|                 } | ||||
|  | ||||
|                 // Get the bounding box | ||||
|                 float[] box = futureType.getBoundingBox(); | ||||
|                 disguiseValues.setAdultBox(new FakeBoundingBox(box[0], box[1], box[2])); | ||||
|                 /*     if (disguiseType == DisguiseType.RABBIT) { | ||||
|                          ((Ageable) bukkitEntity).setBaby(); | ||||
|                          disguiseValues.setBabyBox(ReflectionManager.getBoundingBox(bukkitEntity)); | ||||
|                      } | ||||
|                      disguiseValues.setEntitySize(ReflectionManager.getSize(bukkitEntity));*/ | ||||
|                 continue; | ||||
|             } | ||||
|             String nmsEntityName = toReadable(disguiseType.name()); | ||||
|             switch (disguiseType) { | ||||
|             case WITHER_SKELETON: | ||||
| @@ -234,9 +264,6 @@ public class LibsDisguises extends JavaPlugin { | ||||
|             default: | ||||
|                 break; | ||||
|             } | ||||
|             if (DisguiseValues.getDisguiseValues(disguiseType) != null) { | ||||
|                 continue; | ||||
|             } | ||||
|             try { | ||||
|                 Object nmsEntity = ReflectionManager.createEntityInstance(nmsEntityName); | ||||
|                 if (nmsEntity == null) { | ||||
| @@ -292,7 +319,6 @@ public class LibsDisguises extends JavaPlugin { | ||||
|                             .print("[LibsDisguises] Development builds are available at (ProtocolLib) " | ||||
|                                     + "http://assets.comphenix.net/job/ProtocolLib/ and (LibsDisguises) http://ci.md-5.net/job/LibsDisguises/"); | ||||
|                 } | ||||
|                 System.out.print("[LibsDisguises] Note that these builds have not been reviewed by Bukkit for safety."); | ||||
|  | ||||
|                 ex.printStackTrace(); | ||||
|             } | ||||
|   | ||||
| @@ -19,6 +19,7 @@ import me.libraryaddict.disguise.utilities.DisguiseUtilities; | ||||
| import me.libraryaddict.disguise.utilities.PacketsManager; | ||||
| import me.libraryaddict.disguise.utilities.ReflectionManager; | ||||
| import me.libraryaddict.disguise.utilities.DisguiseValues; | ||||
| import me.libraryaddict.disguise.utilities.ReflectionManager.LibVersion; | ||||
|  | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.Location; | ||||
| @@ -63,7 +64,7 @@ public abstract class Disguise { | ||||
|     protected void createDisguise(DisguiseType newType) { | ||||
|         if (getWatcher() != null) | ||||
|             return; | ||||
|         if (newType.getEntityType() == null) { | ||||
|         if (!(LibVersion.is1_8() && newType.is1_8()) && newType.getEntityType() == null) { | ||||
|             throw new RuntimeException( | ||||
|                     "DisguiseType " | ||||
|                             + newType | ||||
| @@ -634,16 +635,19 @@ public abstract class Disguise { | ||||
|             } | ||||
|             Class nmsEntityClass = ReflectionManager.getNmsEntity(getEntity()).getClass(); | ||||
|             Class nmsDisguiseClass = DisguiseValues.getNmsEntityClass(getType()); | ||||
|             // If they both extend the same base class. They OBVIOUSLY share the same datavalue. Right..? | ||||
|             if (baseClass != null && baseClass.isAssignableFrom(nmsDisguiseClass) && baseClass.isAssignableFrom(nmsEntityClass)) | ||||
|                 continue; | ||||
|             if (nmsDisguiseClass != null) { | ||||
|                 // If they both extend the same base class. They OBVIOUSLY share the same datavalue. Right..? | ||||
|                 if (baseClass != null && baseClass.isAssignableFrom(nmsDisguiseClass) | ||||
|                         && baseClass.isAssignableFrom(nmsEntityClass)) | ||||
|                     continue; | ||||
|  | ||||
|             // So they don't extend a basic class. | ||||
|             // Maybe if I check that they extend each other.. | ||||
|             // Seeing as I only store the finished forms of entitys. This should raise no problems and allow for more shared | ||||
|             // datawatchers. | ||||
|             if (nmsEntityClass.isAssignableFrom(nmsDisguiseClass) || nmsDisguiseClass.isAssignableFrom(nmsEntityClass)) | ||||
|                 continue; | ||||
|                 // So they don't extend a basic class. | ||||
|                 // Maybe if I check that they extend each other.. | ||||
|                 // Seeing as I only store the finished forms of entitys. This should raise no problems and allow for more shared | ||||
|                 // datawatchers. | ||||
|                 if (nmsEntityClass.isAssignableFrom(nmsDisguiseClass) || nmsDisguiseClass.isAssignableFrom(nmsEntityClass)) | ||||
|                     continue; | ||||
|             } | ||||
|             // Well I can't find a reason I should leave it alone. They will probably conflict. | ||||
|             // Time to set the value to the disguises value so no conflicts! | ||||
|             getWatcher().setBackupValue(dataNo, disguiseValues.get(dataNo)); | ||||
|   | ||||
| @@ -2,6 +2,8 @@ package me.libraryaddict.disguise.disguisetypes; | ||||
|  | ||||
| import java.lang.reflect.Method; | ||||
|  | ||||
| import me.libraryaddict.disguise.utilities.ReflectionManager.LibVersion; | ||||
|  | ||||
| import org.apache.commons.lang.StringUtils; | ||||
| import org.bukkit.entity.Entity; | ||||
| import org.bukkit.entity.EntityType; | ||||
| @@ -10,6 +12,8 @@ import org.bukkit.entity.Skeleton; | ||||
| import org.bukkit.entity.Zombie; | ||||
|  | ||||
| public enum DisguiseType { | ||||
|     ARMOR_STAND(FutureDisguiseType.ARMOR_STAND), | ||||
|  | ||||
|     ARROW(60), | ||||
|  | ||||
|     BAT, | ||||
| @@ -32,6 +36,8 @@ public enum DisguiseType { | ||||
|  | ||||
|     EGG(62), | ||||
|  | ||||
|     ELDER_GUARDIAN(FutureDisguiseType.ELDER_GUARDIAN), | ||||
|  | ||||
|     ENDER_CRYSTAL(51), | ||||
|  | ||||
|     ENDER_DRAGON, | ||||
| @@ -42,6 +48,8 @@ public enum DisguiseType { | ||||
|  | ||||
|     ENDERMAN, | ||||
|  | ||||
|     ENDERMITE(FutureDisguiseType.ENDERMITE), | ||||
|  | ||||
|     EXPERIENCE_ORB, | ||||
|  | ||||
|     FALLING_BLOCK(70, 1), | ||||
| @@ -56,6 +64,8 @@ public enum DisguiseType { | ||||
|  | ||||
|     GIANT, | ||||
|  | ||||
|     GUARDIAN(FutureDisguiseType.GUARDIAN), | ||||
|  | ||||
|     HORSE, | ||||
|  | ||||
|     IRON_GOLEM, | ||||
| @@ -96,6 +106,8 @@ public enum DisguiseType { | ||||
|  | ||||
|     PRIMED_TNT(50), | ||||
|  | ||||
|     RABBIT(FutureDisguiseType.RABBIT), | ||||
|  | ||||
|     SHEEP, | ||||
|  | ||||
|     SILVERFISH, | ||||
| @@ -232,9 +244,10 @@ public enum DisguiseType { | ||||
|  | ||||
|     private int defaultId, entityId; | ||||
|     private EntityType entityType; | ||||
|     private FutureDisguiseType futureType; | ||||
|     private Class<? extends FlagWatcher> watcherClass; | ||||
|  | ||||
|     private DisguiseType(int... ints) { | ||||
|     private DisguiseType(FutureDisguiseType disguiseType, int... ints) { | ||||
|         for (int i = 0; i < ints.length; i++) { | ||||
|             int value = ints[i]; | ||||
|             switch (i) { | ||||
| @@ -248,12 +261,29 @@ public enum DisguiseType { | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         if (LibVersion.is1_8()) { | ||||
|             futureType = disguiseType; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private DisguiseType(int... ints) { | ||||
|         this(null, ints); | ||||
|     } | ||||
|  | ||||
|     public int getDefaultId() { | ||||
|         return defaultId; | ||||
|     } | ||||
|  | ||||
|     public Class<? extends Entity> getEntityClass() { | ||||
|         if (futureType != null) { | ||||
|             return futureType.getEntityClass(); | ||||
|         } | ||||
|         if (entityType != null) { | ||||
|             return getEntityType().getEntityClass(); | ||||
|         } | ||||
|         return Entity.class; | ||||
|     } | ||||
|  | ||||
|     public int getEntityId() { | ||||
|         return entityId; | ||||
|     } | ||||
| @@ -262,16 +292,28 @@ public enum DisguiseType { | ||||
|         return entityType; | ||||
|     } | ||||
|  | ||||
|     public FutureDisguiseType getFutureType() { | ||||
|         return futureType; | ||||
|     } | ||||
|  | ||||
|     public int getTypeId() { | ||||
|         return is1_8() ? futureType.getEntityId() : (int) getEntityType().getTypeId(); | ||||
|     } | ||||
|  | ||||
|     public Class getWatcherClass() { | ||||
|         return watcherClass; | ||||
|     } | ||||
|  | ||||
|     public boolean is1_8() { | ||||
|         return futureType != null; | ||||
|     } | ||||
|  | ||||
|     public boolean isMisc() { | ||||
|         return !getEntityType().isAlive(); | ||||
|         return is1_8() ? !futureType.isAlive() : getEntityType() != null && !getEntityType().isAlive(); | ||||
|     } | ||||
|  | ||||
|     public boolean isMob() { | ||||
|         return getEntityType().isAlive() && this != DisguiseType.PLAYER; | ||||
|         return is1_8() ? futureType.isAlive() : getEntityType() != null && getEntityType().isAlive() && !isPlayer(); | ||||
|     } | ||||
|  | ||||
|     public boolean isPlayer() { | ||||
|   | ||||
| @@ -0,0 +1,178 @@ | ||||
| package me.libraryaddict.disguise.disguisetypes; | ||||
|  | ||||
| import org.bukkit.entity.Animals; | ||||
| import org.bukkit.entity.Entity; | ||||
| import org.bukkit.entity.Monster; | ||||
|  | ||||
| public enum FutureDisguiseType { | ||||
|  | ||||
|     ARMOR_STAND(Entity.class, 30, 2, new float[] { 0F, 0F, 0F }, new Object[] { | ||||
|  | ||||
|     1, (short) 300, | ||||
|  | ||||
|     2, "", | ||||
|  | ||||
|     3, (byte) 0, | ||||
|  | ||||
|     4, (byte) 0, | ||||
|  | ||||
|     6, 1F, | ||||
|  | ||||
|     7, 0, | ||||
|  | ||||
|     8, (byte) 0, | ||||
|  | ||||
|     9, (byte) 0, | ||||
|  | ||||
|     10, (byte) 0, | ||||
|  | ||||
|     // 11, | ||||
|     // 12, | ||||
|     // 13, | ||||
|     // 14, | ||||
|     // 15, | ||||
|     // 16 | ||||
|             }), | ||||
|  | ||||
|     ELDER_GUARDIAN(Monster.class, 68, 80, new float[] { 0F, 0F, 0F }, new Object[] { | ||||
|  | ||||
|     1, (short) 300, | ||||
|  | ||||
|     2, "", | ||||
|  | ||||
|     3, (byte) 0, | ||||
|  | ||||
|     4, (byte) 0, | ||||
|  | ||||
|     6, 1F, | ||||
|  | ||||
|     7, 0, | ||||
|  | ||||
|     8, (byte) 0, | ||||
|  | ||||
|     9, (byte) 0, | ||||
|  | ||||
|     15, (byte) 0, | ||||
|  | ||||
|     16, 0 | 4, | ||||
|  | ||||
|     17, 0 | ||||
|  | ||||
|     }), | ||||
|  | ||||
|     ENDERMITE(Monster.class, 67, 8, new float[] { 0F, 0F, 0F }, new Object[] { | ||||
|  | ||||
|     0, (byte) 0, | ||||
|  | ||||
|     1, (short) 300, | ||||
|  | ||||
|     2, "", | ||||
|  | ||||
|     3, (byte) 0, | ||||
|  | ||||
|     4, (byte) 0, | ||||
|  | ||||
|     6, 1F, | ||||
|  | ||||
|     7, 0, | ||||
|  | ||||
|     8, (byte) 0, | ||||
|  | ||||
|     9, (byte) 0, | ||||
|  | ||||
|     15, (byte) 0 | ||||
|  | ||||
|     }), | ||||
|  | ||||
|     GUARDIAN(Monster.class, 68, 30, new float[] { 0F, 0F, 0F }, new Object[] { | ||||
|  | ||||
|     1, (short) 300, | ||||
|  | ||||
|     2, "", | ||||
|  | ||||
|     3, (byte) 0, | ||||
|  | ||||
|     4, (byte) 0, | ||||
|  | ||||
|     6, 1F, | ||||
|  | ||||
|     7, 0, | ||||
|  | ||||
|     8, (byte) 0, | ||||
|  | ||||
|     9, (byte) 0, | ||||
|  | ||||
|     15, (byte) 0, | ||||
|  | ||||
|     16, 0, | ||||
|  | ||||
|     17, 0 | ||||
|  | ||||
|     }), | ||||
|  | ||||
|     RABBIT(Animals.class, 101, 10, new float[] { 0F, 0F, 0F }, new Object[] { 1, (short) 300, | ||||
|  | ||||
|     2, "", | ||||
|  | ||||
|     3, (byte) 0, | ||||
|  | ||||
|     4, (byte) 0, | ||||
|  | ||||
|     6, 1F, | ||||
|  | ||||
|     7, 0, | ||||
|  | ||||
|     8, (byte) 0, | ||||
|  | ||||
|     9, (byte) 0, | ||||
|  | ||||
|     12, (byte) 0, | ||||
|  | ||||
|     15, (byte) 0, | ||||
|  | ||||
|     18, (byte) 0 | ||||
|  | ||||
|     }); | ||||
|  | ||||
|     private float[] boundingBox; | ||||
|     private Object[] dataWatcher; | ||||
|     private Class<? extends Entity> entityClass; | ||||
|     private int entityId; | ||||
|     private float maxHealth; | ||||
|  | ||||
|     private FutureDisguiseType(Class<? extends Entity> entityClass, int entityId, float maxHealth, float[] boundingBox, | ||||
|             Object[] watcherValues) { | ||||
|         this.entityClass = entityClass; | ||||
|         this.dataWatcher = watcherValues; | ||||
|         this.boundingBox = boundingBox; | ||||
|         if (watcherValues.length % 2 != 0) { | ||||
|             System.out.print("Error! " + name() + " has odd number of params!"); | ||||
|         } | ||||
|         this.entityId = entityId; | ||||
|     } | ||||
|  | ||||
|     public float[] getBoundingBox() { | ||||
|         return boundingBox; | ||||
|     } | ||||
|  | ||||
|     public Object[] getDataWatcher() { | ||||
|         return dataWatcher; | ||||
|     } | ||||
|  | ||||
|     public Class<? extends Entity> getEntityClass() { | ||||
|         return entityClass; | ||||
|     } | ||||
|  | ||||
|     public int getEntityId() { | ||||
|         return entityId; | ||||
|     } | ||||
|  | ||||
|     public float getMaxHealth() { | ||||
|         return maxHealth; | ||||
|     } | ||||
|  | ||||
|     public boolean isAlive() { | ||||
|         return this != ARMOR_STAND; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -6,7 +6,7 @@ import java.util.List; | ||||
|  | ||||
| import me.libraryaddict.disguise.DisguiseAPI; | ||||
| import me.libraryaddict.disguise.utilities.DisguiseUtilities; | ||||
|  | ||||
| import me.libraryaddict.disguise.utilities.ReflectionManager; | ||||
| import org.bukkit.entity.Player; | ||||
|  | ||||
| public abstract class TargetedDisguise extends Disguise { | ||||
| @@ -34,6 +34,8 @@ public abstract class TargetedDisguise extends Disguise { | ||||
|     } | ||||
|  | ||||
|     public boolean canSee(Player player) { | ||||
|         if (getType() != null && (getType().is1_8() && !ReflectionManager.is1_8(player))) | ||||
|             return false; | ||||
|         return canSee(player.getName()); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -0,0 +1,11 @@ | ||||
| package me.libraryaddict.disguise.disguisetypes.watchers; | ||||
|  | ||||
| import me.libraryaddict.disguise.disguisetypes.Disguise; | ||||
|  | ||||
| public class ArmorStandWatcher extends LivingWatcher { | ||||
|  | ||||
|     public ArmorStandWatcher(Disguise disguise) { | ||||
|         super(disguise); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,11 @@ | ||||
| package me.libraryaddict.disguise.disguisetypes.watchers; | ||||
|  | ||||
| import me.libraryaddict.disguise.disguisetypes.Disguise; | ||||
|  | ||||
| public class EndermiteWatcher extends LivingWatcher { | ||||
|  | ||||
|     public EndermiteWatcher(Disguise disguise) { | ||||
|         super(disguise); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,11 @@ | ||||
| package me.libraryaddict.disguise.disguisetypes.watchers; | ||||
|  | ||||
| import me.libraryaddict.disguise.disguisetypes.Disguise; | ||||
|  | ||||
| public class GuardianWatcher extends LivingWatcher { | ||||
|  | ||||
|     public GuardianWatcher(Disguise disguise) { | ||||
|         super(disguise); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,11 @@ | ||||
| package me.libraryaddict.disguise.disguisetypes.watchers; | ||||
|  | ||||
| import me.libraryaddict.disguise.disguisetypes.Disguise; | ||||
|  | ||||
| public class RabbitWatcher extends AgeableWatcher { | ||||
|  | ||||
|     public RabbitWatcher(Disguise disguise) { | ||||
|         super(disguise); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -14,6 +14,7 @@ import me.libraryaddict.disguise.disguisetypes.FlagWatcher; | ||||
| import me.libraryaddict.disguise.disguisetypes.MiscDisguise; | ||||
| import me.libraryaddict.disguise.disguisetypes.MobDisguise; | ||||
| import me.libraryaddict.disguise.disguisetypes.PlayerDisguise; | ||||
| import me.libraryaddict.disguise.utilities.ReflectionManager.LibVersion; | ||||
|  | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.Material; | ||||
| @@ -22,7 +23,6 @@ import org.bukkit.command.CommandExecutor; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.entity.Ageable; | ||||
| import org.bukkit.entity.Animals; | ||||
| import org.bukkit.entity.Entity; | ||||
| import org.bukkit.entity.Monster; | ||||
| import org.bukkit.inventory.ItemStack; | ||||
| import org.bukkit.permissions.PermissionAttachmentInfo; | ||||
| @@ -31,15 +31,15 @@ import org.bukkit.potion.PotionEffectType; | ||||
| public abstract class BaseDisguiseCommand implements CommandExecutor { | ||||
|  | ||||
|     public class DisguiseParseException extends Exception { | ||||
|         public DisguiseParseException(String string) { | ||||
|             super(string); | ||||
|         } | ||||
|         private static final long serialVersionUID = 1276971370793124510L; | ||||
|  | ||||
|         public DisguiseParseException() { | ||||
|             super(); | ||||
|         } | ||||
|  | ||||
|         private static final long serialVersionUID = 1276971370793124510L; | ||||
|         public DisguiseParseException(String string) { | ||||
|             super(string); | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
| @@ -147,7 +147,7 @@ public abstract class BaseDisguiseCommand implements CommandExecutor { | ||||
|                 } else { | ||||
|                     for (DisguiseType type : DisguiseType.values()) { | ||||
|                         HashMap<ArrayList<String>, Boolean> options = null; | ||||
|                         Class entityClass = type.getEntityType() == null ? Entity.class : type.getEntityType().getEntityClass(); | ||||
|                         Class entityClass = type.getEntityClass(); | ||||
|                         if (disguiseType.equals("mob")) { | ||||
|                             if (type.isMob()) { | ||||
|                                 options = getOptions(perm); | ||||
| @@ -203,7 +203,7 @@ public abstract class BaseDisguiseCommand implements CommandExecutor { | ||||
|                 } else { | ||||
|                     for (DisguiseType type : DisguiseType.values()) { | ||||
|                         boolean foundHim = false; | ||||
|                         Class entityClass = type.getEntityType() == null ? Entity.class : type.getEntityType().getEntityClass(); | ||||
|                         Class entityClass = type.getEntityClass(); | ||||
|                         if (disguiseType.equals("mob")) { | ||||
|                             if (type.isMob()) { | ||||
|                                 foundHim = true; | ||||
| @@ -337,7 +337,7 @@ public abstract class BaseDisguiseCommand implements CommandExecutor { | ||||
|                 throw new DisguiseParseException(ChatColor.RED + "Error! The disguise " + ChatColor.GREEN + args[0] | ||||
|                         + ChatColor.RED + " doesn't exist!"); | ||||
|             } | ||||
|             if (disguiseType.getEntityType() == null) { | ||||
|             if (!(LibVersion.is1_8() && disguiseType.is1_8()) && disguiseType.getEntityType() == null) { | ||||
|                 throw new DisguiseParseException(ChatColor.RED + "Error! This version of minecraft does not have that disguise!"); | ||||
|             } | ||||
|             if (!map.containsKey(disguiseType)) { | ||||
|   | ||||
| @@ -264,7 +264,7 @@ public class DisguiseUtilities { | ||||
|                 destroyPacket.getIntegerArrays().write(0, new int[] { disguise.getEntity().getEntityId() }); | ||||
|                 for (Object p : cloned) { | ||||
|                     Player player = (Player) ReflectionManager.getBukkitEntity(p); | ||||
|                     if (player == disguise.getEntity() || disguise.canSee(player.getName())) { | ||||
|                     if (player == disguise.getEntity() || disguise.canSee(player)) { | ||||
|                         ProtocolLibrary.getProtocolManager().sendServerPacket(player, destroyPacket); | ||||
|                     } | ||||
|                 } | ||||
| @@ -787,7 +787,7 @@ public class DisguiseUtilities { | ||||
|                     HashSet cloned = (HashSet) trackedPlayers.clone(); | ||||
|                     for (final Object p : cloned) { | ||||
|                         Player player = (Player) ReflectionManager.getBukkitEntity(p); | ||||
|                         if (disguise.getEntity() != player && disguise.canSee(player.getName())) { | ||||
|                         if (disguise.getEntity() != player && disguise.canSee(player)) { | ||||
|                             clear.invoke(entityTrackerEntry, p); | ||||
|                             ProtocolLibrary.getProtocolManager().sendServerPacket(player, destroyPacket); | ||||
|                             Bukkit.getScheduler().scheduleSyncDelayedTask(libsDisguises, new Runnable() { | ||||
|   | ||||
| @@ -277,14 +277,14 @@ public class PacketsManager { | ||||
|                 delayedPackets = new PacketContainer[] { delayedPacket }; | ||||
|             } | ||||
|  | ||||
|         } else if (disguise.getType().isMob()) { | ||||
|         } else if (disguise.getType().isMob() || disguise.getType() == DisguiseType.ARMOR_STAND) { | ||||
|  | ||||
|             DisguiseValues values = DisguiseValues.getDisguiseValues(disguise.getType()); | ||||
|             Vector vec = disguisedEntity.getVelocity(); | ||||
|             spawnPackets[0] = new PacketContainer(PacketType.Play.Server.SPAWN_ENTITY_LIVING); | ||||
|             StructureModifier<Object> mods = spawnPackets[0].getModifier(); | ||||
|             mods.write(0, disguisedEntity.getEntityId()); | ||||
|             mods.write(1, (int) disguise.getType().getEntityType().getTypeId()); | ||||
|             mods.write(1, disguise.getType().getTypeId()); // TODO | ||||
|             double d1 = 3.9D; | ||||
|             double d2 = vec.getX(); | ||||
|             double d3 = vec.getY(); | ||||
| @@ -421,7 +421,7 @@ public class PacketsManager { | ||||
|             value = (byte) -(value + 128); | ||||
|             break; | ||||
|         default: | ||||
|             if (disguiseType.isMisc()) { | ||||
|             if (disguiseType.isMisc() && disguiseType != DisguiseType.ARMOR_STAND) { | ||||
|                 value -= 64; | ||||
|             } | ||||
|             break; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user