diff --git a/pom.xml b/pom.xml index eb91d88c..7e28babc 100644 --- a/pom.xml +++ b/pom.xml @@ -42,12 +42,12 @@ org.spigotmc spigot-api - 1.9.4-R0.1-SNAPSHOT + 1.10-R0.1-SNAPSHOT org.spigotmc spigot - 1.9.4-R0.1-SNAPSHOT + 1.10-R0.1-SNAPSHOT diff --git a/src/me/libraryaddict/disguise/LibsDisguises.java b/src/me/libraryaddict/disguise/LibsDisguises.java index 32dd54dc..0b038fec 100644 --- a/src/me/libraryaddict/disguise/LibsDisguises.java +++ b/src/me/libraryaddict/disguise/LibsDisguises.java @@ -30,6 +30,7 @@ import me.libraryaddict.disguise.commands.UndisguiseEntityCommand; import me.libraryaddict.disguise.commands.UndisguisePlayerCommand; import me.libraryaddict.disguise.commands.UndisguiseRadiusCommand; import me.libraryaddict.disguise.disguisetypes.DisguiseType; +import me.libraryaddict.disguise.disguisetypes.FlagType; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.AgeableWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.GuardianWatcher; @@ -299,7 +300,18 @@ public class LibsDisguises extends JavaPlugin for (WrappedWatchableObject watch : watcher.getWatchableObjects()) { - disguiseValues.setMetaValue(watch.getIndex(), watch.getValue()); + FlagType flagType = FlagType.getFlag(watcherClass, watch.getIndex()); + + if (flagType == null) + { + System.err.println("Error finding the FlagType for " + disguiseType.name() + "! " + watch.getIndex() + + " cannot be found!"); + System.err.println("Lib's Disguises will continue to load, but this will not work properly!"); + continue; + } + + disguiseValues.setMetaValue(flagType, watch.getValue()); + // Uncomment when I need to find the new datawatcher values for a class.. // int id = watch.getIndex(); // Object val = watch.getValue(); diff --git a/src/me/libraryaddict/disguise/disguisetypes/Disguise.java b/src/me/libraryaddict/disguise/disguisetypes/Disguise.java index 253a0350..eef5b624 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/Disguise.java +++ b/src/me/libraryaddict/disguise/disguisetypes/Disguise.java @@ -6,6 +6,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Map.Entry; import java.util.UUID; import org.bukkit.Bukkit; @@ -782,134 +783,15 @@ public abstract class Disguise */ private void setupWatcher() { - HashMap disguiseValues = DisguiseValues.getMetaValues(getType()); - HashMap entityValues = DisguiseValues.getMetaValues(DisguiseType.getType(getEntity().getType())); + HashMap disguiseValues = DisguiseValues.getMetaValues(getType()); + HashMap entityValues = DisguiseValues.getMetaValues(DisguiseType.getType(getEntity().getType())); - // Start from 2 as they ALL share 0 and 1 - for (int dataNo = 0; dataNo <= 31; dataNo++) + for (Entry entry : entityValues.entrySet()) { - // STEP 1. Find out if the watcher has set data on it. - // If the watcher already set a metadata on this - if (getWatcher().hasValue(dataNo)) - { - // Better check that the value is stable. - // To check this, I'm going to check if there exists a default value - // Then I'm going to check if the watcher value is the same as the default value. - if (disguiseValues.containsKey(dataNo)) - { - // Now check if they are the same class, or both null. - if (disguiseValues.get(dataNo) == null || getWatcher().getValue(dataNo, null) == null) - { - if (disguiseValues.get(dataNo) == null && getWatcher().getValue(dataNo, null) == null) - { - // They are both null. Idk what this means really. - continue; - } - } - else if (getWatcher().getValue(dataNo, null).getClass() == disguiseValues.get(dataNo).getClass()) - { - // The classes are the same. The client "shouldn't" crash. - continue; - } - } - } - - // STEP 2. As the watcher has not set data on it, check if I need to set the default data. - // If neither of them touch it - if (!entityValues.containsKey(dataNo) && !disguiseValues.containsKey(dataNo)) - { + if (disguiseValues.containsKey(entry.getKey())) continue; - } - // If the disguise has this, but not the entity. Then better set it! - if (!entityValues.containsKey(dataNo) && disguiseValues.containsKey(dataNo)) - { - getWatcher().setBackupValue(dataNo, disguiseValues.get(dataNo)); - continue; - } - - // Else if the disguise doesn't have it. But the entity does. Better remove it! - if (entityValues.containsKey(dataNo) && !disguiseValues.containsKey(dataNo)) - { - getWatcher().setBackupValue(dataNo, null); - continue; - } - - Object eObj = entityValues.get(dataNo); - Object dObj = disguiseValues.get(dataNo); - - if (eObj == null || dObj == null) - { - if (eObj == null && dObj == null) - { - continue; - } - else - { - getWatcher().setBackupValue(dataNo, dObj); - continue; - } - } - - if (eObj.getClass() != dObj.getClass()) - { - getWatcher().setBackupValue(dataNo, dObj); - continue; - } - - // Since they both share it. With the same classes. Time to check if its from something they extend. - // Better make this clear before I compare the values because some default values are different! - // Entity is 0 & 1 - But we aint gonna be checking that - // EntityAgeable is 11 - // EntityInsentient is 10 - // EntityLiving is 5 & 6 & 7 & 8 & 9 - // Lets use switch - Class baseClass = null; - - switch (dataNo) - { - case 5: - case 6: - case 7: - case 8: - case 9: - baseClass = ReflectionManager.getNmsClass("EntityLiving"); - break; - case 10: - baseClass = ReflectionManager.getNmsClass("EntityInsentient"); - break; - case 11: - baseClass = ReflectionManager.getNmsClass("EntityAgeable"); - break; - default: - break; - } - - Class nmsEntityClass = ReflectionManager.getNmsEntity(getEntity()).getClass(); - Class nmsDisguiseClass = DisguiseValues.getNmsEntityClass(getType()); - - 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; - } - } - - // 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)); + getWatcher().setBackupValue(entry.getKey(), entry.getValue()); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/DisguiseType.java b/src/me/libraryaddict/disguise/disguisetypes/DisguiseType.java index 4407edf8..2bdd0069 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/DisguiseType.java +++ b/src/me/libraryaddict/disguise/disguisetypes/DisguiseType.java @@ -337,7 +337,7 @@ public enum DisguiseType return objectId; } - public Class getWatcherClass() + public Class getWatcherClass() { return watcherClass; } diff --git a/src/me/libraryaddict/disguise/disguisetypes/FlagType.java b/src/me/libraryaddict/disguise/disguisetypes/FlagType.java new file mode 100644 index 00000000..6b0a8079 --- /dev/null +++ b/src/me/libraryaddict/disguise/disguisetypes/FlagType.java @@ -0,0 +1,260 @@ +package me.libraryaddict.disguise.disguisetypes; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.UUID; +import java.util.Map.Entry; + +import org.bukkit.Color; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +import com.google.common.base.Optional; + +import me.libraryaddict.disguise.disguisetypes.watchers.*; + +public class FlagType +{ + private static FlagType[] _values = new FlagType[0]; + + public static FlagType AGEABLE_BABY = new FlagType(AgeableWatcher.class, 11, false); + + public static FlagType AREA_EFFECT_COLOR = new FlagType(AreaEffectCloudWatcher.class, 6, + Color.BLACK.asRGB()); + + public static FlagType AREA_EFFECT_IGNORE_RADIUS = new FlagType(AreaEffectCloudWatcher.class, 7, false); + + public static FlagType AREA_EFFECT_PARTICLE = new FlagType(AreaEffectCloudWatcher.class, 8, 0); + + public static FlagType AREA_EFFECT_RADIUS = new FlagType(AreaEffectCloudWatcher.class, 6, 0F); + + public static FlagType ARMORSTAND_META = new FlagType(ArmorStandWatcher.class, 10, (byte) 0); + + public static FlagType ARROW_CRITICAL = new FlagType(ArrowWatcher.class, 6, (byte) 0); + + public static FlagType BAT_HANGING = new FlagType(BatWatcher.class, 11, (byte) 1); + + public static FlagType BLAZE_BLAZING = new FlagType(BlazeWatcher.class, 11, false); + + public static FlagType BOAT_DAMAGE = new FlagType(BoatWatcher.class, 7, 40F); + + public static FlagType CREEPER_IGNITED = new FlagType(CreeperWatcher.class, 13, false); + + public static FlagType CREEPER_POWERED = new FlagType(CreeperWatcher.class, 12, false); + + public static FlagType DROPPED_ITEM = new FlagType(DroppedItemWatcher.class, 6, + new ItemStack(Material.AIR)); + + public static FlagType ENDER_CRYSTAL_BEAM = new FlagType(EnderCrystalWatcher.class, 6, Optional.absent()); + + public static FlagType ENDER_CRYSTAL_PLATE = new FlagType(EnderCrystalWatcher.class, 6, false); + + public static FlagType ENDERDRAGON_PHASE = new FlagType(EnderDragonWatcher.class, 6, 0); + + public static FlagType ENDERMAN_AGRESSIVE = new FlagType(EndermanWatcher.class, 12, false); + + public static FlagType> ENDERMAN_ITEM = new FlagType>(EndermanWatcher.class, 11, + Optional.of(1)); + + public static FlagType ENTITY_AIR_TICKS = new FlagType(FlagWatcher.class, 1, 0); + + public static FlagType ENTITY_CUSTOM_NAME = new FlagType(FlagWatcher.class, 2, null); + + public static FlagType ENTITY_CUSTOM_NAME_VISIBLE = new FlagType(FlagWatcher.class, 3, false); + + public static FlagType ENTITY_META = new FlagType(FlagWatcher.class, 0, (byte) 0); + + public static FlagType ENTITY_NO_GRAVITY = new FlagType(FlagWatcher.class, 5, false); + + public static FlagType ENTITY_SILENT = new FlagType(FlagWatcher.class, 4, 0); + + public static FlagType GHAST_AGRESSIVE = new FlagType(GhastWatcher.class, 11, false); + + public static FlagType GUARDIAN_FLAG = new FlagType(GuardianWatcher.class, 11, (byte) 0); + + public static FlagType GUARDIAN_TARGET = new FlagType(GuardianWatcher.class, 12, 0); + + public static FlagType HORSE_ARMOR = new FlagType(HorseWatcher.class, 16, 0); + + public static FlagType HORSE_COLOR = new FlagType(HorseWatcher.class, 14, 0); + + public static FlagType HORSE_META = new FlagType(HorseWatcher.class, 12, (byte) 0); + + public static FlagType> HORSE_OWNER = new FlagType>(HorseWatcher.class, 15, + Optional. absent()); + + public static FlagType HORSE_STYLE = new FlagType(HorseWatcher.class, 14, 0); + + public static FlagType HORSE_VARIANT = new FlagType(HorseWatcher.class, 13, 0); + + public static FlagType INSENTIENT_META = new FlagType(LivingWatcher.class, 10, (byte) 0); + + public static FlagType ITEMFRAME_ITEM = new FlagType(ItemFrameWatcher.class, 6, null); + + public static FlagType ITEMFRAME_ROTATION = new FlagType(ItemFrameWatcher.class, 6, (byte) 0); + + public static FlagType LIVING_ARROWS = new FlagType(LivingWatcher.class, 9, 0); + + public static FlagType LIVING_HEALTH = new FlagType(LivingWatcher.class, 6, 0F); + + public static FlagType LIVING_POTION_AMBIENT = new FlagType(LivingWatcher.class, 8, false); + + public static FlagType LIVING_POTIONS = new FlagType(LivingWatcher.class, 7, 0); + + public static FlagType MINECART_BLOCK = new FlagType(MinecartWatcher.class, 8, 0); + + public static FlagType MINECART_BLOCK_VISIBLE = new FlagType(MinecartWatcher.class, 10, false); + + public static FlagType MINECART_BLOCK_Y = new FlagType(MinecartWatcher.class, 9, 0); + + public static FlagType OCELOT_TYPE = new FlagType(OcelotWatcher.class, 14, 0); + + public static FlagType PIG_SADDLED = new FlagType(PigWatcher.class, 12, false); + + public static FlagType PLAYER_SKIN = new FlagType(PlayerWatcher.class, 12, (byte) 0); + + public static FlagType RABBIT_TYPE = new FlagType(RabbitWatcher.class, 12, 0); + + public static FlagType SHEEP_WOOL = new FlagType(SheepWatcher.class, 12, (byte) 0); + + public static FlagType SKELETON_TYPE = new FlagType(SkeletonWatcher.class, 11, 0); + + public static FlagType SLIME_SIZE = new FlagType(SlimeWatcher.class, 11, 0); + + public static FlagType TAMEABLE_META = new FlagType(TameableWatcher.class, 12, (byte) 0); + + public static FlagType> TAMEABLE_OWNER = new FlagType>(TameableWatcher.class, 13, + Optional. absent()); + + public static FlagType TIPPED_ARROW_COLOR = new FlagType(TippedArrowWatcher.class, 6, Color.WHITE.asRGB()); + + public static FlagType VILLAGER_PROFESSION = new FlagType(VillagerWatcher.class, 12, 0); + + public static FlagType WITCH_AGGRESSIVE = new FlagType(WitchWatcher.class, 11, false); + + public static FlagType WITHER_INVUL = new FlagType(WitchWatcher.class, 14, 0); + + public static FlagType WITHER_TARGET_1 = new FlagType(WitherWatcher.class, 11, 0); + + public static FlagType WITHER_TARGET_2 = new FlagType(WitherWatcher.class, 12, 0); + + public static FlagType WITHER_TARGET_3 = new FlagType(WitherWatcher.class, 13, 0); + + public static FlagType WITHERSKULL_BLUE = new FlagType(WitherSkullWatcher.class, 6, false); + + public static FlagType WOLF_BEGGING = new FlagType(WolfWatcher.class, 15, false); + + public static FlagType WOLF_COLLAR = new FlagType(WolfWatcher.class, 16, 14); + + public static FlagType WOLF_DAMAGE = new FlagType(WolfWatcher.class, 14, 0F); + + public static FlagType ZOMBIE_AGGRESSIVE = new FlagType(ZombieWatcher.class, 14, false); + + public static FlagType ZOMBIE_BABY = new FlagType(ZombieWatcher.class, 11, false); + + public static FlagType ZOMBIE_PROFESSION = new FlagType(ZombieWatcher.class, 12, 0); + + public static FlagType ZOMBIE_SHAKING = new FlagType(ZombieWatcher.class, 13, false); + + static + { + // Simple verification for the dev that he's setting up the FlagType's properly. + // All flag types should be from 0 to with no empty numbers. + // All flag types should never occur twice. + + HashMap maxValues = new HashMap(); + + for (FlagType type : values()) + { + if (maxValues.containsKey(type.getFlagWatcher()) && maxValues.get(type.getFlagWatcher()) > type.getIndex()) + continue; + + maxValues.put(type.getFlagWatcher(), type.getIndex()); + } + + for (Entry entry : maxValues.entrySet()) + { + loop: + + for (int i = 0; i < entry.getValue(); i++) + { + FlagType found = null; + + for (FlagType type : values()) + { + if (type.getIndex() != i) + continue; + + if (!type.getFlagWatcher().isAssignableFrom(entry.getKey())) + continue; + + if (found != null) + { + System.err.println(entry.getKey().getSimpleName() + " has multiple FlagType's registered for the index " + + i + " (" + type.getFlagWatcher().getSimpleName() + ", " + found.getFlagWatcher().getSimpleName() + + ")"); + continue loop; + } + + found = type; + } + + if (found != null) + continue; + + System.err.println(entry.getKey().getSimpleName() + " has no FlagType registered for the index " + i); + } + } + } + + public static FlagType getFlag(Class watcherClass, int flagNo) + { + for (FlagType type : values()) + { + if (type.getIndex() != flagNo) + continue; + + if (!type.getFlagWatcher().isAssignableFrom(watcherClass)) + continue; + + return type; + } + + return null; + } + + public static FlagType[] values() + { + return _values; + } + + private Y _defaultValue; + + private int _index; + + private Class _watcher; + + private FlagType(Class watcher, int index, Y defaultValue) + { + _index = index; + _watcher = watcher; + + _values = Arrays.copyOf(_values, _values.length + 1); + _values[_values.length - 1] = this; + } + + public Y getDefault() + { + return _defaultValue; + } + + public Class getFlagWatcher() + { + return _watcher; + } + + public int getIndex() + { + return _index; + } +} diff --git a/src/me/libraryaddict/disguise/disguisetypes/FlagWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/FlagWatcher.java index fb03576c..d0894d30 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/FlagWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/FlagWatcher.java @@ -28,16 +28,15 @@ import me.libraryaddict.disguise.utilities.ReflectionManager; public class FlagWatcher { - private boolean addEntityAnimations = DisguiseConfig.isEntityAnimationsAdded(); /** * These are the entity values I need to add else it could crash them.. */ - private HashMap backupEntityValues = new HashMap<>(); + private HashMap backupEntityValues = new HashMap<>(); private TargetedDisguise disguise; - private HashMap entityValues = new HashMap<>(); - private boolean hasDied; + private HashMap entityValues = new HashMap<>(); private EntityEquipment equipment; + private boolean hasDied; private HashSet modifiedEntityAnimations = new HashSet<>(); private List watchableObjects; @@ -78,7 +77,7 @@ public class FlagWatcher cloned = new FlagWatcher(getDisguise()); } - cloned.entityValues = (HashMap) entityValues.clone(); + cloned.entityValues = (HashMap) entityValues.clone(); cloned.equipment = ReflectionManager.createEntityEquipment(cloned.getDisguise().getEntity()); cloned.modifiedEntityAnimations = (HashSet) modifiedEntityAnimations.clone(); cloned.addEntityAnimations = addEntityAnimations; @@ -159,7 +158,7 @@ public class FlagWatcher if (sendAllCustom) { // Its sending the entire meta data. Better add the custom meta - for (int id : entityValues.keySet()) + for (FlagType id : entityValues.keySet()) { if (sentValues.contains(id)) { @@ -173,7 +172,8 @@ public class FlagWatcher continue; } - WrappedWatchableObject watch = new WrappedWatchableObject(ReflectionManager.createDataWatcherItem(id, value)); + WrappedWatchableObject watch = new WrappedWatchableObject( + ReflectionManager.createDataWatcherItem(id.getIndex(), value)); newList.add(watch); } @@ -235,7 +235,7 @@ public class FlagWatcher public String getCustomName() { - return (String) getValue(2, null); + return (String) getValue(FlagType.ENTITY_CUSTOM_NAME); } protected TargetedDisguise getDisguise() @@ -245,7 +245,12 @@ public class FlagWatcher private boolean getEntityFlag(int byteValue) { - return ((byte) getValue(0, (byte) 0) & 1 << byteValue) != 0; + return ((byte) getValue(FlagType.ENTITY_META) & 1 << byteValue) != 0; + } + + public EntityEquipment getEquipment() + { + return equipment; } public ItemStack getItemInMainHand() @@ -264,19 +269,38 @@ public class FlagWatcher return equipment.getItemInOffHand(); } - public EntityEquipment getEquipment() + public ItemStack getItemStack(EquipmentSlot slot) { - return equipment; + if (equipment == null) + return null; + + switch (slot) + { + case CHEST: + return equipment.getChestplate(); + case FEET: + return equipment.getBoots(); + case HAND: + return equipment.getItemInMainHand(); + case HEAD: + return equipment.getHelmet(); + case LEGS: + return equipment.getLeggings(); + case OFF_HAND: + return equipment.getItemInOffHand(); + } + + return null; } - protected Y getValue(int no, Y backup) + protected Y getValue(FlagType no) { if (entityValues.containsKey(no)) { return (Y) entityValues.get(no); } - return backup; + return no.getDefault(); } public List getWatchableObjects() @@ -299,9 +323,14 @@ public class FlagWatcher return entityValues.containsKey(no); } + public boolean isBurning() + { + return getEntityFlag(0); + } + public boolean isCustomNameVisible() { - return (boolean) getValue(3, false); + return getValue(FlagType.ENTITY_CUSTOM_NAME_VISIBLE); } public boolean isEntityAnimationsAdded() @@ -309,9 +338,29 @@ public class FlagWatcher return addEntityAnimations; } - public boolean isBurning() + public boolean isFlyingWithElytra() { - return getEntityFlag(0); + return getEntityFlag(7); + } + + public boolean isGlowing() + { + return getEntityFlag(6); + } + + public boolean isInvisible() + { + return getEntityFlag(5); + } + + public boolean isNoGravity() + { + return getValue(FlagType.ENTITY_NO_GRAVITY); + } + + public boolean isRightClicking() + { + return getEntityFlag(4); } public boolean isSneaking() @@ -324,26 +373,6 @@ public class FlagWatcher return getEntityFlag(3); } - public boolean isRightClicking() - { - return getEntityFlag(4); - } - - public boolean isInvisible() - { - return getEntityFlag(5); - } - - public boolean isGlowing() - { - return getEntityFlag(6); - } - - public boolean isFlyingWithElytra() - { - return getEntityFlag(7); - } - public void rebuildWatchableObjects() { watchableObjects = new ArrayList<>(); @@ -368,7 +397,7 @@ public class FlagWatcher } } - protected void sendData(int... dataValues) + protected void sendData(FlagType... dataValues) { if (!DisguiseAPI.isDisguiseInUse(getDisguise()) || getDisguise().getWatcher() != this) { @@ -377,7 +406,7 @@ public class FlagWatcher List list = new ArrayList<>(); - for (int data : dataValues) + for (FlagType data : dataValues) { if (!entityValues.containsKey(data) || entityValues.get(data) == null) { @@ -386,7 +415,7 @@ public class FlagWatcher Object value = entityValues.get(data); - if (isEntityAnimationsAdded() && DisguiseConfig.isMetadataPacketsEnabled() && data == 0) + if (isEntityAnimationsAdded() && DisguiseConfig.isMetadataPacketsEnabled() && data == FlagType.ENTITY_META) { if (!PacketsManager.isStaticMetadataDisguiseType(disguise)) { @@ -395,7 +424,8 @@ public class FlagWatcher } } - WrappedWatchableObject watch = new WrappedWatchableObject(ReflectionManager.createDataWatcherItem(data, value)); + WrappedWatchableObject watch = new WrappedWatchableObject( + ReflectionManager.createDataWatcherItem(data.getIndex(), value)); list.add(watch); } @@ -436,7 +466,7 @@ public class FlagWatcher setItemStack(EquipmentSlot.FEET, itemstack[3]); } - protected void setBackupValue(int no, Object value) + protected void setBackupValue(FlagType no, Object value) { backupEntityValues.put(no, value); } @@ -445,7 +475,7 @@ public class FlagWatcher { setEntityFlag(0, setBurning); - sendData(0); + sendData(FlagType.ENTITY_META); } public void setCustomName(String name) @@ -455,48 +485,48 @@ public class FlagWatcher name = name.substring(0, 64); } - setValue(2, name); - sendData(2); + setValue(FlagType.ENTITY_CUSTOM_NAME, name); + sendData(FlagType.ENTITY_CUSTOM_NAME); } public void setCustomNameVisible(boolean display) { - setValue(3, display); - sendData(3); + setValue(FlagType.ENTITY_CUSTOM_NAME_VISIBLE, display); + sendData(FlagType.ENTITY_CUSTOM_NAME_VISIBLE); } private void setEntityFlag(int byteValue, boolean flag) { modifiedEntityAnimations.add(byteValue); - byte b0 = (byte) getValue(0, (byte) 0); + byte b0 = (byte) getValue(FlagType.ENTITY_META); if (flag) { - setValue(0, (byte) (b0 | 1 << byteValue)); + setValue(FlagType.ENTITY_META, (byte) (b0 | 1 << byteValue)); } else { - setValue(0, (byte) (b0 & ~(1 << byteValue))); + setValue(FlagType.ENTITY_META, (byte) (b0 & ~(1 << byteValue))); } } - public void setInvisible(boolean setInvis) - { - setEntityFlag(5, setInvis); - sendData(0); - } - - public void setGlowing(boolean glowing) - { - setEntityFlag(6, glowing); - sendData(0); - } - public void setFlyingWithElytra(boolean flying) { setEntityFlag(7, flying); - sendData(0); + sendData(FlagType.ENTITY_META); + } + + public void setGlowing(boolean glowing) + { + setEntityFlag(6, glowing); + sendData(FlagType.ENTITY_META); + } + + public void setInvisible(boolean setInvis) + { + setEntityFlag(5, setInvis); + sendData(FlagType.ENTITY_META); } /** @@ -520,6 +550,34 @@ public class FlagWatcher setItemStack(EquipmentSlot.OFF_HAND, itemstack); } + private void setItemStack(EntityEquipment equipment, EquipmentSlot slot, ItemStack itemStack) + { + if (equipment == null) + return; + + switch (slot) + { + case CHEST: + equipment.setChestplate(itemStack); + break; + case FEET: + equipment.setBoots(itemStack); + break; + case HAND: + equipment.setItemInMainHand(itemStack); + break; + case HEAD: + equipment.setHelmet(itemStack); + break; + case LEGS: + equipment.setLeggings(itemStack); + break; + case OFF_HAND: + equipment.setItemInOffHand(itemStack); + break; + } + } + public void setItemStack(EquipmentSlot slot, ItemStack itemStack) { if (equipment == null) @@ -569,77 +627,31 @@ public class FlagWatcher } } - private void setItemStack(EntityEquipment equipment, EquipmentSlot slot, ItemStack itemStack) + public void setNoGravity(boolean noGravity) { - if (equipment == null) - return; - - switch (slot) - { - case CHEST: - equipment.setChestplate(itemStack); - break; - case FEET: - equipment.setBoots(itemStack); - break; - case HAND: - equipment.setItemInMainHand(itemStack); - break; - case HEAD: - equipment.setHelmet(itemStack); - break; - case LEGS: - equipment.setLeggings(itemStack); - break; - case OFF_HAND: - equipment.setItemInOffHand(itemStack); - break; - } - } - - public ItemStack getItemStack(EquipmentSlot slot) - { - if (equipment == null) - return null; - - switch (slot) - { - case CHEST: - return equipment.getChestplate(); - case FEET: - return equipment.getBoots(); - case HAND: - return equipment.getItemInMainHand(); - case HEAD: - return equipment.getHelmet(); - case LEGS: - return equipment.getLeggings(); - case OFF_HAND: - return equipment.getItemInOffHand(); - } - - return null; + setValue(FlagType.ENTITY_NO_GRAVITY, noGravity); + sendData(FlagType.ENTITY_NO_GRAVITY); } public void setRightClicking(boolean setRightClicking) { setEntityFlag(4, setRightClicking); - sendData(0); + sendData(FlagType.ENTITY_META); } public void setSneaking(boolean setSneaking) { setEntityFlag(1, setSneaking); - sendData(0); + sendData(FlagType.ENTITY_META); } public void setSprinting(boolean setSprinting) { setEntityFlag(3, setSprinting); - sendData(0); + sendData(FlagType.ENTITY_META); } - protected void setValue(int id, Object value) + protected void setValue(FlagType id, Y value) { entityValues.put(id, value); diff --git a/src/me/libraryaddict/disguise/disguisetypes/RabbitType.java b/src/me/libraryaddict/disguise/disguisetypes/RabbitType.java index 0f74e5bf..13d52b4c 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/RabbitType.java +++ b/src/me/libraryaddict/disguise/disguisetypes/RabbitType.java @@ -2,7 +2,6 @@ package me.libraryaddict.disguise.disguisetypes; public enum RabbitType { - BLACK(2), BROWN(0), GOLD(4), KILLER_BUNNY(99), PATCHES(3), PEPPER(5), WHITE(1); public static RabbitType getType(int id) diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/AgeableWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/AgeableWatcher.java index 97289e2a..eacf5919 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/AgeableWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/AgeableWatcher.java @@ -1,6 +1,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; public class AgeableWatcher extends LivingWatcher { @@ -17,7 +18,7 @@ public class AgeableWatcher extends LivingWatcher public boolean isBaby() { - return (boolean) getValue(11, false); + return getValue(FlagType.AGEABLE_BABY); } public void setAdult() @@ -32,8 +33,8 @@ public class AgeableWatcher extends LivingWatcher public void setBaby(boolean isBaby) { - setValue(11, isBaby); - sendData(11); + setValue(FlagType.AGEABLE_BABY, isBaby); + sendData(FlagType.AGEABLE_BABY); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/AreaEffectCloudWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/AreaEffectCloudWatcher.java index acfee458..efa17141 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/AreaEffectCloudWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/AreaEffectCloudWatcher.java @@ -3,48 +3,58 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import java.awt.Color; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; /** * @author Navid */ -public class AreaEffectCloudWatcher extends FlagWatcher { +public class AreaEffectCloudWatcher extends FlagWatcher +{ - public AreaEffectCloudWatcher(Disguise disguise) { + public AreaEffectCloudWatcher(Disguise disguise) + { super(disguise); } - public float getRadius() { - return (float) getValue(5, 0f); + public float getRadius() + { + return getValue(FlagType.AREA_EFFECT_RADIUS); } - public int getColor() { - return (int) getValue(6, Color.BLACK.getRGB()); + public int getColor() + { + return getValue(FlagType.AREA_EFFECT_COLOR); } - public boolean isIgnoreRadius() { - return (boolean) getValue(7, false); + public boolean isIgnoreRadius() + { + return getValue(FlagType.AREA_EFFECT_IGNORE_RADIUS); } - public int getParticleId() { - return (int) getValue(8, 0); + public int getParticleId() + { + return getValue(FlagType.AREA_EFFECT_PARTICLE); } - public void setRadius(float radius) { - setValue(5, radius); + public void setRadius(float radius) + { + setValue(FlagType.AREA_EFFECT_RADIUS, radius); } - public void setColor(int color) { - setValue(6, color); + public void setColor(int color) + { + setValue(FlagType.AREA_EFFECT_COLOR, color); } - public void setIgnoreRadius(boolean ignore) { - setValue(7, ignore); + public void setIgnoreRadius(boolean ignore) + { + setValue(FlagType.AREA_EFFECT_IGNORE_RADIUS, ignore); } - public void setParticleId(int particleId) { - setValue(8, particleId); + public void setParticleId(int particleId) + { + setValue(FlagType.AREA_EFFECT_PARTICLE, particleId); } - } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/ArmorStandWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/ArmorStandWatcher.java index 32b7f894..136d0bd8 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/ArmorStandWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/ArmorStandWatcher.java @@ -1,6 +1,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; public class ArmorStandWatcher extends LivingWatcher { @@ -12,7 +13,7 @@ public class ArmorStandWatcher extends LivingWatcher private boolean getArmorStandFlag(int value) { - return (getValue(10, 0) & value) != 0; + return (getValue(FlagType.ARMORSTAND_META) & value) != 0; } public boolean isNoBasePlate() @@ -42,7 +43,8 @@ public class ArmorStandWatcher extends LivingWatcher private void setArmorStandFlag(int value, boolean isTrue) { - byte b1 = (byte) getValue(10, (byte) 0); + byte b1 = (byte) getValue(FlagType.ARMORSTAND_META); + if (isTrue) { b1 = (byte) (b1 | value); @@ -51,38 +53,39 @@ public class ArmorStandWatcher extends LivingWatcher { b1 = (byte) (b1 & value); } - setValue(10, b1); - sendData(10); + + setValue(FlagType.ARMORSTAND_META, b1); + sendData(FlagType.ARMORSTAND_META); } public void setNoBasePlate(boolean noBasePlate) { setArmorStandFlag(8, noBasePlate); - sendData(10); + sendData(FlagType.ARMORSTAND_META); } public void setNoGravity(boolean noGravity) { setArmorStandFlag(2, noGravity); - sendData(10); + sendData(FlagType.ARMORSTAND_META); } public void setShowArms(boolean showArms) { setArmorStandFlag(4, showArms); - sendData(10); + sendData(FlagType.ARMORSTAND_META); } public void setSmall(boolean isSmall) { setArmorStandFlag(1, isSmall); - sendData(10); + sendData(FlagType.ARMORSTAND_META); } public void setMarker(boolean isMarker) { setArmorStandFlag(10, isMarker); - sendData(10); + sendData(FlagType.ARMORSTAND_META); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/ArrowWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/ArrowWatcher.java index 93c5d890..1285ead8 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/ArrowWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/ArrowWatcher.java @@ -1,21 +1,26 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; -public class ArrowWatcher extends FlagWatcher { +public class ArrowWatcher extends FlagWatcher +{ - public ArrowWatcher(Disguise disguise) { + public ArrowWatcher(Disguise disguise) + { super(disguise); } - public boolean isCritical() { - return (byte) getValue(5, (byte) 0) == 1; + public boolean isCritical() + { + return (byte) getValue(FlagType.ARROW_CRITICAL) == 1; } - public void setCritical(boolean critical) { - setValue(5, (byte) (critical ? 1 : 0)); - sendData(5); + public void setCritical(boolean critical) + { + setValue(FlagType.ARROW_CRITICAL, (byte) (critical ? 1 : 0)); + sendData(FlagType.ARROW_CRITICAL); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/BatWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/BatWatcher.java index d6464d9a..b2a824ac 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/BatWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/BatWatcher.java @@ -1,20 +1,26 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; -public class BatWatcher extends LivingWatcher { +public class BatWatcher extends LivingWatcher +{ - public BatWatcher(Disguise disguise) { + public BatWatcher(Disguise disguise) + { super(disguise); + setHanging(false); } - public boolean isHanging() { - return ((byte)getValue(11, (byte) 1)) == 1; + public boolean isHanging() + { + return ((byte) getValue(FlagType.BAT_HANGING)) == 1; } - public void setHanging(boolean hanging) { - setValue(11, hanging ? (byte) 1 : (byte) 0); - sendData(11); + public void setHanging(boolean hanging) + { + setValue(FlagType.BAT_HANGING, hanging ? (byte) 1 : (byte) 0); + sendData(FlagType.BAT_HANGING); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/BlazeWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/BlazeWatcher.java index 6e8d4f57..9a0cf850 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/BlazeWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/BlazeWatcher.java @@ -1,6 +1,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; public class BlazeWatcher extends LivingWatcher { @@ -11,13 +12,13 @@ public class BlazeWatcher extends LivingWatcher public boolean isBlazing() { - return (boolean) getValue(11, false); + return getValue(FlagType.BLAZE_BLAZING); } public void setBlazing(boolean isBlazing) { - setValue(11, isBlazing); - sendData(11); + setValue(FlagType.BLAZE_BLAZING, isBlazing); + sendData(FlagType.BLAZE_BLAZING); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/BoatWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/BoatWatcher.java index 2eca213b..0f7338ce 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/BoatWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/BoatWatcher.java @@ -1,6 +1,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; public class BoatWatcher extends FlagWatcher @@ -15,13 +16,13 @@ public class BoatWatcher extends FlagWatcher public float getDamage() { - return getValue(7, 40F); + return getValue(FlagType.BOAT_DAMAGE); } public void setDamage(float dmg) { - setValue(7, dmg); - sendData(7); + setValue(FlagType.BOAT_DAMAGE, dmg); + sendData(FlagType.BOAT_DAMAGE); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/CreeperWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/CreeperWatcher.java index 79189c95..0e9f5784 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/CreeperWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/CreeperWatcher.java @@ -1,29 +1,36 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; -public class CreeperWatcher extends LivingWatcher { +public class CreeperWatcher extends LivingWatcher +{ - public CreeperWatcher(Disguise disguise) { + public CreeperWatcher(Disguise disguise) + { super(disguise); } - public boolean isIgnited() { - return (boolean) getValue(13, false); + public boolean isIgnited() + { + return (boolean) getValue(FlagType.CREEPER_IGNITED); } - public boolean isPowered() { - return (boolean) getValue(12, false); + public boolean isPowered() + { + return (boolean) getValue(FlagType.CREEPER_POWERED); } - public void setIgnited(boolean ignited) { - setValue(13, ignited); - sendData(13); + public void setIgnited(boolean ignited) + { + setValue(FlagType.CREEPER_IGNITED, ignited); + sendData(FlagType.CREEPER_IGNITED); } - public void setPowered(boolean powered) { - setValue(12, powered); - sendData(12); + public void setPowered(boolean powered) + { + setValue(FlagType.CREEPER_POWERED, powered); + sendData(FlagType.CREEPER_POWERED); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/DroppedItemWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/DroppedItemWatcher.java index 04b28ccf..596b16b4 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/DroppedItemWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/DroppedItemWatcher.java @@ -1,23 +1,29 @@ package me.libraryaddict.disguise.disguisetypes.watchers; +import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; //TODO: Add support for custom items instead of just stone -public class DroppedItemWatcher extends FlagWatcher { +public class DroppedItemWatcher extends FlagWatcher +{ - public DroppedItemWatcher(Disguise disguise) { + public DroppedItemWatcher(Disguise disguise) + { super(disguise); } - public ItemStack getItemStack() { - return (ItemStack) getValue(5, new ItemStack(1)); + public ItemStack getItemStack() + { + return getValue(FlagType.DROPPED_ITEM); } - public void setItemStack(ItemStack item) { - setValue(5, item); - sendData(5); + public void setItemStack(ItemStack item) + { + setValue(FlagType.DROPPED_ITEM, item); + sendData(FlagType.DROPPED_ITEM); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/EnderCrystalWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/EnderCrystalWatcher.java index 2666d2e3..94f91856 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/EnderCrystalWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/EnderCrystalWatcher.java @@ -4,6 +4,7 @@ import com.comphenix.protocol.wrappers.BlockPosition; import com.google.common.base.Optional; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; /** @@ -18,24 +19,24 @@ public class EnderCrystalWatcher extends FlagWatcher public void setBeamTarget(BlockPosition position) { - setValue(5, Optional.of(position)); - sendData(5); + setValue(FlagType.ENDER_CRYSTAL_BEAM, Optional.of(position)); + sendData(FlagType.ENDER_CRYSTAL_BEAM); } public Optional getBeamTarget() { - return (Optional) getValue(5, Optional.absent()); + return getValue(FlagType.ENDER_CRYSTAL_BEAM); } public void setShowBottom(boolean bool) { - setValue(6, bool); - sendData(6); + setValue(FlagType.ENDER_CRYSTAL_PLATE, bool); + sendData(FlagType.ENDER_CRYSTAL_PLATE); } public boolean isShowBottom() { - return (boolean) getValue(6, false); + return getValue(FlagType.ENDER_CRYSTAL_PLATE); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/EnderDragonWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/EnderDragonWatcher.java index f299b18c..c3bd8b38 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/EnderDragonWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/EnderDragonWatcher.java @@ -1,22 +1,27 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; /** * @author Navid */ -public class EnderDragonWatcher extends LivingWatcher { +public class EnderDragonWatcher extends LivingWatcher +{ - public EnderDragonWatcher(Disguise disguise) { + public EnderDragonWatcher(Disguise disguise) + { super(disguise); } - public int getPhase() { - return (int) getValue(11, 0); + public int getPhase() + { + return getValue(FlagType.ENDERDRAGON_PHASE); } - public void setPhase(int phase) { - setValue(11, phase); - sendData(11); + public void setPhase(int phase) + { + setValue(FlagType.ENDERDRAGON_PHASE, phase); + sendData(FlagType.ENDERDRAGON_PHASE); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/EndermanWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/EndermanWatcher.java index 20daf454..4778bbe2 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/EndermanWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/EndermanWatcher.java @@ -6,48 +6,63 @@ import org.bukkit.inventory.ItemStack; import com.google.common.base.Optional; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; import me.libraryaddict.disguise.utilities.ReflectionManager; -public class EndermanWatcher extends LivingWatcher { +public class EndermanWatcher extends LivingWatcher +{ - public EndermanWatcher(Disguise disguise) { + public EndermanWatcher(Disguise disguise) + { super(disguise); } @Override - public ItemStack getItemInMainHand() { - Optional value = (Optional) getValue(11, Optional.of(1)); - if (value.isPresent()) { + public ItemStack getItemInMainHand() + { + Optional value = getValue(FlagType.ENDERMAN_ITEM); + + if (value.isPresent()) + { Pair pair = ReflectionManager.getFromCombinedId(value.get()); int id = pair.getLeft(); int data = pair.getRight(); + return new ItemStack(id, 1, (short) data); - } else { + } + else + { return null; } } @Override - public void setItemInMainHand(ItemStack itemstack) { + public void setItemInMainHand(ItemStack itemstack) + { setItemInMainHand(itemstack.getTypeId(), itemstack.getDurability()); } - public void setItemInMainHand(int typeId) { + public void setItemInMainHand(int typeId) + { setItemInMainHand(typeId, 0); } - public void setItemInMainHand(int typeId, int data) { + public void setItemInMainHand(int typeId, int data) + { int combined = ReflectionManager.getCombinedId(typeId, data); - setValue(11, Optional.of(combined)); + + setValue(FlagType.ENDERMAN_ITEM, Optional.of(combined)); } - public boolean isAggressive() { - return (boolean) getValue(12, false); + public boolean isAggressive() + { + return getValue(FlagType.ENDERMAN_AGRESSIVE); } - public void setAggressive(boolean isAggressive) { - setValue(12, isAggressive); - sendData(12); + public void setAggressive(boolean isAggressive) + { + setValue(FlagType.ENDERMAN_AGRESSIVE, isAggressive); + sendData(FlagType.ENDERMAN_AGRESSIVE); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/FallingBlockWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/FallingBlockWatcher.java index b71ab1ab..a5fd6d74 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/FallingBlockWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/FallingBlockWatcher.java @@ -8,31 +8,40 @@ import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; import me.libraryaddict.disguise.utilities.DisguiseUtilities; -public class FallingBlockWatcher extends FlagWatcher { - +public class FallingBlockWatcher extends FlagWatcher +{ private ItemStack block; - public FallingBlockWatcher(Disguise disguise) { + public FallingBlockWatcher(Disguise disguise) + { super(disguise); } @Override - public FallingBlockWatcher clone(Disguise disguise) { + public FallingBlockWatcher clone(Disguise disguise) + { FallingBlockWatcher watcher = (FallingBlockWatcher) super.clone(disguise); watcher.setBlock(getBlock()); + return watcher; } - public ItemStack getBlock() { + public ItemStack getBlock() + { return block; } - public void setBlock(ItemStack block) { + public void setBlock(ItemStack block) + { this.block = block; - if (block.getType() == null || block.getType() == Material.AIR) { + + if (block.getType() == null || block.getType() == Material.AIR) + { block.setType(Material.STONE); } - if (DisguiseAPI.isDisguiseInUse(getDisguise()) && getDisguise().getWatcher() == this) { + + if (DisguiseAPI.isDisguiseInUse(getDisguise()) && getDisguise().getWatcher() == this) + { DisguiseUtilities.refreshTrackers(getDisguise()); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/GhastWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/GhastWatcher.java index e965df26..deb6304d 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/GhastWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/GhastWatcher.java @@ -1,20 +1,25 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; -public class GhastWatcher extends LivingWatcher { +public class GhastWatcher extends LivingWatcher +{ - public GhastWatcher(Disguise disguise) { + public GhastWatcher(Disguise disguise) + { super(disguise); } - public boolean isAggressive() { - return (boolean) getValue(11, false); + public boolean isAggressive() + { + return getValue(FlagType.GHAST_AGRESSIVE); } - public void setAggressive(boolean isAggressive) { - setValue(11, isAggressive); - sendData(11); + public void setAggressive(boolean isAggressive) + { + setValue(FlagType.GHAST_AGRESSIVE, isAggressive); + sendData(FlagType.GHAST_AGRESSIVE); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/GuardianWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/GuardianWatcher.java index b8a3629c..2acafcc1 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/GuardianWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/GuardianWatcher.java @@ -1,72 +1,101 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import org.bukkit.Bukkit; +import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; -public class GuardianWatcher extends LivingWatcher { +public class GuardianWatcher extends LivingWatcher +{ - public GuardianWatcher(Disguise disguise) { + public GuardianWatcher(Disguise disguise) + { super(disguise); } /** * Is this guardian targetting someone? + * * @return */ - public boolean isTarget() { - return ((int)getValue(12, 0)) != 0; + public boolean isTarget() + { + return ((int) getValue(FlagType.GUARDIAN_TARGET)) != 0; } /** * Shoot a beam at the given entityId. + * * @param entityId */ - public void setTarget(int entityId) { - setValue(12, entityId); - sendData(12); + public void setTarget(int entityId) + { + setValue(FlagType.GUARDIAN_TARGET, entityId); + sendData(FlagType.GUARDIAN_TARGET); + } + + public void setTarget(Entity entity) + { + setTarget(entity == null ? 0 : entity.getEntityId()); } /** * Shoot a beam at the given player name. + * * @param playername */ - public void setTarget(String playername) { + public void setTarget(String playername) + { Player player = Bukkit.getPlayer(playername); - if (player == null) return; - setValue(12, player.getEntityId()); - sendData(12); + + if (player == null) + return; + + setValue(FlagType.GUARDIAN_TARGET, player.getEntityId()); + sendData(FlagType.GUARDIAN_TARGET); } - public boolean isRetractingSpikes() { + public boolean isRetractingSpikes() + { return isGuardianFlag(2); } - public void setRetractingSpikes(boolean isRetracting) { + public void setRetractingSpikes(boolean isRetracting) + { setGuardianFlag(2, isRetracting); } - public boolean isElder() { + public boolean isElder() + { return isGuardianFlag(4); } - public void setElder(boolean isGuardian) { + public void setElder(boolean isGuardian) + { setGuardianFlag(4, isGuardian); } - protected boolean isGuardianFlag(int no) { - return ((byte) getValue(11, (byte) 0) & no) != 0; + protected boolean isGuardianFlag(int no) + { + return (getValue(FlagType.GUARDIAN_FLAG) & no) != 0; } - protected void setGuardianFlag(int no, boolean flag) { - byte b0 = (byte) getValue(11, (byte) 0); - if (flag) { - setValue(11, (byte) (b0 | no)); - } else { - setValue(11, (byte) (b0 & -(no + 1))); + protected void setGuardianFlag(int no, boolean flag) + { + byte b0 = getValue(FlagType.GUARDIAN_FLAG); + + if (flag) + { + setValue(FlagType.GUARDIAN_FLAG, (byte) (b0 | no)); } - sendData(11); + else + { + setValue(FlagType.GUARDIAN_FLAG, (byte) (b0 & -(no + 1))); + } + + sendData(FlagType.GUARDIAN_FLAG); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/HorseWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/HorseWatcher.java index 3e8fe68d..d3b4d78c 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/HorseWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/HorseWatcher.java @@ -11,6 +11,7 @@ import org.bukkit.inventory.ItemStack; import com.google.common.base.Optional; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; import me.libraryaddict.disguise.utilities.DisguiseUtilities; public class HorseWatcher extends AgeableWatcher @@ -19,13 +20,14 @@ public class HorseWatcher extends AgeableWatcher public HorseWatcher(Disguise disguise) { super(disguise); + setStyle(Style.values()[DisguiseUtilities.random.nextInt(Style.values().length)]); setColor(Color.values()[DisguiseUtilities.random.nextInt(Color.values().length)]); } public Variant getVariant() { - return Variant.values()[(int) getValue(13, 0)]; + return Variant.values()[getValue(FlagType.HORSE_VARIANT)]; } public void setVariant(Variant variant) @@ -39,45 +41,48 @@ public class HorseWatcher extends AgeableWatcher { variant = 0; // Crashing people is mean } - setValue(13, variant); - sendData(13); + + setValue(FlagType.HORSE_VARIANT, variant); + sendData(FlagType.HORSE_VARIANT); } public Color getColor() { - return Color.values()[((Integer) getValue(14, 0) & 0xFF)]; + return Color.values()[((Integer) getValue(FlagType.HORSE_COLOR) & 0xFF)]; } public ItemStack getHorseArmor() { int horseValue = getHorseArmorAsInt(); + switch (horseValue) { case 1: - return new ItemStack(Material.getMaterial("IRON_BARDING")); + return new ItemStack(Material.IRON_BARDING); case 2: - return new ItemStack(Material.getMaterial("GOLD_BARDING")); + return new ItemStack(Material.GOLD_BARDING); case 3: - return new ItemStack(Material.getMaterial("DIAMOND_BARDING")); + return new ItemStack(Material.DIAMOND_BARDING); default: break; } + return null; } protected int getHorseArmorAsInt() { - return (int) getValue(16, 0); + return getValue(FlagType.HORSE_ARMOR); } public Optional getOwner() { - return getValue(15, Optional. absent()); + return getValue(FlagType.HORSE_OWNER); } public Style getStyle() { - return Style.values()[((int) getValue(14, 0) >>> 8)]; + return Style.values()[(getValue(FlagType.HORSE_STYLE) >>> 8)]; } public boolean hasChest() @@ -122,7 +127,7 @@ public class HorseWatcher extends AgeableWatcher private byte getHorseFlag() { - return (byte) getValue(12, (byte) 0); + return getValue(FlagType.HORSE_META); } public void setCanBreed(boolean breed) @@ -137,22 +142,24 @@ public class HorseWatcher extends AgeableWatcher public void setColor(Color color) { - setValue(14, color.ordinal() & 0xFF | getStyle().ordinal() << 8); - sendData(14); + setValue(FlagType.HORSE_COLOR, color.ordinal() & 0xFF | getStyle().ordinal() << 8); + sendData(FlagType.HORSE_COLOR); } private void setHorseFlag(int i, boolean flag) { - byte j = (byte) getValue(12, (byte) 0); + byte j = getValue(FlagType.HORSE_META); + if (flag) { - setValue(12, (byte) (j | i)); + setValue(FlagType.HORSE_META, (byte) (j | i)); } else { - setValue(12, (byte) (j & ~i)); + setValue(FlagType.HORSE_META, (byte) (j & ~i)); } - sendData(12); + + sendData(FlagType.HORSE_META); } public void setGrazing(boolean grazing) @@ -162,16 +169,18 @@ public class HorseWatcher extends AgeableWatcher protected void setHorseArmor(int armor) { - setValue(16, armor); - sendData(16); + setValue(FlagType.HORSE_ARMOR, armor); + sendData(FlagType.HORSE_ARMOR); } public void setHorseArmor(ItemStack item) { int value = 0; + if (item != null) { Material mat = item.getType(); + if (mat == Material.IRON_BARDING) { value = 1; @@ -185,6 +194,7 @@ public class HorseWatcher extends AgeableWatcher value = 3; } } + setHorseArmor(value); } @@ -195,8 +205,8 @@ public class HorseWatcher extends AgeableWatcher public void setOwner(UUID uuid) { - setValue(15, Optional.of(uuid)); - sendData(15); + setValue(FlagType.HORSE_OWNER, Optional.of(uuid)); + sendData(FlagType.HORSE_OWNER); } public void setRearing(boolean rear) @@ -211,8 +221,8 @@ public class HorseWatcher extends AgeableWatcher public void setStyle(Style style) { - setValue(14, getColor().ordinal() & 0xFF | style.ordinal() << 8); - sendData(14); + setValue(FlagType.HORSE_STYLE, getColor().ordinal() & 0xFF | style.ordinal() << 8); + sendData(FlagType.HORSE_STYLE); } public void setTamed(boolean tamed) diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/InsentientWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/InsentientWatcher.java new file mode 100644 index 00000000..928bb35e --- /dev/null +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/InsentientWatcher.java @@ -0,0 +1,63 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; + +public class InsentientWatcher extends LivingWatcher +{ + public InsentientWatcher(Disguise disguise) + { + super(disguise); + } + + public void setLeftHanded(boolean leftHanded) + { + setRightHanded(!leftHanded); + } + + public void setRightHanded(boolean rightHanded) + { + setInsentientFlag(2, rightHanded); + sendData(FlagType.INSENTIENT_META); + } + + public boolean isRightHanded() + { + return getInsentientFlag(2); + } + + public boolean isLeftHanded() + { + return !isRightHanded(); + } + + public boolean isAI() + { + return getInsentientFlag(1); + } + + public void setAI(boolean ai) + { + setInsentientFlag(1, ai); + sendData(FlagType.INSENTIENT_META); + } + + private void setInsentientFlag(int i, boolean flag) + { + byte b0 = (byte) getValue(FlagType.INSENTIENT_META); + + if (flag) + { + setValue(FlagType.INSENTIENT_META, (byte) (b0 | 1 << i)); + } + else + { + setValue(FlagType.INSENTIENT_META, (byte) (b0 & (~1 << i))); + } + } + + private boolean getInsentientFlag(int i) + { + return ((byte) getValue(FlagType.PLAYER_SKIN) & 1 << i) != 0; + } +} diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/ItemFrameWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/ItemFrameWatcher.java index cccd5881..78ecbeab 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/ItemFrameWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/ItemFrameWatcher.java @@ -1,40 +1,53 @@ package me.libraryaddict.disguise.disguisetypes.watchers; +import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; -public class ItemFrameWatcher extends FlagWatcher { +public class ItemFrameWatcher extends FlagWatcher +{ - public ItemFrameWatcher(Disguise disguise) { + public ItemFrameWatcher(Disguise disguise) + { super(disguise); } - public ItemStack getItem() { - if (getValue(5, null) == null) { - return new ItemStack(0); + public ItemStack getItem() + { + if (getValue(FlagType.ITEMFRAME_ITEM) == null) + { + return new ItemStack(Material.AIR); } - return (ItemStack) getValue(5, null); + + return (ItemStack) getValue(FlagType.ITEMFRAME_ITEM); } - public int getRotation() { - return (int) getValue(6, 0); + public int getRotation() + { + return getValue(FlagType.ITEMFRAME_ROTATION); } - public void setItem(ItemStack newItem) { - if (newItem == null) { - newItem = new ItemStack(0); + public void setItem(ItemStack newItem) + { + if (newItem == null) + { + newItem = new ItemStack(Material.AIR); } + newItem = newItem.clone(); newItem.setAmount(1); - setValue(5, newItem); - sendData(5); + + setValue(FlagType.ITEMFRAME_ITEM, newItem); + sendData(FlagType.ITEMFRAME_ITEM); } - public void setRotation(int rotation) { - setValue(6, (byte) (rotation % 4)); - sendData(6); + public void setRotation(int rotation) + { + setValue(FlagType.ITEMFRAME_ROTATION, (byte) (rotation % 4)); + sendData(FlagType.ITEMFRAME_ROTATION); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/LivingWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/LivingWatcher.java index b237018c..f18bf354 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/LivingWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/LivingWatcher.java @@ -20,13 +20,13 @@ import com.comphenix.protocol.wrappers.WrappedAttribute.Builder; import me.libraryaddict.disguise.DisguiseAPI; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; import me.libraryaddict.disguise.utilities.DisguiseUtilities; import me.libraryaddict.disguise.utilities.ReflectionManager; public class LivingWatcher extends FlagWatcher { - static Map list = new HashMap<>(); static Method getId; @@ -36,6 +36,7 @@ public class LivingWatcher extends FlagWatcher { getId = ReflectionManager.getNmsMethod("MobEffectList", "getId", ReflectionManager.getNmsClass("MobEffectList")); Object REGISTRY = ReflectionManager.getNmsField("MobEffectList", "REGISTRY").get(null); + for (Object next : ((Iterable) REGISTRY)) { int id = (int) getId.invoke(null, next); @@ -81,7 +82,7 @@ public class LivingWatcher extends FlagWatcher public float getHealth() { - return (float) getValue(6, 0F); + return (float) getValue(FlagType.LIVING_HEALTH); } public double getMaxHealth() @@ -91,7 +92,7 @@ public class LivingWatcher extends FlagWatcher public boolean isPotionParticlesAmbient() { - return (boolean) getValue(8, false); + return (boolean) getValue(FlagType.LIVING_POTION_AMBIENT); } private int getPotions() @@ -151,31 +152,31 @@ public class LivingWatcher extends FlagWatcher public void setPotionParticlesAmbient(boolean particles) { - setValue(8, particles); - sendData(8); + setValue(FlagType.LIVING_POTION_AMBIENT, particles); + sendData(FlagType.LIVING_POTION_AMBIENT); } private void sendPotionEffects() { - setValue(7, getPotions()); - sendData(7); + setValue(FlagType.LIVING_POTIONS, getPotions()); + sendData(FlagType.LIVING_POTIONS); } public void setHealth(float health) { - setValue(6, health); - sendData(6); + setValue(FlagType.LIVING_HEALTH, health); + sendData(FlagType.LIVING_HEALTH); } public int getArrowsSticking() { - return (int) getValue(9, 0); + return (int) getValue(FlagType.LIVING_ARROWS); } public void setArrowsSticking(int arrowsNo) { - setValue(9, arrowsNo); - sendData(9); + setValue(FlagType.LIVING_ARROWS, arrowsNo); + sendData(FlagType.LIVING_ARROWS); } public void setMaxHealth(double newHealth) diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/MinecartWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/MinecartWatcher.java index c73b911c..091d9120 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/MinecartWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/MinecartWatcher.java @@ -3,6 +3,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import org.bukkit.inventory.ItemStack; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; public class MinecartWatcher extends FlagWatcher @@ -15,39 +16,42 @@ public class MinecartWatcher extends FlagWatcher public ItemStack getBlockInCart() { - int id = (int) getValue(8, 0) & 0xffff; - int data = (int) getValue(8, 0) >> 16; + int id = (int) getValue(FlagType.MINECART_BLOCK) & 0xffff; + int data = (int) getValue(FlagType.MINECART_BLOCK) >> 16; + return new ItemStack(id, 1, (short) data); } public int getBlockYOffset() { - return (int) getValue(9, 0); + return (int) getValue(FlagType.MINECART_BLOCK_Y); } public boolean isViewBlockInCart() { - return (boolean) getValue(10, false); + return (boolean) getValue(FlagType.MINECART_BLOCK_VISIBLE); } public void setBlockInCart(ItemStack item) { int id = item.getTypeId(); int data = item.getDurability(); - setValue(8, id & 0xffff | data << 16); - setValue(10, true); // Show block - sendData(8, 10); + + setValue(FlagType.MINECART_BLOCK, id & 0xffff | data << 16); + setValue(FlagType.MINECART_BLOCK_VISIBLE, true); // Show block + + sendData(FlagType.MINECART_BLOCK); } public void setBlockOffset(int i) { - setValue(9, i); - sendData(9); + setValue(FlagType.MINECART_BLOCK_Y, i); + sendData(FlagType.MINECART_BLOCK_Y); } public void setViewBlockInCart(boolean viewBlock) { - setValue(10, viewBlock); - sendData(10); + setValue(FlagType.MINECART_BLOCK_VISIBLE, viewBlock); + sendData(FlagType.MINECART_BLOCK_VISIBLE); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/OcelotWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/OcelotWatcher.java index 83a71d1d..c7a7828a 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/OcelotWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/OcelotWatcher.java @@ -4,19 +4,24 @@ import org.bukkit.entity.Ocelot; import org.bukkit.entity.Ocelot.Type; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; -public class OcelotWatcher extends TameableWatcher { +public class OcelotWatcher extends TameableWatcher +{ - public OcelotWatcher(Disguise disguise) { + public OcelotWatcher(Disguise disguise) + { super(disguise); } - public Type getType() { - return Ocelot.Type.getType((int) getValue(14, 0)); + public Type getType() + { + return Ocelot.Type.getType(getValue(FlagType.OCELOT_TYPE)); } - public void setType(Type newType) { - setValue(14, newType.getId()); - sendData(14); + public void setType(Type newType) + { + setValue(FlagType.OCELOT_TYPE, newType.getId()); + sendData(FlagType.OCELOT_TYPE); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/PaintingWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/PaintingWatcher.java index 9d72b060..406794be 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/PaintingWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/PaintingWatcher.java @@ -6,28 +6,36 @@ import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; import me.libraryaddict.disguise.utilities.DisguiseUtilities; -public class PaintingWatcher extends FlagWatcher { +public class PaintingWatcher extends FlagWatcher +{ private Art painting; - public PaintingWatcher(Disguise disguise) { + public PaintingWatcher(Disguise disguise) + { super(disguise); } @Override - public PaintingWatcher clone(Disguise disguise) { + public PaintingWatcher clone(Disguise disguise) + { PaintingWatcher watcher = (PaintingWatcher) super.clone(disguise); watcher.setArt(getArt()); + return watcher; } - public Art getArt() { + public Art getArt() + { return painting; } - public void setArt(Art newPainting) { + public void setArt(Art newPainting) + { this.painting = newPainting; - if (getDisguise().getEntity() != null && getDisguise().getWatcher() == this) { + + if (getDisguise().getEntity() != null && getDisguise().getWatcher() == this) + { DisguiseUtilities.refreshTrackers(getDisguise()); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/PigWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/PigWatcher.java index 64e101d3..8e0cbc80 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/PigWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/PigWatcher.java @@ -1,19 +1,24 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; -public class PigWatcher extends AgeableWatcher { +public class PigWatcher extends AgeableWatcher +{ - public PigWatcher(Disguise disguise) { + public PigWatcher(Disguise disguise) + { super(disguise); } - public boolean isSaddled() { - return (boolean) getValue(12, false); + public boolean isSaddled() + { + return (boolean) getValue(FlagType.PIG_SADDLED); } - public void setSaddled(boolean isSaddled) { - setValue(12, isSaddled); - sendData(12); + public void setSaddled(boolean isSaddled) + { + setValue(FlagType.PIG_SADDLED, isSaddled); + sendData(FlagType.PIG_SADDLED); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/PlayerWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/PlayerWatcher.java index e3e64229..7d94c56a 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/PlayerWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/PlayerWatcher.java @@ -12,6 +12,7 @@ import com.comphenix.protocol.wrappers.WrappedGameProfile; import me.libraryaddict.disguise.DisguiseAPI; import me.libraryaddict.disguise.DisguiseConfig; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; import me.libraryaddict.disguise.disguisetypes.PlayerDisguise; import me.libraryaddict.disguise.utilities.DisguiseUtilities; @@ -60,7 +61,7 @@ public class PlayerWatcher extends LivingWatcher private boolean isSkinFlag(int i) { - return ((byte) getValue(12, (byte) 0) & 1 << i) != 0; + return ((byte) getValue(FlagType.PLAYER_SKIN) & 1 << i) != 0; } public boolean isCapeEnabled() @@ -101,43 +102,50 @@ public class PlayerWatcher extends LivingWatcher public void setCapeEnabled(boolean enabled) { setSkinFlags(1, enabled); - sendData(12); + + sendData(FlagType.PLAYER_SKIN); } public void setJackedEnabled(boolean enabled) { setSkinFlags(2, enabled); - sendData(12); + + sendData(FlagType.PLAYER_SKIN); } public void setLeftSleeveEnabled(boolean enabled) { setSkinFlags(3, enabled); - sendData(12); + + sendData(FlagType.PLAYER_SKIN); } public void setRightSleeveEnabled(boolean enabled) { setSkinFlags(4, enabled); - sendData(12); + + sendData(FlagType.PLAYER_SKIN); } public void setLeftPantsEnabled(boolean enabled) { setSkinFlags(5, enabled); - sendData(12); + + sendData(FlagType.PLAYER_SKIN); } public void setRightPantsEnabled(boolean enabled) { setSkinFlags(6, enabled); - sendData(12); + + sendData(FlagType.PLAYER_SKIN); } public void setHatEnabled(boolean enabled) { setSkinFlags(7, enabled); - sendData(12); + + sendData(FlagType.PLAYER_SKIN); } public boolean isSleeping() @@ -232,14 +240,15 @@ public class PlayerWatcher extends LivingWatcher private void setSkinFlags(int i, boolean flag) { - byte b0 = (byte) getValue(12, (byte) 0); + byte b0 = (byte) getValue(FlagType.PLAYER_SKIN); + if (flag) { - setValue(12, (byte) (b0 | 1 << i)); + setValue(FlagType.PLAYER_SKIN, (byte) (b0 | 1 << i)); } else { - setValue(12, (byte) (b0 & (~1 << i))); + setValue(FlagType.PLAYER_SKIN, (byte) (b0 & (~1 << i))); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/RabbitWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/RabbitWatcher.java index bf497cde..1415db11 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/RabbitWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/RabbitWatcher.java @@ -1,23 +1,28 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; import me.libraryaddict.disguise.disguisetypes.RabbitType; import me.libraryaddict.disguise.utilities.DisguiseUtilities; -public class RabbitWatcher extends AgeableWatcher { +public class RabbitWatcher extends AgeableWatcher +{ - public RabbitWatcher(Disguise disguise) { + public RabbitWatcher(Disguise disguise) + { super(disguise); setType(RabbitType.values()[DisguiseUtilities.random.nextInt(RabbitType.values().length)]); } - public RabbitType getType() { - return RabbitType.getType((int) getValue(18, 0)); + public RabbitType getType() + { + return RabbitType.getType((int) getValue(FlagType.RABBIT_TYPE)); } - public void setType(RabbitType type) { - setValue(12, type.getTypeId()); - sendData(12); + public void setType(RabbitType type) + { + setValue(FlagType.RABBIT_TYPE, type.getTypeId()); + sendData(FlagType.RABBIT_TYPE); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/SheepWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/SheepWatcher.java index 204ef3c3..63b44789 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/SheepWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/SheepWatcher.java @@ -4,39 +4,54 @@ import org.bukkit.DyeColor; import me.libraryaddict.disguise.disguisetypes.AnimalColor; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; -public class SheepWatcher extends AgeableWatcher { +public class SheepWatcher extends AgeableWatcher +{ - public SheepWatcher(Disguise disguise) { + public SheepWatcher(Disguise disguise) + { super(disguise); - setValue(12, (byte) 0); + + setValue(FlagType.SHEEP_WOOL, (byte) 0); } - public AnimalColor getColor() { - return AnimalColor.getColor(((int) getValue(12, (byte) 0) & 15)); + public AnimalColor getColor() + { + return AnimalColor.getColor(((int) getValue(FlagType.SHEEP_WOOL) & 15)); } - public boolean isSheared() { - return ((byte) getValue(12, (byte) 0) & 16) != 0; + public boolean isSheared() + { + return ((byte) getValue(FlagType.SHEEP_WOOL) & 16) != 0; } - public void setColor(AnimalColor color) { + public void setColor(AnimalColor color) + { setColor(DyeColor.getByWoolData((byte) color.getId())); } - public void setColor(DyeColor color) { - byte b0 = (byte) getValue(12, (byte) 0); - setValue(12, (byte) (b0 & 240 | color.getWoolData() & 15)); - sendData(12); + public void setColor(DyeColor color) + { + byte b0 = (byte) getValue(FlagType.SHEEP_WOOL); + + setValue(FlagType.SHEEP_WOOL, (byte) (b0 & 240 | color.getWoolData() & 15)); + sendData(FlagType.SHEEP_WOOL); } - public void setSheared(boolean flag) { - byte b0 = (byte) getValue(12, (byte) 0); - if (flag) { - setValue(12, (byte) (b0 | 16)); - } else { - setValue(12, (byte) (b0 & -17)); + public void setSheared(boolean flag) + { + byte b0 = (byte) getValue(FlagType.SHEEP_WOOL); + + if (flag) + { + setValue(FlagType.SHEEP_WOOL, (byte) (b0 | 16)); } - sendData(12); + else + { + setValue(FlagType.SHEEP_WOOL, (byte) (b0 & -17)); + } + + sendData(FlagType.SHEEP_WOOL); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/ShulkerWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/ShulkerWatcher.java index a5e7fb5a..39aa5fbb 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/ShulkerWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/ShulkerWatcher.java @@ -10,34 +10,42 @@ import me.libraryaddict.disguise.disguisetypes.Disguise; /** * @author Navid */ -//TODO: Add the appropriate data values to this class -public class ShulkerWatcher extends LivingWatcher { +// TODO: Add the appropriate data values to this class +public class ShulkerWatcher extends LivingWatcher +{ - public ShulkerWatcher(Disguise disguise) { + public ShulkerWatcher(Disguise disguise) + { super(disguise); } - public BlockFace getFacingDirection() { + public BlockFace getFacingDirection() + { return BlockFace.UP; } - public void setFacingDirection() { + public void setFacingDirection() + { } - public Optional getAttachmentPosition() { + public Optional getAttachmentPosition() + { return Optional.absent(); } - public void setAttachmentPosition(BlockPosition pos) { + public void setAttachmentPosition(BlockPosition pos) + { } - public byte getShieldHeight() { + public byte getShieldHeight() + { return 0x00; } - public void setShieldHeight() { + public void setShieldHeight() + { } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/SkeletonWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/SkeletonWatcher.java index 26910584..b0c9a666 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/SkeletonWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/SkeletonWatcher.java @@ -3,22 +3,26 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import org.bukkit.entity.Skeleton.SkeletonType; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; /** * @author Navid */ -public class SkeletonWatcher extends LivingWatcher { - - public SkeletonWatcher(Disguise disguise) { +public class SkeletonWatcher extends LivingWatcher +{ + public SkeletonWatcher(Disguise disguise) + { super(disguise); } - public void setType(SkeletonType type) { - setValue(11, type.getId()); - sendData(11); + public void setType(SkeletonType type) + { + setValue(FlagType.SKELETON_TYPE, type.ordinal()); + sendData(FlagType.SKELETON_TYPE); } - public SkeletonType getType() { - return SkeletonType.getType((int) getValue(11, SkeletonType.NORMAL.getId())); + public SkeletonType getType() + { + return SkeletonType.values()[getValue(FlagType.SKELETON_TYPE)]; } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/SlimeWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/SlimeWatcher.java index feb70c58..6d45fb8c 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/SlimeWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/SlimeWatcher.java @@ -1,25 +1,32 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; import me.libraryaddict.disguise.utilities.DisguiseUtilities; -public class SlimeWatcher extends LivingWatcher { +public class SlimeWatcher extends LivingWatcher +{ - public SlimeWatcher(Disguise disguise) { + public SlimeWatcher(Disguise disguise) + { super(disguise); setSize(DisguiseUtilities.random.nextInt(4) + 1); } - public int getSize() { - return (int) getValue(11, 1); + public int getSize() + { + return (int) getValue(FlagType.SLIME_SIZE); } - public void setSize(int size) { - if (size <= 0 || size >= 128) { + public void setSize(int size) + { + if (size <= 0 || size >= 128) + { size = 1; } - setValue(11, size); - sendData(11); + + setValue(FlagType.SLIME_SIZE, size); + sendData(FlagType.SLIME_SIZE); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/SplashPotionWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/SplashPotionWatcher.java index 09c28318..481c883e 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/SplashPotionWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/SplashPotionWatcher.java @@ -4,28 +4,35 @@ import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; import me.libraryaddict.disguise.utilities.DisguiseUtilities; -public class SplashPotionWatcher extends FlagWatcher { - +public class SplashPotionWatcher extends FlagWatcher +{ private int potionId; - public SplashPotionWatcher(Disguise disguise) { + public SplashPotionWatcher(Disguise disguise) + { super(disguise); } @Override - public SplashPotionWatcher clone(Disguise disguise) { + public SplashPotionWatcher clone(Disguise disguise) + { SplashPotionWatcher watcher = (SplashPotionWatcher) super.clone(disguise); watcher.setPotionId(getPotionId()); + return watcher; } - public int getPotionId() { + public int getPotionId() + { return potionId; } - public void setPotionId(int newPotionId) { + public void setPotionId(int newPotionId) + { this.potionId = newPotionId; - if (getDisguise().getEntity() != null && getDisguise().getWatcher() == this) { + + if (getDisguise().getEntity() != null && getDisguise().getWatcher() == this) + { DisguiseUtilities.refreshTrackers(getDisguise()); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/TameableWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/TameableWatcher.java index 1135d890..76643235 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/TameableWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/TameableWatcher.java @@ -5,10 +5,10 @@ import java.util.UUID; import com.google.common.base.Optional; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; public class TameableWatcher extends AgeableWatcher { - public TameableWatcher(Disguise disguise) { super(disguise); @@ -16,7 +16,7 @@ public class TameableWatcher extends AgeableWatcher public Optional getOwner() { - return getValue(13, Optional. absent()); + return getValue(FlagType.TAMEABLE_OWNER); } public boolean isSitting() @@ -31,27 +31,29 @@ public class TameableWatcher extends AgeableWatcher protected boolean isTameableFlag(int no) { - return ((byte) getValue(12, (byte) 0) & no) != 0; + return ((byte) getValue(FlagType.TAMEABLE_META) & no) != 0; } protected void setTameableFlag(int no, boolean flag) { - byte value = (byte) getValue(12, (byte) 0); + byte value = (byte) getValue(FlagType.TAMEABLE_META); + if (flag) { - setValue(12, (byte) (value | no)); + setValue(FlagType.TAMEABLE_META, (byte) (value | no)); } else { - setValue(12, (byte) (value & -(no + 1))); + setValue(FlagType.TAMEABLE_META, (byte) (value & -(no + 1))); } - sendData(12); + + sendData(FlagType.TAMEABLE_META); } public void setOwner(UUID owner) { - setValue(13, Optional.of(owner)); - sendData(13); + setValue(FlagType.TAMEABLE_OWNER, Optional.of(owner)); + sendData(FlagType.TAMEABLE_OWNER); } public void setSitting(boolean sitting) diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/TippedArrowWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/TippedArrowWatcher.java index 121e5fb0..2f2a5e6b 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/TippedArrowWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/TippedArrowWatcher.java @@ -3,28 +3,35 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import org.bukkit.Color; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; import me.libraryaddict.disguise.utilities.DisguiseUtilities; /** * @author Navid */ -public class TippedArrowWatcher extends ArrowWatcher { +public class TippedArrowWatcher extends ArrowWatcher +{ - public TippedArrowWatcher(Disguise disguise) { + public TippedArrowWatcher(Disguise disguise) + { super(disguise); + int r = DisguiseUtilities.random.nextInt(256); int g = DisguiseUtilities.random.nextInt(256); int b = DisguiseUtilities.random.nextInt(256); + setColor(Color.fromRGB(r, g, b)); } - public Color getColor() { - int color = (int) getValue(5, Color.WHITE.asRGB()); + public Color getColor() + { + int color = (int) getValue(FlagType.TIPPED_ARROW_COLOR); return Color.fromRGB(color); } - public void setColor(Color color) { - setValue(5, color.asRGB()); - sendData(5); + public void setColor(Color color) + { + setValue(FlagType.TIPPED_ARROW_COLOR, color.asRGB()); + sendData(FlagType.TIPPED_ARROW_COLOR); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/VillagerWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/VillagerWatcher.java index 96ab0f89..d982d3af 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/VillagerWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/VillagerWatcher.java @@ -3,25 +3,31 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import org.bukkit.entity.Villager.Profession; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; import me.libraryaddict.disguise.utilities.DisguiseUtilities; -public class VillagerWatcher extends AgeableWatcher { +public class VillagerWatcher extends AgeableWatcher +{ - public VillagerWatcher(Disguise disguise) { + public VillagerWatcher(Disguise disguise) + { super(disguise); setProfession(Profession.values()[DisguiseUtilities.random.nextInt(Profession.values().length)]); } - public Profession getProfession() { - return Profession.getProfession((int) getValue(16, 0)); + public Profession getProfession() + { + return Profession.values()[getValue(FlagType.VILLAGER_PROFESSION)]; } - public void setProfession(int professionId) { - setValue(12, professionId); - sendData(12); + public void setProfession(int professionId) + { + setValue(FlagType.VILLAGER_PROFESSION, professionId); + sendData(FlagType.VILLAGER_PROFESSION); } - public void setProfession(Profession newProfession) { - setProfession(newProfession.getId()); + public void setProfession(Profession newProfession) + { + setProfession(newProfession.ordinal()); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/WitchWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/WitchWatcher.java index 4dd4f491..955b0f9c 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/WitchWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/WitchWatcher.java @@ -1,24 +1,28 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; /** * @author Navid */ -public class WitchWatcher extends LivingWatcher { +public class WitchWatcher extends LivingWatcher +{ - public WitchWatcher(Disguise disguise) { + public WitchWatcher(Disguise disguise) + { super(disguise); } - - public boolean isAggressive() { - return (boolean) getValue(11, false); + public boolean isAggressive() + { + return (boolean) getValue(FlagType.WITCH_AGGRESSIVE); } - public void setAggressive(boolean aggressive) { - setValue(11, aggressive); - sendData(11); + public void setAggressive(boolean aggressive) + { + setValue(FlagType.WITCH_AGGRESSIVE, aggressive); + sendData(FlagType.WITCH_AGGRESSIVE); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/WitherSkullWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/WitherSkullWatcher.java index 2c39a5ae..26d84d32 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/WitherSkullWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/WitherSkullWatcher.java @@ -1,21 +1,26 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; -public class WitherSkullWatcher extends FlagWatcher { +public class WitherSkullWatcher extends FlagWatcher +{ - public WitherSkullWatcher(Disguise disguise) { + public WitherSkullWatcher(Disguise disguise) + { super(disguise); } - public boolean isBlue() { - return (boolean) getValue(5, false); + public boolean isBlue() + { + return (boolean) getValue(FlagType.WITHERSKULL_BLUE); } - public void setBlue(boolean blue) { - setValue(5, blue); - sendData(5); + public void setBlue(boolean blue) + { + setValue(FlagType.WITHERSKULL_BLUE, blue); + sendData(FlagType.WITHERSKULL_BLUE); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/WitherWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/WitherWatcher.java index 3414f15e..61505d33 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/WitherWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/WitherWatcher.java @@ -5,42 +5,54 @@ import java.security.InvalidParameterException; import org.bukkit.ChatColor; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; -public class WitherWatcher extends LivingWatcher { +public class WitherWatcher extends LivingWatcher +{ - public WitherWatcher(Disguise disguise) { + public WitherWatcher(Disguise disguise) + { super(disguise); } /** * Returns the amount of time this Wither is invulnerable for + * * @return */ - public int getInvulnerability() { - return (int) getValue(14, 0); + public int getInvulnerability() + { + return (int) getValue(FlagType.WITHER_INVUL); } - public int[] getTargets() { - return new int[]{(Integer) getValue(11, 0), (Integer) getValue(12, 0), (Integer) getValue(13, 0)}; + public int[] getTargets() + { + return new int[] + { + getValue(FlagType.WITHER_TARGET_1), getValue(FlagType.WITHER_TARGET_2), getValue(FlagType.WITHER_TARGET_3) + }; } /** * Sets the amount of time this Wither is invulnerable for */ - public void setInvulnerability(int invulnerability) { - setValue(14, invulnerability); - sendData(14); + public void setInvulnerability(int invulnerability) + { + setValue(FlagType.WITHER_INVUL, invulnerability); + sendData(FlagType.WITHER_INVUL); } - public void setTargets(int... targets) { - if (targets.length != 3) { - throw new InvalidParameterException(ChatColor.RED + "Expected 3 numbers for wither setTargets. Received " - + targets.length); + public void setTargets(int... targets) + { + if (targets.length != 3) + { + throw new InvalidParameterException( + ChatColor.RED + "Expected 3 numbers for wither setTargets. Received " + targets.length); } - setValue(11, targets[0]); - setValue(12, targets[1]); - setValue(13, targets[2]); - sendData(11, 12, 13); + setValue(FlagType.WITHER_TARGET_1, targets[0]); + setValue(FlagType.WITHER_TARGET_2, targets[1]); + setValue(FlagType.WITHER_TARGET_3, targets[2]); + sendData(FlagType.WITHER_TARGET_1, FlagType.WITHER_TARGET_2, FlagType.WITHER_TARGET_3); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/WolfWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/WolfWatcher.java index b881df27..8a7689e8 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/WolfWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/WolfWatcher.java @@ -4,63 +4,82 @@ import org.bukkit.DyeColor; import me.libraryaddict.disguise.disguisetypes.AnimalColor; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; -public class WolfWatcher extends TameableWatcher { +public class WolfWatcher extends TameableWatcher +{ - public WolfWatcher(Disguise disguise) { + public WolfWatcher(Disguise disguise) + { super(disguise); } - public AnimalColor getCollarColor() { - return AnimalColor.getColor((int) getValue(16, 14)); + public AnimalColor getCollarColor() + { + return AnimalColor.getColor(getValue(FlagType.WOLF_COLLAR)); } /** * Used for tail rotation. + * * @return */ - public float getDamageTaken() { - return (float) getValue(14, 0); + public float getDamageTaken() + { + return (float) getValue(FlagType.WOLF_DAMAGE); } /** * Used for tail rotation. + * * @param damage */ - public void setDamageTaken(float damage) { - setValue(14, damage); - sendData(14); + public void setDamageTaken(float damage) + { + setValue(FlagType.WOLF_DAMAGE, damage); + sendData(FlagType.WOLF_DAMAGE); } - public boolean isBegging() { - return (boolean) getValue(15, false); + public boolean isBegging() + { + return (boolean) getValue(FlagType.WOLF_BEGGING); } - public void setBegging(boolean begging) { - setValue(15, begging); - sendData(15); + public void setBegging(boolean begging) + { + setValue(FlagType.WOLF_BEGGING, begging); + sendData(FlagType.WOLF_BEGGING); } - public boolean isAngry() { + public boolean isAngry() + { return isTameableFlag(2); } - public void setAngry(boolean angry) { + public void setAngry(boolean angry) + { setTameableFlag(2, angry); } - public void setCollarColor(AnimalColor color) { + public void setCollarColor(AnimalColor color) + { setCollarColor(DyeColor.getByWoolData((byte) color.getId())); } - public void setCollarColor(DyeColor newColor) { - if (!isTamed()) { + public void setCollarColor(DyeColor newColor) + { + if (!isTamed()) + { setTamed(true); } - if (newColor.getWoolData() != getCollarColor().getId()) { - setValue(16, (int) newColor.getDyeData()); - sendData(16); + + if (newColor.getWoolData() == getCollarColor().getId()) + { + return; } + + setValue(FlagType.WOLF_COLLAR, (int) newColor.getDyeData()); + sendData(FlagType.WOLF_COLLAR); } } diff --git a/src/me/libraryaddict/disguise/disguisetypes/watchers/ZombieWatcher.java b/src/me/libraryaddict/disguise/disguisetypes/watchers/ZombieWatcher.java index 039db9ea..4ee741ab 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/watchers/ZombieWatcher.java +++ b/src/me/libraryaddict/disguise/disguisetypes/watchers/ZombieWatcher.java @@ -3,87 +3,104 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import org.bukkit.entity.Villager.Profession; import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagType; -public class ZombieWatcher extends LivingWatcher { +public class ZombieWatcher extends LivingWatcher +{ - public ZombieWatcher(Disguise disguise) { + public ZombieWatcher(Disguise disguise) + { super(disguise); } - public boolean isAdult() { + public boolean isAdult() + { return !isBaby(); } - public boolean isBaby() { - return (boolean) getValue(11, false); + public boolean isBaby() + { + return getValue(FlagType.ZOMBIE_BABY); } - public boolean isShaking() { - return (boolean) getValue(14, false); + public boolean isShaking() + { + return getValue(FlagType.ZOMBIE_SHAKING); } /** * Is this zombie a villager? + * * @return */ - public boolean isVillager() { - return ((int)getValue(12, 0)) != 0; + public boolean isVillager() + { + return ((int) getValue(FlagType.ZOMBIE_PROFESSION)) != 0; } - public boolean isAggressive() { - return (boolean) getValue(14, false); + public boolean isAggressive() + { + return (boolean) getValue(FlagType.ZOMBIE_AGGRESSIVE); } /** - * Only returns a valid value if this zombie - * is a villager. + * Only returns a valid value if this zombie is a villager. + * * @return */ - public Profession getProfession() { - return Profession.getProfession((int) getValue(12, 0)); + public Profession getProfession() + { + return Profession.values()[getValue(FlagType.ZOMBIE_PROFESSION)]; } - public void setAdult() { + public void setAdult() + { setBaby(false); } - public void setBaby() { + public void setBaby() + { setBaby(true); } - public void setBaby(boolean baby) { - setValue(11, baby); - sendData(11); + public void setBaby(boolean baby) + { + setValue(FlagType.ZOMBIE_BABY, baby); + sendData(FlagType.ZOMBIE_BABY); } - public void setShaking(boolean shaking) { - setValue(13, (byte) (shaking ? 1 : 0)); - sendData(13); + public void setShaking(boolean shaking) + { + setValue(FlagType.ZOMBIE_SHAKING, shaking); + sendData(FlagType.ZOMBIE_SHAKING); } /** - * Sets the profession of this zombie, in turn - * turning it into a Zombie Villager + * Sets the profession of this zombie, in turn turning it into a Zombie Villager + * * @param id */ - public void setProfession(int id) { - setValue(12, id); - sendData(12); + public void setProfession(int id) + { + setValue(FlagType.ZOMBIE_PROFESSION, id); + sendData(FlagType.ZOMBIE_PROFESSION); } /** - * Sets the profession of this zombie, in turn - * turning it into a Zombie Villager + * Sets the profession of this zombie, in turn turning it into a Zombie Villager + * * @param profession */ - public void setProfession(Profession profession) { - setValue(12, profession.getId()); - sendData(12); + public void setProfession(Profession profession) + { + setValue(FlagType.ZOMBIE_PROFESSION, profession.ordinal()); + sendData(FlagType.ZOMBIE_PROFESSION); } - public void setAggressive(boolean handsup) { - setValue(14, handsup); - sendData(14); + public void setAggressive(boolean handsup) + { + setValue(FlagType.ZOMBIE_AGGRESSIVE, handsup); + sendData(FlagType.ZOMBIE_AGGRESSIVE); } } diff --git a/src/me/libraryaddict/disguise/utilities/DisguiseUtilities.java b/src/me/libraryaddict/disguise/utilities/DisguiseUtilities.java index b8ad744c..489bb13b 100644 --- a/src/me/libraryaddict/disguise/utilities/DisguiseUtilities.java +++ b/src/me/libraryaddict/disguise/utilities/DisguiseUtilities.java @@ -57,7 +57,6 @@ import me.libraryaddict.disguise.disguisetypes.watchers.ZombieWatcher; public class DisguiseUtilities { - public static final Random random = new Random(); /** * This is a list of names which was called by other plugins. As such, don't remove from the gameProfiles as its the duty of @@ -359,30 +358,30 @@ public class DisguiseUtilities { Object entityTrackerEntry = ReflectionManager.getEntityTrackerEntry(disguise.getEntity()); - if (entityTrackerEntry != null) - { - Set trackedPlayers = (Set) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers") - .get(entityTrackerEntry); + if (entityTrackerEntry == null) + return; - // If the tracker exists. Remove himself from his tracker - trackedPlayers = (Set) new HashSet(trackedPlayers).clone(); // Copy before iterating to prevent - // ConcurrentModificationException + Set trackedPlayers = (Set) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers") + .get(entityTrackerEntry); - PacketContainer destroyPacket = new PacketContainer(Server.ENTITY_DESTROY); + // If the tracker exists. Remove himself from his tracker + trackedPlayers = (Set) new HashSet(trackedPlayers).clone(); // Copy before iterating to prevent + // ConcurrentModificationException - destroyPacket.getIntegerArrays().write(0, new int[] - { - disguise.getEntity().getEntityId() - }); + PacketContainer destroyPacket = new PacketContainer(Server.ENTITY_DESTROY); - for (Object p : trackedPlayers) + destroyPacket.getIntegerArrays().write(0, new int[] { - Player player = (Player) ReflectionManager.getBukkitEntity(p); + disguise.getEntity().getEntityId() + }); - if (player == disguise.getEntity() || disguise.canSee(player)) - { - ProtocolLibrary.getProtocolManager().sendServerPacket(player, destroyPacket); - } + for (Object p : trackedPlayers) + { + Player player = (Player) ReflectionManager.getBukkitEntity(p); + + if (player == disguise.getEntity() || disguise.canSee(player)) + { + ProtocolLibrary.getProtocolManager().sendServerPacket(player, destroyPacket); } } } @@ -664,6 +663,7 @@ public class DisguiseUtilities for (Object p : trackedPlayers) { Player player = (Player) ReflectionManager.getBukkitEntity(p); + if (((TargetedDisguise) disguise).canSee(player)) { players.add(player); @@ -919,48 +919,48 @@ public class DisguiseUtilities { final Object entityTrackerEntry = ReflectionManager.getEntityTrackerEntry(disguise.getEntity()); - if (entityTrackerEntry != null) + if (entityTrackerEntry == null) + return; + + Set trackedPlayers = (Set) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers") + .get(entityTrackerEntry); + + Method clear = ReflectionManager.getNmsMethod("EntityTrackerEntry", "clear", + ReflectionManager.getNmsClass("EntityPlayer")); + + final Method updatePlayer = ReflectionManager.getNmsMethod("EntityTrackerEntry", "updatePlayer", + ReflectionManager.getNmsClass("EntityPlayer")); + + trackedPlayers = (Set) new HashSet(trackedPlayers).clone(); // Copy before iterating to prevent + // ConcurrentModificationException + for (final Object p : trackedPlayers) { - Set trackedPlayers = (Set) ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers") - .get(entityTrackerEntry); + Player pl = (Player) ReflectionManager.getBukkitEntity(p); - Method clear = ReflectionManager.getNmsMethod("EntityTrackerEntry", "clear", - ReflectionManager.getNmsClass("EntityPlayer")); + if (!player.equalsIgnoreCase((pl).getName())) + continue; - final Method updatePlayer = ReflectionManager.getNmsMethod("EntityTrackerEntry", "updatePlayer", - ReflectionManager.getNmsClass("EntityPlayer")); + clear.invoke(entityTrackerEntry, p); - trackedPlayers = (Set) new HashSet(trackedPlayers).clone(); // Copy before iterating to prevent - // ConcurrentModificationException - for (final Object p : trackedPlayers) + ProtocolLibrary.getProtocolManager().sendServerPacket(pl, destroyPacket); + + Bukkit.getScheduler().scheduleSyncDelayedTask(libsDisguises, new Runnable() { - Player pl = (Player) ReflectionManager.getBukkitEntity(p); - if (player.equalsIgnoreCase((pl).getName())) + @Override + public void run() { - clear.invoke(entityTrackerEntry, p); - - ProtocolLibrary.getProtocolManager().sendServerPacket(pl, destroyPacket); - - Bukkit.getScheduler().scheduleSyncDelayedTask(libsDisguises, new Runnable() + try { - - @Override - public void run() - { - try - { - updatePlayer.invoke(entityTrackerEntry, p); - } - catch (Exception ex) - { - ex.printStackTrace(System.out); - } - } - }, 2); - break; + updatePlayer.invoke(entityTrackerEntry, p); + } + catch (Exception ex) + { + ex.printStackTrace(System.out); + } } - } + }, 2); + break; } } } diff --git a/src/me/libraryaddict/disguise/utilities/DisguiseValues.java b/src/me/libraryaddict/disguise/utilities/DisguiseValues.java index 338cae2e..4279dce5 100644 --- a/src/me/libraryaddict/disguise/utilities/DisguiseValues.java +++ b/src/me/libraryaddict/disguise/utilities/DisguiseValues.java @@ -3,6 +3,7 @@ package me.libraryaddict.disguise.utilities; import java.util.HashMap; import me.libraryaddict.disguise.disguisetypes.DisguiseType; +import me.libraryaddict.disguise.disguisetypes.FlagType; public class DisguiseValues { @@ -39,7 +40,7 @@ public class DisguiseValues return values.get(type); } - public static HashMap getMetaValues(DisguiseType type) + public static HashMap getMetaValues(DisguiseType type) { return getDisguiseValues(type).getMetaValues(); } @@ -53,7 +54,7 @@ public class DisguiseValues private FakeBoundingBox babyBox; private float[] entitySize; private double maxHealth; - private HashMap metaValues = new HashMap<>(); + private HashMap metaValues = new HashMap<>(); private Class nmsEntityClass; public DisguiseValues(DisguiseType type, Class classType, int entitySize, double maxHealth) @@ -83,7 +84,7 @@ public class DisguiseValues return maxHealth; } - public HashMap getMetaValues() + public HashMap getMetaValues() { return metaValues; } @@ -108,7 +109,7 @@ public class DisguiseValues this.entitySize = size; } - public void setMetaValue(int id, Object value) + public void setMetaValue(FlagType id, Object value) { metaValues.put(id, value); }