Read description
Changed how I set the default datavalues. Crashes should now be a thing of the past.. Painting is no longer glitched. (Still goes in floor) Horse watcher is better. Updated outdated values. Updated incorrect yaw for disguises
This commit is contained in:
		@@ -11,6 +11,8 @@ import me.libraryaddict.disguise.DisguiseTypes.Watchers.AgeableWatcher;
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.Watchers.LivingWatcher;
 | 
			
		||||
import net.minecraft.server.v1_6_R2.DataWatcher;
 | 
			
		||||
import net.minecraft.server.v1_6_R2.Entity;
 | 
			
		||||
import net.minecraft.server.v1_6_R2.EntityAgeable;
 | 
			
		||||
import net.minecraft.server.v1_6_R2.EntityInsentient;
 | 
			
		||||
import net.minecraft.server.v1_6_R2.EntityLiving;
 | 
			
		||||
import net.minecraft.server.v1_6_R2.EntityTypes;
 | 
			
		||||
import net.minecraft.server.v1_6_R2.ItemStack;
 | 
			
		||||
@@ -41,16 +43,16 @@ public class Disguise {
 | 
			
		||||
        replaceSounds = doSounds;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public PacketContainer constructPacket(org.bukkit.entity.Entity e) {
 | 
			
		||||
        PacketContainer spawnPacket = null;
 | 
			
		||||
    public PacketContainer[] constructPacket(org.bukkit.entity.Entity e) {
 | 
			
		||||
        PacketContainer[] spawnPackets = new PacketContainer[1];
 | 
			
		||||
        ProtocolManager manager = ProtocolLibrary.getProtocolManager();
 | 
			
		||||
        Entity entity = ((CraftEntity) e).getHandle();
 | 
			
		||||
        Location loc = e.getLocation();
 | 
			
		||||
 | 
			
		||||
        if (getType() == DisguiseType.EXPERIENCE_ORB) {
 | 
			
		||||
 | 
			
		||||
            spawnPacket = manager.createPacket(Packets.Server.ADD_EXP_ORB);
 | 
			
		||||
            StructureModifier<Object> mods = spawnPacket.getModifier();
 | 
			
		||||
            spawnPackets[0] = manager.createPacket(Packets.Server.ADD_EXP_ORB);
 | 
			
		||||
            StructureModifier<Object> mods = spawnPackets[0].getModifier();
 | 
			
		||||
            mods.write(0, e.getEntityId());
 | 
			
		||||
            mods.write(1, (int) Math.floor(loc.getX() * 32));
 | 
			
		||||
            mods.write(2, (int) Math.floor(loc.getY() * 32) + 2);
 | 
			
		||||
@@ -58,9 +60,9 @@ public class Disguise {
 | 
			
		||||
            mods.write(4, 1);
 | 
			
		||||
 | 
			
		||||
        } else if (getType() == DisguiseType.PAINTING) {
 | 
			
		||||
 | 
			
		||||
            spawnPacket = manager.createPacket(Packets.Server.ENTITY_PAINTING);
 | 
			
		||||
            StructureModifier<Object> mods = spawnPacket.getModifier();
 | 
			
		||||
            spawnPackets = new PacketContainer[2];
 | 
			
		||||
            spawnPackets[0] = manager.createPacket(Packets.Server.ENTITY_PAINTING);
 | 
			
		||||
            StructureModifier<Object> mods = spawnPackets[0].getModifier();
 | 
			
		||||
            mods.write(0, e.getEntityId());
 | 
			
		||||
            mods.write(1, loc.getBlockX());
 | 
			
		||||
            mods.write(2, loc.getBlockY());
 | 
			
		||||
@@ -71,6 +73,18 @@ public class Disguise {
 | 
			
		||||
                id = new Random().nextInt(EnumArt.values().length);
 | 
			
		||||
            mods.write(5, EnumArt.values()[id].B);
 | 
			
		||||
 | 
			
		||||
            // Make the teleport packet to make it visible..
 | 
			
		||||
            spawnPackets[1] = manager.createPacket(Packets.Server.ENTITY_TELEPORT);
 | 
			
		||||
            mods = spawnPackets[1].getModifier();
 | 
			
		||||
            mods.write(0, e.getEntityId());
 | 
			
		||||
            mods.write(1, (int) Math.floor(loc.getX() * 32D));
 | 
			
		||||
            mods.write(2, (int) Math.floor(loc.getY() * 32D));
 | 
			
		||||
            mods.write(3, (int) Math.floor(loc.getZ() * 32D));
 | 
			
		||||
            mods.write(4, (byte) (int) (loc.getYaw() * 256.0F / 360.0F));
 | 
			
		||||
            mods.write(5, (byte) (int) (loc.getPitch() * 256.0F / 360.0F));
 | 
			
		||||
 | 
			
		||||
            // Need to fake a teleport packet as well to make the painting visible as a moving.
 | 
			
		||||
 | 
			
		||||
        } else if (getType().isMob()) {
 | 
			
		||||
 | 
			
		||||
            double d1 = 3.9D;
 | 
			
		||||
@@ -90,8 +104,8 @@ public class Disguise {
 | 
			
		||||
                d3 = d1;
 | 
			
		||||
            if (d4 > d1)
 | 
			
		||||
                d4 = d1;
 | 
			
		||||
            spawnPacket = manager.createPacket(Packets.Server.MOB_SPAWN);
 | 
			
		||||
            StructureModifier<Object> mods = spawnPacket.getModifier();
 | 
			
		||||
            spawnPackets[0] = manager.createPacket(Packets.Server.MOB_SPAWN);
 | 
			
		||||
            StructureModifier<Object> mods = spawnPackets[0].getModifier();
 | 
			
		||||
            mods.write(0, e.getEntityId());
 | 
			
		||||
            mods.write(1, (byte) EntityTypes.a(entity));
 | 
			
		||||
            String name = toReadable(disguiseType.name());
 | 
			
		||||
@@ -136,8 +150,6 @@ public class Disguise {
 | 
			
		||||
            byte yawValue = (byte) (int) (entity.yaw * 256.0F / 360.0F);
 | 
			
		||||
            if (getType() == DisguiseType.ENDER_DRAGON)
 | 
			
		||||
                yawValue -= 128;
 | 
			
		||||
            else if (getType() == DisguiseType.GHAST)
 | 
			
		||||
                yawValue += 64;
 | 
			
		||||
            mods.write(8, yawValue);
 | 
			
		||||
            mods.write(9, (byte) (int) (entity.pitch * 256.0F / 360.0F));
 | 
			
		||||
            mods.write(10, (byte) (int) (((EntityLiving) entity).aA * 256.0F / 360.0F));
 | 
			
		||||
@@ -154,7 +166,7 @@ public class Disguise {
 | 
			
		||||
                ex.printStackTrace();
 | 
			
		||||
            }
 | 
			
		||||
            mods.write(11, newWatcher);
 | 
			
		||||
            // TODO May need to do the list
 | 
			
		||||
            // Theres a list sometimes written with this. But no problems have appeared!
 | 
			
		||||
 | 
			
		||||
        } else if (getType().isMisc()) {
 | 
			
		||||
 | 
			
		||||
@@ -166,8 +178,8 @@ public class Disguise {
 | 
			
		||||
                else
 | 
			
		||||
                    data = ((MiscDisguise) this).getId();
 | 
			
		||||
 | 
			
		||||
            spawnPacket = manager.createPacket(Packets.Server.VEHICLE_SPAWN);
 | 
			
		||||
            StructureModifier<Object> mods = spawnPacket.getModifier();
 | 
			
		||||
            spawnPackets[0] = manager.createPacket(Packets.Server.VEHICLE_SPAWN);
 | 
			
		||||
            StructureModifier<Object> mods = spawnPackets[0].getModifier();
 | 
			
		||||
            mods.write(0, e.getEntityId());
 | 
			
		||||
            mods.write(1, (int) Math.floor(loc.getX() * 32D));
 | 
			
		||||
            mods.write(2, (int) Math.floor(loc.getY() * 32D));
 | 
			
		||||
@@ -195,14 +207,14 @@ public class Disguise {
 | 
			
		||||
                mods.write(6, (int) (d3 * 8000.0D));
 | 
			
		||||
            }
 | 
			
		||||
            mods.write(7, MathHelper.d(entity.pitch * 256.0F / 360.0F));
 | 
			
		||||
            mods.write(8, MathHelper.d(entity.yaw * 256.0F / 360.0F) + 64);
 | 
			
		||||
            mods.write(8, MathHelper.d(entity.yaw * 256.0F / 360.0F) - 64);
 | 
			
		||||
            mods.write(9, id);
 | 
			
		||||
            mods.write(10, data);
 | 
			
		||||
 | 
			
		||||
        } else if (getType().isPlayer()) {
 | 
			
		||||
 | 
			
		||||
            spawnPacket = manager.createPacket(Packets.Server.NAMED_ENTITY_SPAWN);
 | 
			
		||||
            StructureModifier<Object> mods = spawnPacket.getModifier();
 | 
			
		||||
            spawnPackets[0] = manager.createPacket(Packets.Server.NAMED_ENTITY_SPAWN);
 | 
			
		||||
            StructureModifier<Object> mods = spawnPackets[0].getModifier();
 | 
			
		||||
            mods.write(0, e.getEntityId());
 | 
			
		||||
            mods.write(1, ((PlayerDisguise) this).getName());
 | 
			
		||||
            mods.write(2, (int) Math.floor(loc.getX() * 32));
 | 
			
		||||
@@ -218,7 +230,7 @@ public class Disguise {
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return spawnPacket;
 | 
			
		||||
        return spawnPackets;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void constructWatcher(EntityType type, int entityId) {
 | 
			
		||||
@@ -248,17 +260,63 @@ public class Disguise {
 | 
			
		||||
            else
 | 
			
		||||
                watcher = new FlagWatcher(entityId);
 | 
			
		||||
        }
 | 
			
		||||
        HashMap<Integer, Object> entity = Values.getMetaValues(DisguiseType.getType(type));
 | 
			
		||||
        HashMap<Integer, Object> disguise = Values.getMetaValues(getType());
 | 
			
		||||
        for (int i : entity.keySet()) {
 | 
			
		||||
            if (!disguise.containsKey(i) || entity.get(i) != disguise.get(i)
 | 
			
		||||
                    || entity.get(i).getClass() != disguise.get(i).getClass()) {
 | 
			
		||||
                if (disguise.containsKey(i)) {
 | 
			
		||||
                    watcher.setValue(i, disguise.get(i));
 | 
			
		||||
                } else {
 | 
			
		||||
                    watcher.setValue(i, null);
 | 
			
		||||
                }
 | 
			
		||||
        HashMap<Integer, Object> disguiseValues = Values.getMetaValues(getType());
 | 
			
		||||
        HashMap<Integer, Object> entityValues = Values.getMetaValues(DisguiseType.getType(type));
 | 
			
		||||
        // Start from 2 as they ALL share 0 and 1
 | 
			
		||||
        for (int dataNo = 2; dataNo <= 31; dataNo++) {
 | 
			
		||||
            // If the watcher already set a metadata on this
 | 
			
		||||
            if (watcher.getValue(dataNo, null) != null)
 | 
			
		||||
                continue;
 | 
			
		||||
            // If neither of them touch it
 | 
			
		||||
            if (!entityValues.containsKey(dataNo) && !disguiseValues.containsKey(dataNo))
 | 
			
		||||
                continue;
 | 
			
		||||
            // If the disguise has this, but not the entity. Then better set it!
 | 
			
		||||
            if (!entityValues.containsKey(dataNo) && disguiseValues.containsKey(dataNo)) {
 | 
			
		||||
                watcher.setValue(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)) {
 | 
			
		||||
                watcher.setValue(dataNo, null);
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            // Hmm. They both have the datavalue. Time to check if they have different default values!
 | 
			
		||||
            if (!entityValues.get(dataNo).equals(disguiseValues.get(dataNo))) {
 | 
			
		||||
                // They do! Set the default value!
 | 
			
		||||
                watcher.setValue(dataNo, disguiseValues.get(dataNo));
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            // Hmm. They both now have data values which are exactly the same. I need to do more intensive background checks.
 | 
			
		||||
            // I HAVE to find juicy gossip on these!
 | 
			
		||||
            // Maybe if I check that they extend each other..
 | 
			
		||||
            // Entity is 0 & 1 - But we aint gonna be checking that
 | 
			
		||||
            // EntityAgeable is 16
 | 
			
		||||
            // EntityInsentient is 10 & 11
 | 
			
		||||
            // EntityLiving is 6 & 7 & 8 & 9
 | 
			
		||||
 | 
			
		||||
            // Lets use switch
 | 
			
		||||
            Class owningData = null;
 | 
			
		||||
            switch (dataNo) {
 | 
			
		||||
            case 6:
 | 
			
		||||
            case 7:
 | 
			
		||||
            case 8:
 | 
			
		||||
            case 9:
 | 
			
		||||
                owningData = EntityLiving.class;
 | 
			
		||||
            case 10:
 | 
			
		||||
            case 11:
 | 
			
		||||
                owningData = EntityInsentient.class;
 | 
			
		||||
            case 16:
 | 
			
		||||
                owningData = EntityAgeable.class;
 | 
			
		||||
            default:
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
            // If they both extend the same base class. They OBVIOUSLY share the same datavalue. Right..?
 | 
			
		||||
            if (owningData != null && Values.getEntityClass(getType()).isInstance(owningData)
 | 
			
		||||
                    && Values.getEntityClass(DisguiseType.getType(type)).isInstance(owningData))
 | 
			
		||||
                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!
 | 
			
		||||
            watcher.setValue(dataNo, disguiseValues.get(dataNo));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -81,11 +81,13 @@ public class FlagWatcher {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private boolean getFlag(int i) {
 | 
			
		||||
        return ((Byte) getValue(0) & 1 << i) != 0;
 | 
			
		||||
        return ((Byte) getValue(0, (byte) 0) & 1 << i) != 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected Object getValue(int no) {
 | 
			
		||||
        return entityValues.get(no);
 | 
			
		||||
    protected Object getValue(int no, Object backup) {
 | 
			
		||||
        if (entityValues.containsKey(no))
 | 
			
		||||
            return entityValues.get(no);
 | 
			
		||||
        return backup;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isBurning() {
 | 
			
		||||
@@ -112,6 +114,10 @@ public class FlagWatcher {
 | 
			
		||||
        return getFlag(3);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected boolean isTrue(int id, int no) {
 | 
			
		||||
        return ((Byte) getValue(id, (byte) 0) & no) != 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void sendData(int data) {
 | 
			
		||||
        Object value = entityValues.get(data);
 | 
			
		||||
        List<WatchableObject> list = new ArrayList<WatchableObject>();
 | 
			
		||||
@@ -133,51 +139,54 @@ public class FlagWatcher {
 | 
			
		||||
 | 
			
		||||
    public void setBurning(boolean setBurning) {
 | 
			
		||||
        if (isSneaking() != setBurning) {
 | 
			
		||||
            setFlag(0, true);
 | 
			
		||||
            setFlag(0, 0, true);
 | 
			
		||||
            sendData(0);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void setFlag(int i, boolean flag) {
 | 
			
		||||
        byte currentValue = (Byte) getValue(0);
 | 
			
		||||
        if (flag) {
 | 
			
		||||
            setValue(0, Byte.valueOf((byte) (currentValue | 1 << i)));
 | 
			
		||||
        } else {
 | 
			
		||||
            setValue(0, Byte.valueOf((byte) (currentValue & ~(1 << i))));
 | 
			
		||||
    protected void setFlag(int id, int no, boolean flag) {
 | 
			
		||||
        if (isTrue(id, no) != flag) {
 | 
			
		||||
            byte b0 = (Byte) getValue(id, (byte) 0);
 | 
			
		||||
            if (flag) {
 | 
			
		||||
                setValue(id, (byte) (b0 | (no)));
 | 
			
		||||
            } else {
 | 
			
		||||
                setValue(id, (byte) (b0 & -(no + 1)));
 | 
			
		||||
            }
 | 
			
		||||
            sendData(id);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setInvisible(boolean setInvis) {
 | 
			
		||||
        if (isInvisible() != setInvis) {
 | 
			
		||||
            setFlag(5, true);
 | 
			
		||||
            setFlag(0, 5, true);
 | 
			
		||||
            sendData(5);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRiding(boolean setRiding) {
 | 
			
		||||
        if (isSprinting() != setRiding) {
 | 
			
		||||
            setFlag(2, true);
 | 
			
		||||
            setFlag(0, 2, true);
 | 
			
		||||
            sendData(2);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRightClicking(boolean setRightClicking) {
 | 
			
		||||
        if (isRightClicking() != setRightClicking) {
 | 
			
		||||
            setFlag(4, true);
 | 
			
		||||
            setFlag(0, 4, true);
 | 
			
		||||
            sendData(4);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSneaking(boolean setSneaking) {
 | 
			
		||||
        if (isSneaking() != setSneaking) {
 | 
			
		||||
            setFlag(1, true);
 | 
			
		||||
            setFlag(0, 1, true);
 | 
			
		||||
            sendData(1);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSprinting(boolean setSprinting) {
 | 
			
		||||
        if (isSprinting() != setSprinting) {
 | 
			
		||||
            setFlag(3, true);
 | 
			
		||||
            setFlag(0, 3, true);
 | 
			
		||||
            sendData(3);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -4,22 +4,21 @@ import java.util.HashMap;
 | 
			
		||||
 | 
			
		||||
public class Values {
 | 
			
		||||
 | 
			
		||||
    private static HashMap<DisguiseType, HashMap<String, Double>> attributesValues = new HashMap<DisguiseType, HashMap<String, Double>>();
 | 
			
		||||
    private static HashMap<DisguiseType, HashMap<Integer, Object>> metaValues = new HashMap<DisguiseType, HashMap<Integer, Object>>();
 | 
			
		||||
    private static HashMap<DisguiseType, Values> values = new HashMap<DisguiseType, Values>();
 | 
			
		||||
 | 
			
		||||
    public static HashMap<String, Double> getAttributesValues(DisguiseType type) {
 | 
			
		||||
        if (type == DisguiseType.DONKEY || type == DisguiseType.MULE || type == DisguiseType.ZOMBIE_HORSE
 | 
			
		||||
                || type == DisguiseType.SKELETON_HORSE)
 | 
			
		||||
            type = DisguiseType.HORSE;
 | 
			
		||||
        if (type == DisguiseType.MINECART_CHEST || type == DisguiseType.MINECART_FURNACE || type == DisguiseType.MINECART_HOPPER
 | 
			
		||||
                || type == DisguiseType.MINECART_TNT || type == DisguiseType.MINECART_MOB_SPAWNER)
 | 
			
		||||
            type = DisguiseType.MINECART_RIDEABLE;
 | 
			
		||||
        if (type == DisguiseType.WITHER_SKELETON)
 | 
			
		||||
            type = DisguiseType.SKELETON;
 | 
			
		||||
        return attributesValues.get(type);
 | 
			
		||||
        return getValues(type).getAttributesValues();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static Class getEntityClass(DisguiseType type) {
 | 
			
		||||
        return getValues(type).getEntityClass();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static HashMap<Integer, Object> getMetaValues(DisguiseType type) {
 | 
			
		||||
        return getValues(type).getMetaValues();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static Values getValues(DisguiseType type) {
 | 
			
		||||
        if (type == DisguiseType.DONKEY || type == DisguiseType.MULE || type == DisguiseType.ZOMBIE_HORSE
 | 
			
		||||
                || type == DisguiseType.SKELETON_HORSE)
 | 
			
		||||
            type = DisguiseType.HORSE;
 | 
			
		||||
@@ -28,22 +27,35 @@ public class Values {
 | 
			
		||||
            type = DisguiseType.MINECART_RIDEABLE;
 | 
			
		||||
        if (type == DisguiseType.WITHER_SKELETON)
 | 
			
		||||
            type = DisguiseType.SKELETON;
 | 
			
		||||
        return metaValues.get(type);
 | 
			
		||||
        return values.get(type);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private DisguiseType type;
 | 
			
		||||
    private HashMap<String, Double> attributesValues = new HashMap<String, Double>();
 | 
			
		||||
 | 
			
		||||
    public Values(DisguiseType type) {
 | 
			
		||||
        this.type = type;
 | 
			
		||||
        metaValues.put(this.type, new HashMap<Integer, Object>());
 | 
			
		||||
        attributesValues.put(this.type, new HashMap<String, Double>());
 | 
			
		||||
    private Class declared;
 | 
			
		||||
 | 
			
		||||
    private HashMap<Integer, Object> metaValues = new HashMap<Integer, Object>();
 | 
			
		||||
 | 
			
		||||
    public Values(DisguiseType type, Class classType) {
 | 
			
		||||
        values.put(type, this);
 | 
			
		||||
        declared = classType;
 | 
			
		||||
    }
 | 
			
		||||
    public HashMap<String, Double> getAttributesValues() {
 | 
			
		||||
        return attributesValues;
 | 
			
		||||
    }
 | 
			
		||||
    public Class getEntityClass() {
 | 
			
		||||
        return declared;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public HashMap<Integer, Object> getMetaValues() {
 | 
			
		||||
        return metaValues;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setAttributesValue(String attribute, Double value) {
 | 
			
		||||
        attributesValues.get(type).put(attribute, value);
 | 
			
		||||
        attributesValues.put(attribute, value);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMetaValue(int no, Object value) {
 | 
			
		||||
        metaValues.get(type).put(no, value);
 | 
			
		||||
        metaValues.put(no, value);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,11 +4,10 @@ public abstract class AgeableWatcher extends LivingWatcher {
 | 
			
		||||
 | 
			
		||||
    public AgeableWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(12, 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isAdult() {
 | 
			
		||||
        return (Integer) getValue(12) >= 0;
 | 
			
		||||
        return (Integer) getValue(12, 0) >= 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setAdult(boolean isAdult) {
 | 
			
		||||
 
 | 
			
		||||
@@ -6,16 +6,14 @@ public class ArrowWatcher extends FlagWatcher {
 | 
			
		||||
 | 
			
		||||
    public ArrowWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(16, (byte) 0);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    public boolean isMoving() {
 | 
			
		||||
        return (Byte) getValue(16) == 1;
 | 
			
		||||
        return (Byte) getValue(16, (byte) 0) == 1;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    public void setMoving(boolean moving) {
 | 
			
		||||
        setValue(16, (byte) (moving ? 1 : 0));
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,15 +4,14 @@ public class BatWatcher extends LivingWatcher {
 | 
			
		||||
 | 
			
		||||
    public BatWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(16, (byte) 1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isFlying() {
 | 
			
		||||
        return (Byte) getValue(16) == 0;
 | 
			
		||||
        return (Byte) getValue(16, (byte) 1) == 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFlying(boolean flying) {
 | 
			
		||||
        if ((Byte) getValue(16) != (flying ? 1 : 0)) {
 | 
			
		||||
        if ((Byte) getValue(16, (byte) 1) != (flying ? 1 : 0)) {
 | 
			
		||||
            setValue(16, (byte) (flying ? 1 : 0));
 | 
			
		||||
            sendData(16);
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -4,11 +4,10 @@ public class BlazeWatcher extends LivingWatcher {
 | 
			
		||||
 | 
			
		||||
    public BlazeWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(16, (byte) 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isBlazing() {
 | 
			
		||||
        return (Byte) getValue(16) == 1;
 | 
			
		||||
        return (Byte) getValue(16, (byte) 0) == 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setBlazing(boolean isBlazing) {
 | 
			
		||||
 
 | 
			
		||||
@@ -6,20 +6,25 @@ public class BoatWatcher extends FlagWatcher {
 | 
			
		||||
 | 
			
		||||
    public BoatWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(17, 10);
 | 
			
		||||
        setValue(18, 0);
 | 
			
		||||
        setValue(19, 40);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDamage(int dmg) {
 | 
			
		||||
        if ((Integer) getValue(19) != dmg) {
 | 
			
		||||
    public int getDamage() {
 | 
			
		||||
        return (Integer) getValue(19, 40F);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getHealth() {
 | 
			
		||||
        return (Integer) getValue(17, 10);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDamage(float dmg) {
 | 
			
		||||
        if ((Float) getValue(19, 40F) != dmg) {
 | 
			
		||||
            setValue(19, dmg);
 | 
			
		||||
            sendData(19);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    public void setHealth(int health) {
 | 
			
		||||
        if ((Integer) getValue(17) != health) {
 | 
			
		||||
        if ((Integer) getValue(17, 10) != health) {
 | 
			
		||||
            setValue(17, health);
 | 
			
		||||
            sendData(17);
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -4,24 +4,26 @@ public class CreeperWatcher extends LivingWatcher {
 | 
			
		||||
 | 
			
		||||
    public CreeperWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(16, (byte) 0);
 | 
			
		||||
        setValue(17, 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isFused() {
 | 
			
		||||
        return (Byte) getValue(16) == 1;
 | 
			
		||||
        return (Byte) getValue(16, (byte) 0) == 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isPowered() {
 | 
			
		||||
        return (Byte) getValue(17) == 0;
 | 
			
		||||
        return (Byte) getValue(17, (byte) 0) == 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFuse(boolean isFused) {
 | 
			
		||||
        if (isFused == isFused())
 | 
			
		||||
            return;
 | 
			
		||||
        setValue(16, (byte) (isFused ? 1 : -1));
 | 
			
		||||
        sendData(16);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setPowered(boolean powered) {
 | 
			
		||||
        if (powered == isPowered())
 | 
			
		||||
            return;
 | 
			
		||||
        setValue(17, (byte) (powered ? 1 : 0));
 | 
			
		||||
        sendData(17);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@ public class DonkeyWatcher extends HorseWatcher {
 | 
			
		||||
 | 
			
		||||
    public DonkeyWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setHorseType(1);
 | 
			
		||||
        setValue(19, (byte) 1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -9,11 +9,11 @@ public class DroppedItemWatcher extends FlagWatcher {
 | 
			
		||||
 | 
			
		||||
    public DroppedItemWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(10, CraftItemStack.asNMSCopy(new ItemStack(1)));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public ItemStack getItemStack() {
 | 
			
		||||
        return CraftItemStack.asBukkitCopy((net.minecraft.server.v1_6_R2.ItemStack) getValue(10));
 | 
			
		||||
        return CraftItemStack.asBukkitCopy((net.minecraft.server.v1_6_R2.ItemStack) getValue(10,
 | 
			
		||||
                CraftItemStack.asNMSCopy(new ItemStack(1))));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setItemStack(ItemStack item) {
 | 
			
		||||
 
 | 
			
		||||
@@ -4,16 +4,6 @@ public class EnderDragonWatcher extends LivingWatcher {
 | 
			
		||||
 | 
			
		||||
    public EnderDragonWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(16, 300);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getHealth() {
 | 
			
		||||
        return (Integer) getValue(16);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setHealth(int health) {
 | 
			
		||||
        setValue(16, health);
 | 
			
		||||
        sendData(16);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,30 +4,29 @@ public class EndermanWatcher extends LivingWatcher {
 | 
			
		||||
 | 
			
		||||
    public EndermanWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(16, (byte) 0);
 | 
			
		||||
        setValue(17, (byte) 0);
 | 
			
		||||
        setValue(18, (byte) 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getCarriedData() {
 | 
			
		||||
        return ((Byte) getValue(17));
 | 
			
		||||
        return ((Byte) getValue(17, (byte) 0));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getCarriedId() {
 | 
			
		||||
        return ((Byte) getValue(16));
 | 
			
		||||
        return ((Byte) getValue(16, (byte) 0));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isAgressive() {
 | 
			
		||||
        return (Integer) getValue(18) == 1;
 | 
			
		||||
        return (Integer) getValue(18, (byte) 0) == 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setAgressive(boolean isAgressive) {
 | 
			
		||||
        setValue(18, (byte) (isAgressive ? 1 : 0));
 | 
			
		||||
        sendData(18);
 | 
			
		||||
        if (isAgressive() != isAgressive()) {
 | 
			
		||||
            setValue(18, (byte) (isAgressive ? 1 : 0));
 | 
			
		||||
            sendData(18);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCarriedItem(int id, int dataValue) {
 | 
			
		||||
        if ((Byte) getValue(16) != id || (Byte) getValue(17) != dataValue) {
 | 
			
		||||
        if (getCarriedId() != id || getCarriedData() != dataValue) {
 | 
			
		||||
            setValue(16, (byte) (id & 255));
 | 
			
		||||
            setValue(17, (byte) (dataValue & 255));
 | 
			
		||||
            sendData(16);
 | 
			
		||||
 
 | 
			
		||||
@@ -4,16 +4,17 @@ public class GhastWatcher extends LivingWatcher {
 | 
			
		||||
 | 
			
		||||
    public GhastWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(16, (byte) 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isAgressive() {
 | 
			
		||||
        return (Byte) getValue(16) == 1;
 | 
			
		||||
        return (Byte) getValue(16, (byte) 0) == 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setAgressive(boolean isAgressive) {
 | 
			
		||||
        setValue(16, (byte) (isAgressive ? 1 : 0));
 | 
			
		||||
        sendData(16);
 | 
			
		||||
        if (isAgressive() != isAgressive) {
 | 
			
		||||
            setValue(16, (byte) (isAgressive ? 1 : 0));
 | 
			
		||||
            sendData(16);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,23 +2,24 @@ package me.libraryaddict.disguise.DisguiseTypes.Watchers;
 | 
			
		||||
 | 
			
		||||
import java.util.Random;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.Horse.Color;
 | 
			
		||||
import org.bukkit.entity.Horse.Style;
 | 
			
		||||
 | 
			
		||||
public class HorseWatcher extends AgeableWatcher {
 | 
			
		||||
 | 
			
		||||
    public HorseWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(16, 0);
 | 
			
		||||
        setValue(19, (byte) 0);
 | 
			
		||||
        setValue(20, new Random().nextInt(7));
 | 
			
		||||
        setValue(21, "");
 | 
			
		||||
        setValue(22, 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getColoring() {
 | 
			
		||||
        return (Integer) getValue(20);
 | 
			
		||||
    public Color getColor() {
 | 
			
		||||
        return Color.values()[((Integer) getValue(20, 0) & 0xFF)];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getHorseType() {
 | 
			
		||||
        return (int) (Byte) getValue(19);
 | 
			
		||||
    public Style getStyle() {
 | 
			
		||||
        return Style.values()[((Integer) getValue(20, 0) >>> 8)];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean hasChest() {
 | 
			
		||||
@@ -50,7 +51,7 @@ public class HorseWatcher extends AgeableWatcher {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private boolean isTrue(int i) {
 | 
			
		||||
        return ((Integer) getValue(16) & i) != 0;
 | 
			
		||||
        return ((Integer) getValue(16, (byte) 0) & i) != 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCanBred(boolean bred) {
 | 
			
		||||
@@ -61,14 +62,14 @@ public class HorseWatcher extends AgeableWatcher {
 | 
			
		||||
        setFlag(8, true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setColoring(int color) {
 | 
			
		||||
        setValue(20, color);
 | 
			
		||||
    public void setColor(Color color) {
 | 
			
		||||
        setValue(20, color.ordinal() & 0xFF | getStyle().ordinal() << 8);
 | 
			
		||||
        sendData(20);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void setFlag(int i, boolean flag) {
 | 
			
		||||
        if (isTrue(i) != flag) {
 | 
			
		||||
            int j = (Integer) getValue(16);
 | 
			
		||||
            int j = (Integer) getValue(16, (byte) 0);
 | 
			
		||||
            if (flag) {
 | 
			
		||||
                setValue(16, j | i);
 | 
			
		||||
            } else {
 | 
			
		||||
@@ -82,11 +83,6 @@ public class HorseWatcher extends AgeableWatcher {
 | 
			
		||||
        setFlag(32, grazing);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setHorseType(int type) {
 | 
			
		||||
        setValue(19, (byte) type);
 | 
			
		||||
        sendData(19);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMouthOpen(boolean mouthOpen) {
 | 
			
		||||
        setFlag(128, mouthOpen);
 | 
			
		||||
    }
 | 
			
		||||
@@ -99,6 +95,11 @@ public class HorseWatcher extends AgeableWatcher {
 | 
			
		||||
        setFlag(4, saddled);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setStyle(Style style) {
 | 
			
		||||
        setValue(20, getColor().ordinal() & 0xFF | style.ordinal() << 8);
 | 
			
		||||
        sendData(20);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setTamed(boolean tamed) {
 | 
			
		||||
        setFlag(2, tamed);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -9,14 +9,14 @@ public class ItemFrameWatcher extends FlagWatcher {
 | 
			
		||||
 | 
			
		||||
    public ItemFrameWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(2, 5);
 | 
			
		||||
        setValue(3, (byte) 0);
 | 
			
		||||
        // setValue(2, CraftItemStack.asCraftCopy(new ItemStack(0)));
 | 
			
		||||
        // setValue(3, (byte) 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public ItemStack getItemStack() {
 | 
			
		||||
        if (getValue(3) instanceof Integer)
 | 
			
		||||
        if (getValue(3, (byte) 0) instanceof Integer)
 | 
			
		||||
            return new ItemStack(0);
 | 
			
		||||
        return CraftItemStack.asBukkitCopy((net.minecraft.server.v1_6_R2.ItemStack) getValue(3));
 | 
			
		||||
        return CraftItemStack.asBukkitCopy((net.minecraft.server.v1_6_R2.ItemStack) getValue(3, null));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setItemStack(ItemStack newItem) {
 | 
			
		||||
 
 | 
			
		||||
@@ -16,8 +16,6 @@ public class LivingWatcher extends FlagWatcher {
 | 
			
		||||
 | 
			
		||||
    public LivingWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(10, "");
 | 
			
		||||
        setValue(11, (byte) 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void addPotionEffect(PotionEffect potionEffect) {
 | 
			
		||||
@@ -28,11 +26,15 @@ public class LivingWatcher extends FlagWatcher {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getCustomName() {
 | 
			
		||||
        return (String) getValue(10);
 | 
			
		||||
        return (String) getValue(10, "");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public float getHealth() {
 | 
			
		||||
        return (Float) getValue(6, 0F);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean getPotionParticlesRemoved() {
 | 
			
		||||
        return (Byte) getValue(8) == 1;
 | 
			
		||||
        return (Byte) getValue(8, (byte) 0) == 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean hasCustomName() {
 | 
			
		||||
@@ -46,6 +48,10 @@ public class LivingWatcher extends FlagWatcher {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isCustomNameVisible() {
 | 
			
		||||
        return (Byte) getValue(11, (byte) 0) == 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void removePotionEffect(PotionEffectType type) {
 | 
			
		||||
        Iterator<MobEffect> itel = potionEffects.iterator();
 | 
			
		||||
        while (itel.hasNext()) {
 | 
			
		||||
@@ -78,10 +84,15 @@ public class LivingWatcher extends FlagWatcher {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCustomNameVisible(boolean display) {
 | 
			
		||||
        if ((Byte) getValue(11) != (display ? 1 : 0)) {
 | 
			
		||||
        if (this.isCustomNameVisible()) {
 | 
			
		||||
            setValue(11, (byte) (display ? 1 : 0));
 | 
			
		||||
            sendData(11);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setHealth(float health) {
 | 
			
		||||
        setValue(6, health);
 | 
			
		||||
        sendData(6);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,14 +8,14 @@ public class MinecartWatcher extends FlagWatcher {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public float getDamage() {
 | 
			
		||||
        if (getValue(19, 0F) != null)
 | 
			
		||||
            return (Float) getValue(19, 0F);
 | 
			
		||||
        return 0F;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDamage(float damage) {
 | 
			
		||||
        setValue(19, damage);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public float getDamage() {
 | 
			
		||||
        if (getValue(19) != null)
 | 
			
		||||
            return (Float) getValue(19);
 | 
			
		||||
        return 0F;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@ public class MuleWatcher extends HorseWatcher {
 | 
			
		||||
 | 
			
		||||
    public MuleWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setHorseType(2);
 | 
			
		||||
        setValue(19, (byte) 2);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,33 +7,14 @@ public class OcelotWatcher extends AgeableWatcher {
 | 
			
		||||
 | 
			
		||||
    public OcelotWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(16, (byte) 0);
 | 
			
		||||
        setValue(17, "");
 | 
			
		||||
        setValue(18, (byte) 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getOwner() {
 | 
			
		||||
        return (String) getValue(17);
 | 
			
		||||
        return (String) getValue(17, "");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Type getType() {
 | 
			
		||||
        return Ocelot.Type.getType((Byte) getValue(18));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private boolean isTrue(int no) {
 | 
			
		||||
        return ((Byte) getValue(16) & no) != 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void setFlag(int no, boolean flag) {
 | 
			
		||||
        if (isTrue(no) != flag) {
 | 
			
		||||
            byte b0 = (Byte) getValue(16);
 | 
			
		||||
            if (flag) {
 | 
			
		||||
                setValue(16, (byte) (b0 | (no)));
 | 
			
		||||
            } else {
 | 
			
		||||
                setValue(16, (byte) (b0 & -(no + 1)));
 | 
			
		||||
            }
 | 
			
		||||
            sendData(16);
 | 
			
		||||
        }
 | 
			
		||||
        return Ocelot.Type.getType((Byte) getValue(18, (byte) 0));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setOwner(String newOwner) {
 | 
			
		||||
@@ -41,11 +22,11 @@ public class OcelotWatcher extends AgeableWatcher {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSitting(boolean sitting) {
 | 
			
		||||
        setFlag(1, sitting);
 | 
			
		||||
        setFlag(16, 1, sitting);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setTamed(boolean tamed) {
 | 
			
		||||
        setFlag(4, tamed);
 | 
			
		||||
        setFlag(16, 4, tamed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setType(Type newType) {
 | 
			
		||||
 
 | 
			
		||||
@@ -4,11 +4,10 @@ public class PigWatcher extends AgeableWatcher {
 | 
			
		||||
 | 
			
		||||
    public PigWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(16, (byte) 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isSaddled() {
 | 
			
		||||
        return (Byte) getValue(16) == 0;
 | 
			
		||||
        return (Byte) getValue(16, (byte) 0) == 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSaddled(boolean isSaddled) {
 | 
			
		||||
 
 | 
			
		||||
@@ -4,11 +4,10 @@ public class PigZombieWatcher extends LivingWatcher {
 | 
			
		||||
 | 
			
		||||
    public PigZombieWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(12, (byte) 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isBaby() {
 | 
			
		||||
        return (Byte) getValue(12) == 1;
 | 
			
		||||
        return (Byte) getValue(12, (byte) 0) == 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setBaby(boolean baby) {
 | 
			
		||||
 
 | 
			
		||||
@@ -4,12 +4,10 @@ public class PlayerWatcher extends LivingWatcher {
 | 
			
		||||
 | 
			
		||||
    public PlayerWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(9, (byte) 0);
 | 
			
		||||
        setValue(18, 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getArrowsSticking() {
 | 
			
		||||
        return (Byte) getValue(9);
 | 
			
		||||
        return (Byte) getValue(9, (byte) 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setArrowsSticking(int arrowsNo) {
 | 
			
		||||
 
 | 
			
		||||
@@ -10,16 +10,16 @@ public class SheepWatcher extends AgeableWatcher {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public AnimalColor getColor() {
 | 
			
		||||
        return AnimalColor.values()[(Byte) getValue(16) & 15];
 | 
			
		||||
        return AnimalColor.values()[(Byte) getValue(16, (byte) 0) & 15];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isSheared() {
 | 
			
		||||
        return ((Byte) getValue(16) & 16) != 0;
 | 
			
		||||
        return ((Byte) getValue(16, (byte) 0) & 16) != 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setColor(AnimalColor color) {
 | 
			
		||||
        if (getColor() != color) {
 | 
			
		||||
            byte b0 = (Byte) getValue(16);
 | 
			
		||||
            byte b0 = (Byte) getValue(16, (byte) 0);
 | 
			
		||||
            setValue(16, (byte) (b0 & 240 | color.getId() & 15));
 | 
			
		||||
            sendData(16);
 | 
			
		||||
        }
 | 
			
		||||
@@ -27,7 +27,7 @@ public class SheepWatcher extends AgeableWatcher {
 | 
			
		||||
 | 
			
		||||
    public void setSheared(boolean flag) {
 | 
			
		||||
        if (isSheared() != flag) {
 | 
			
		||||
            byte b0 = (Byte) getValue(16);
 | 
			
		||||
            byte b0 = (Byte) getValue(16, (byte) 0);
 | 
			
		||||
            if (flag) {
 | 
			
		||||
                setValue(16, (byte) (b0 | 16));
 | 
			
		||||
            } else {
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@ public class SkeletonHorseWatcher extends HorseWatcher {
 | 
			
		||||
 | 
			
		||||
    public SkeletonHorseWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setHorseType(4);
 | 
			
		||||
        setValue(19, (byte) 4);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,6 @@ public class SkeletonWatcher extends LivingWatcher {
 | 
			
		||||
 | 
			
		||||
    public SkeletonWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(13, (byte) 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,11 +7,10 @@ public class SlimeWatcher extends LivingWatcher {
 | 
			
		||||
    public SlimeWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(16, (byte) (new Random().nextInt(4) + 1));
 | 
			
		||||
        setValue(18, (byte) 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getSize() {
 | 
			
		||||
        return (Integer) getValue(16);
 | 
			
		||||
        return (Integer) getValue(16, (byte) 1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSize(int size) {
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ public class VillagerWatcher extends AgeableWatcher {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Profession getProfession() {
 | 
			
		||||
        return Profession.values()[(Integer) getValue(16)];
 | 
			
		||||
        return Profession.values()[(Integer) getValue(16, 0)];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setProfession(Profession newProfession) {
 | 
			
		||||
 
 | 
			
		||||
@@ -6,23 +6,18 @@ public class WolfWatcher extends AgeableWatcher {
 | 
			
		||||
 | 
			
		||||
    public WolfWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(16, (byte) 0);
 | 
			
		||||
        setValue(17, "");
 | 
			
		||||
        setValue(18, 8F);
 | 
			
		||||
        setValue(19, (byte) 0);
 | 
			
		||||
        setValue(20, (byte) 14);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public AnimalColor getCollarColor() {
 | 
			
		||||
        return AnimalColor.values()[(Byte) getValue(20)];
 | 
			
		||||
        return AnimalColor.values()[(Byte) getValue(20, (byte) 14)];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public float getHealth() {
 | 
			
		||||
        return (Float) getValue(18);
 | 
			
		||||
        return (Float) getValue(18, 8F);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getName() {
 | 
			
		||||
        return (String) getValue(17);
 | 
			
		||||
        return (String) getValue(17, "");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isAngry() {
 | 
			
		||||
@@ -38,7 +33,7 @@ public class WolfWatcher extends AgeableWatcher {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private boolean isTrue(int no) {
 | 
			
		||||
        return ((Byte) getValue(16) & no) != 0;
 | 
			
		||||
        return ((Byte) getValue(16, (byte) 0) & no) != 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setAngry(boolean angry) {
 | 
			
		||||
@@ -54,7 +49,7 @@ public class WolfWatcher extends AgeableWatcher {
 | 
			
		||||
 | 
			
		||||
    private void setFlag(int no, boolean flag) {
 | 
			
		||||
        if (isTrue(no) != flag) {
 | 
			
		||||
            byte b0 = (Byte) getValue(16);
 | 
			
		||||
            byte b0 = (Byte) getValue(16, (byte) 0);
 | 
			
		||||
            if (flag) {
 | 
			
		||||
                setValue(16, (byte) (b0 | (no)));
 | 
			
		||||
            } else {
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@ public class ZombieHorseWatcher extends HorseWatcher {
 | 
			
		||||
 | 
			
		||||
    public ZombieHorseWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setHorseType(3);
 | 
			
		||||
        setValue(19, (byte) 3);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,11 +4,10 @@ public class ZombieWatcher extends PigZombieWatcher {
 | 
			
		||||
 | 
			
		||||
    public ZombieWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(13, (byte) 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isVillager() {
 | 
			
		||||
        return (Byte) getValue(13) == 1;
 | 
			
		||||
        return (Byte) getValue(13, (byte) 0) == 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setVillager(boolean villager) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
package me.libraryaddict.disguise;
 | 
			
		||||
 | 
			
		||||
import java.lang.reflect.InvocationTargetException;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
@@ -93,7 +94,7 @@ public class LibsDisguises extends JavaPlugin implements Listener {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onPacketSending(PacketEvent event) {
 | 
			
		||||
                try {
 | 
			
		||||
                    Player observer = event.getPlayer();
 | 
			
		||||
                    final Player observer = event.getPlayer();
 | 
			
		||||
                    StructureModifier<Entity> entityModifer = event.getPacket().getEntityModifier(observer.getWorld());
 | 
			
		||||
                    org.bukkit.entity.Entity entity = entityModifer.read((Packets.Server.COLLECT == event.getPacketID() ? 1 : 0));
 | 
			
		||||
                    if (entity == observer)
 | 
			
		||||
@@ -131,18 +132,54 @@ public class LibsDisguises extends JavaPlugin implements Listener {
 | 
			
		||||
                                String name = (String) mods.read(1);
 | 
			
		||||
                                if (!name.equals(((PlayerDisguise) disguise).getName())) {
 | 
			
		||||
                                    // manager.sendServerPacket(observer, disguise.constructDestroyPacket(entity.getEntityId()));
 | 
			
		||||
                                    event.setPacket(disguise.constructPacket(entity));
 | 
			
		||||
                                    final PacketContainer[] packets = disguise.constructPacket(entity);
 | 
			
		||||
                                    event.setPacket(packets[0]);
 | 
			
		||||
                                    if (packets.length > 1) {
 | 
			
		||||
                                        Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
 | 
			
		||||
                                            public void run() {
 | 
			
		||||
                                                try {
 | 
			
		||||
                                                    manager.sendServerPacket(observer, packets[1]);
 | 
			
		||||
                                                } catch (InvocationTargetException e) {
 | 
			
		||||
                                                    e.printStackTrace();
 | 
			
		||||
                                                }
 | 
			
		||||
                                            }
 | 
			
		||||
                                        });
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            } else {
 | 
			
		||||
                                // manager.sendServerPacket(observer, disguise.constructDestroyPacket(entity.getEntityId()));
 | 
			
		||||
                                event.setPacket(disguise.constructPacket(entity));
 | 
			
		||||
                                final PacketContainer[] packets = disguise.constructPacket(entity);
 | 
			
		||||
                                event.setPacket(packets[0]);
 | 
			
		||||
                                if (packets.length > 1) {
 | 
			
		||||
                                    Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
 | 
			
		||||
                                        public void run() {
 | 
			
		||||
                                            try {
 | 
			
		||||
                                                manager.sendServerPacket(observer, packets[1]);
 | 
			
		||||
                                            } catch (InvocationTargetException e) {
 | 
			
		||||
                                                e.printStackTrace();
 | 
			
		||||
                                            }
 | 
			
		||||
                                        }
 | 
			
		||||
                                    });
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        } else if (event.getPacketID() == Packets.Server.MOB_SPAWN
 | 
			
		||||
                                || event.getPacketID() == Packets.Server.ADD_EXP_ORB
 | 
			
		||||
                                || event.getPacketID() == Packets.Server.VEHICLE_SPAWN
 | 
			
		||||
                                || event.getPacketID() == Packets.Server.ENTITY_PAINTING) {
 | 
			
		||||
                            // manager.sendServerPacket(observer, disguise.constructDestroyPacket(entity.getEntityId()));
 | 
			
		||||
                            event.setPacket(disguise.constructPacket(entity));
 | 
			
		||||
                            final PacketContainer[] packets = disguise.constructPacket(entity);
 | 
			
		||||
                            event.setPacket(packets[0]);
 | 
			
		||||
                            if (packets.length > 1) {
 | 
			
		||||
                                Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
 | 
			
		||||
                                    public void run() {
 | 
			
		||||
                                        try {
 | 
			
		||||
                                            manager.sendServerPacket(observer, packets[1]);
 | 
			
		||||
                                        } catch (InvocationTargetException e) {
 | 
			
		||||
                                            e.printStackTrace();
 | 
			
		||||
                                        }
 | 
			
		||||
                                    }
 | 
			
		||||
                                });
 | 
			
		||||
                            }
 | 
			
		||||
                        } else if (event.getPacketID() == Packets.Server.ARM_ANIMATION
 | 
			
		||||
                                || event.getPacketID() == Packets.Server.COLLECT) {
 | 
			
		||||
                            if (disguise.getType().isMisc()) {
 | 
			
		||||
@@ -156,13 +193,13 @@ public class LibsDisguises extends JavaPlugin implements Listener {
 | 
			
		||||
                            if (disguise.getType() == DisguiseType.ENDER_DRAGON) {
 | 
			
		||||
                                byte value = (Byte) mods.read(4);
 | 
			
		||||
                                mods.write(4, (byte) (value - 128));
 | 
			
		||||
                            } else if (disguise.getType().isMisc() || disguise.getType() == DisguiseType.GHAST) {
 | 
			
		||||
                            } else if (disguise.getType().isMisc()) {
 | 
			
		||||
                                byte value = (Byte) mods.read(4);
 | 
			
		||||
                                if (disguise.getType() != DisguiseType.PAINTING)
 | 
			
		||||
                                    mods.write(4, (byte) (value + 128));
 | 
			
		||||
                                else if (disguise.getType().isMisc())
 | 
			
		||||
                                    mods.write(4, (byte) -(value + 128));
 | 
			
		||||
                                else
 | 
			
		||||
                                if (disguise.getType() == DisguiseType.ITEM_FRAME) {
 | 
			
		||||
                                    mods.write(4, -value);
 | 
			
		||||
                                } else if (disguise.getType() == DisguiseType.PAINTING) {
 | 
			
		||||
                                    mods.write(4, -(value + 128));
 | 
			
		||||
                                } else if (disguise.getType().isMisc())
 | 
			
		||||
                                    mods.write(4, (byte) (value - 64));
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
@@ -255,13 +292,15 @@ public class LibsDisguises extends JavaPlugin implements Listener {
 | 
			
		||||
                name = "LargeFireball";
 | 
			
		||||
            try {
 | 
			
		||||
                net.minecraft.server.v1_6_R2.Entity entity = null;
 | 
			
		||||
                Class entityClass;
 | 
			
		||||
                if (disguiseType == DisguiseType.PLAYER) {
 | 
			
		||||
                    entityClass = EntityHuman.class;
 | 
			
		||||
                    entity = new DisguiseHuman(world);
 | 
			
		||||
                } else {
 | 
			
		||||
                    Class entityClass = Class.forName("net.minecraft.server.v1_6_R2.Entity" + name);
 | 
			
		||||
                    entityClass = Class.forName("net.minecraft.server.v1_6_R2.Entity" + name);
 | 
			
		||||
                    entity = (net.minecraft.server.v1_6_R2.Entity) entityClass.getConstructor(World.class).newInstance(world);
 | 
			
		||||
                }
 | 
			
		||||
                Values value = new Values(disguiseType);
 | 
			
		||||
                Values value = new Values(disguiseType, entityClass);
 | 
			
		||||
                List<WatchableObject> watchers = entity.getDataWatcher().c();
 | 
			
		||||
                for (WatchableObject watch : watchers)
 | 
			
		||||
                    value.setMetaValue(watch.a(), watch.b());
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user