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