Move calls elsewhere and rename some methods and remove old code.
This commit is contained in:
		@@ -1,7 +1,5 @@
 | 
			
		||||
package me.libraryaddict.disguise.DisguiseTypes;
 | 
			
		||||
 | 
			
		||||
import java.lang.reflect.Constructor;
 | 
			
		||||
import java.lang.reflect.Field;
 | 
			
		||||
import java.lang.reflect.InvocationTargetException;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
@@ -10,9 +8,7 @@ import java.util.Random;
 | 
			
		||||
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseAPI;
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.Watchers.AgeableWatcher;
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.Watchers.LivingWatcher;
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.Watchers.ZombieWatcher;
 | 
			
		||||
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;
 | 
			
		||||
@@ -22,7 +18,6 @@ import net.minecraft.server.v1_6_R2.EntityTrackerEntry;
 | 
			
		||||
import net.minecraft.server.v1_6_R2.ItemStack;
 | 
			
		||||
import net.minecraft.server.v1_6_R2.MathHelper;
 | 
			
		||||
import net.minecraft.server.v1_6_R2.EnumArt;
 | 
			
		||||
import net.minecraft.server.v1_6_R2.WatchableObject;
 | 
			
		||||
import net.minecraft.server.v1_6_R2.WorldServer;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Location;
 | 
			
		||||
@@ -57,16 +52,16 @@ public class Disguise {
 | 
			
		||||
        return disguise;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public PacketContainer[] constructPacket(org.bukkit.entity.Entity e) {
 | 
			
		||||
    public PacketContainer[] constructPacket(org.bukkit.entity.Entity disguisedEntity) {
 | 
			
		||||
        PacketContainer[] spawnPackets = new PacketContainer[2];
 | 
			
		||||
        ProtocolManager manager = ProtocolLibrary.getProtocolManager();
 | 
			
		||||
        Entity entity = ((CraftEntity) e).getHandle();
 | 
			
		||||
        Location loc = e.getLocation();
 | 
			
		||||
        Entity nmsEntity = ((CraftEntity) disguisedEntity).getHandle();
 | 
			
		||||
        Location loc = disguisedEntity.getLocation();
 | 
			
		||||
        if (getType() == DisguiseType.EXPERIENCE_ORB) {
 | 
			
		||||
 | 
			
		||||
            spawnPackets[0] = manager.createPacket(Packets.Server.ADD_EXP_ORB);
 | 
			
		||||
            StructureModifier<Object> mods = spawnPackets[0].getModifier();
 | 
			
		||||
            mods.write(0, e.getEntityId());
 | 
			
		||||
            mods.write(0, disguisedEntity.getEntityId());
 | 
			
		||||
            mods.write(1, (int) Math.floor(loc.getX() * 32));
 | 
			
		||||
            mods.write(2, (int) Math.floor(loc.getY() * 32) + 2);
 | 
			
		||||
            mods.write(3, (int) Math.floor(loc.getZ() * 32));
 | 
			
		||||
@@ -75,7 +70,7 @@ public class Disguise {
 | 
			
		||||
        } else if (getType() == DisguiseType.PAINTING) {
 | 
			
		||||
            spawnPackets[0] = manager.createPacket(Packets.Server.ENTITY_PAINTING);
 | 
			
		||||
            StructureModifier<Object> mods = spawnPackets[0].getModifier();
 | 
			
		||||
            mods.write(0, e.getEntityId());
 | 
			
		||||
            mods.write(0, disguisedEntity.getEntityId());
 | 
			
		||||
            mods.write(1, loc.getBlockX());
 | 
			
		||||
            mods.write(2, loc.getBlockY());
 | 
			
		||||
            mods.write(3, loc.getBlockZ());
 | 
			
		||||
@@ -88,7 +83,7 @@ public class Disguise {
 | 
			
		||||
            // 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(0, disguisedEntity.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));
 | 
			
		||||
@@ -101,25 +96,25 @@ public class Disguise {
 | 
			
		||||
 | 
			
		||||
            spawnPackets[0] = manager.createPacket(Packets.Server.NAMED_ENTITY_SPAWN);
 | 
			
		||||
            StructureModifier<Object> mods = spawnPackets[0].getModifier();
 | 
			
		||||
            mods.write(0, e.getEntityId());
 | 
			
		||||
            mods.write(0, disguisedEntity.getEntityId());
 | 
			
		||||
            mods.write(1, ((PlayerDisguise) this).getName());
 | 
			
		||||
            mods.write(2, (int) Math.floor(loc.getX() * 32));
 | 
			
		||||
            mods.write(3, (int) Math.floor(loc.getY() * 32));
 | 
			
		||||
            mods.write(4, (int) Math.floor(loc.getZ() * 32));
 | 
			
		||||
            mods.write(5, (byte) (int) (entity.yaw * 256F / 360F));
 | 
			
		||||
            mods.write(6, (byte) (int) (entity.pitch * 256F / 360F));
 | 
			
		||||
            mods.write(5, (byte) (int) (nmsEntity.yaw * 256F / 360F));
 | 
			
		||||
            mods.write(6, (byte) (int) (nmsEntity.pitch * 256F / 360F));
 | 
			
		||||
            ItemStack item = null;
 | 
			
		||||
            if (e instanceof Player && ((Player) e).getItemInHand() != null)
 | 
			
		||||
                item = CraftItemStack.asNMSCopy(((Player) e).getItemInHand());
 | 
			
		||||
            if (disguisedEntity instanceof Player && ((Player) disguisedEntity).getItemInHand() != null)
 | 
			
		||||
                item = CraftItemStack.asNMSCopy(((Player) disguisedEntity).getItemInHand());
 | 
			
		||||
            mods.write(7, (item == null ? 0 : item.id));
 | 
			
		||||
            mods.write(8, entity.getDataWatcher());
 | 
			
		||||
            mods.write(8, nmsEntity.getDataWatcher());
 | 
			
		||||
 | 
			
		||||
        } else if (getType().isMob()) {
 | 
			
		||||
 | 
			
		||||
            Vector vec = e.getVelocity();
 | 
			
		||||
            Vector vec = disguisedEntity.getVelocity();
 | 
			
		||||
            spawnPackets[0] = manager.createPacket(Packets.Server.MOB_SPAWN);
 | 
			
		||||
            StructureModifier<Object> mods = spawnPackets[0].getModifier();
 | 
			
		||||
            mods.write(0, e.getEntityId());
 | 
			
		||||
            mods.write(0, disguisedEntity.getEntityId());
 | 
			
		||||
            mods.write(1, (int) getType().getEntityType().getTypeId());
 | 
			
		||||
            double d1 = 3.9D;
 | 
			
		||||
            double d2 = vec.getX();
 | 
			
		||||
@@ -137,32 +132,20 @@ public class Disguise {
 | 
			
		||||
                d3 = d1;
 | 
			
		||||
            if (d4 > d1)
 | 
			
		||||
                d4 = d1;
 | 
			
		||||
            mods.write(2, entity.at.a(loc.getX()));
 | 
			
		||||
            mods.write(2, nmsEntity.at.a(loc.getX()));
 | 
			
		||||
            mods.write(3, (int) Math.floor(loc.getY() * 32D));
 | 
			
		||||
            mods.write(4, entity.at.a(loc.getZ()));
 | 
			
		||||
            mods.write(4, nmsEntity.at.a(loc.getZ()));
 | 
			
		||||
            mods.write(5, (int) (d2 * 8000.0D));
 | 
			
		||||
            mods.write(6, (int) (d3 * 8000.0D));
 | 
			
		||||
            mods.write(7, (int) (d4 * 8000.0D));
 | 
			
		||||
            byte yawValue = (byte) (int) (entity.yaw * 256.0F / 360.0F);
 | 
			
		||||
            byte yawValue = (byte) (int) (nmsEntity.yaw * 256.0F / 360.0F);
 | 
			
		||||
            if (getType() == DisguiseType.ENDER_DRAGON)
 | 
			
		||||
                yawValue -= 128;
 | 
			
		||||
            mods.write(8, yawValue);
 | 
			
		||||
            mods.write(9, (byte) (int) (entity.pitch * 256.0F / 360.0F));
 | 
			
		||||
            if (entity instanceof EntityLiving)
 | 
			
		||||
                mods.write(10, (byte) (int) (((EntityLiving) entity).aA * 256.0F / 360.0F));
 | 
			
		||||
            DataWatcher newWatcher = new DataWatcher();
 | 
			
		||||
            try {
 | 
			
		||||
                Field map = newWatcher.getClass().getDeclaredField("c");
 | 
			
		||||
                map.setAccessible(true);
 | 
			
		||||
                HashMap c = (HashMap) map.get(newWatcher);
 | 
			
		||||
                List<WatchableObject> list = entity.getDataWatcher().c();
 | 
			
		||||
                int i = 0;
 | 
			
		||||
                for (Object obj : watcher.convert(list))
 | 
			
		||||
                    c.put(i++, obj);
 | 
			
		||||
            } catch (Exception ex) {
 | 
			
		||||
                ex.printStackTrace();
 | 
			
		||||
            }
 | 
			
		||||
            mods.write(11, newWatcher);
 | 
			
		||||
            mods.write(9, (byte) (int) (nmsEntity.pitch * 256.0F / 360.0F));
 | 
			
		||||
            if (nmsEntity instanceof EntityLiving)
 | 
			
		||||
                mods.write(10, (byte) (int) (((EntityLiving) nmsEntity).aA * 256.0F / 360.0F));
 | 
			
		||||
            mods.write(11, nmsEntity.getDataWatcher());
 | 
			
		||||
            // Theres a list sometimes written with this. But no problems have appeared!
 | 
			
		||||
            // Probably just the metadata to be sent. But the next meta packet after fixes that anyways.
 | 
			
		||||
 | 
			
		||||
@@ -182,12 +165,12 @@ public class Disguise {
 | 
			
		||||
                data = (int) Math.abs(loc.getYaw() % 4);
 | 
			
		||||
            spawnPackets[0] = manager.createPacket(Packets.Server.VEHICLE_SPAWN);
 | 
			
		||||
            StructureModifier<Object> mods = spawnPackets[0].getModifier();
 | 
			
		||||
            mods.write(0, e.getEntityId());
 | 
			
		||||
            mods.write(0, disguisedEntity.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));
 | 
			
		||||
            if (data > 0) {
 | 
			
		||||
                Vector vec = e.getVelocity();
 | 
			
		||||
                Vector vec = disguisedEntity.getVelocity();
 | 
			
		||||
                double d1 = vec.getX();
 | 
			
		||||
                double d2 = vec.getY();
 | 
			
		||||
                double d3 = vec.getZ();
 | 
			
		||||
@@ -208,8 +191,8 @@ public class Disguise {
 | 
			
		||||
                mods.write(5, (int) (d2 * 8000.0D));
 | 
			
		||||
                mods.write(6, (int) (d3 * 8000.0D));
 | 
			
		||||
            }
 | 
			
		||||
            mods.write(7, (int) MathHelper.floor(entity.pitch * 256.0F / 360.0F));
 | 
			
		||||
            mods.write(8, (int) MathHelper.floor(entity.yaw * 256.0F / 360.0F) - 64);
 | 
			
		||||
            mods.write(7, (int) MathHelper.floor(nmsEntity.pitch * 256.0F / 360.0F));
 | 
			
		||||
            mods.write(8, (int) MathHelper.floor(nmsEntity.yaw * 256.0F / 360.0F) - 64);
 | 
			
		||||
            mods.write(9, id);
 | 
			
		||||
            mods.write(10, data);
 | 
			
		||||
 | 
			
		||||
@@ -218,7 +201,7 @@ public class Disguise {
 | 
			
		||||
            // Make a packet to turn his head!
 | 
			
		||||
            spawnPackets[1] = manager.createPacket(Packets.Server.ENTITY_HEAD_ROTATION);
 | 
			
		||||
            StructureModifier<Object> mods = spawnPackets[1].getModifier();
 | 
			
		||||
            mods.write(0, e.getEntityId());
 | 
			
		||||
            mods.write(0, disguisedEntity.getEntityId());
 | 
			
		||||
            mods.write(1, (byte) (int) Math.floor(loc.getYaw() * 256.0F / 360.0F));
 | 
			
		||||
        }
 | 
			
		||||
        return spawnPackets;
 | 
			
		||||
@@ -228,32 +211,11 @@ public class Disguise {
 | 
			
		||||
        if (this.entity != null)
 | 
			
		||||
            throw new RuntimeException("This disguise is already in use! Try .clone()");
 | 
			
		||||
        this.entity = entity;
 | 
			
		||||
        FlagWatcher tempWatcher;
 | 
			
		||||
        FlagWatcher tempWatcher = null;
 | 
			
		||||
        try {
 | 
			
		||||
            String name;
 | 
			
		||||
            if (getType() == DisguiseType.MINECART_FURNACE || getType() == DisguiseType.MINECART_HOPPER
 | 
			
		||||
                    || getType() == DisguiseType.MINECART_MOB_SPAWNER || getType() == DisguiseType.MINECART_TNT
 | 
			
		||||
                    || getType() == DisguiseType.MINECART_CHEST) {
 | 
			
		||||
                name = "Minecart";
 | 
			
		||||
            } else if (getType() == DisguiseType.DONKEY || getType() == DisguiseType.MULE
 | 
			
		||||
                    || getType() == DisguiseType.UNDEAD_HORSE || getType() == DisguiseType.SKELETON_HORSE) {
 | 
			
		||||
                name = "Horse";
 | 
			
		||||
            } else if (getType() == DisguiseType.ZOMBIE_VILLAGER) {
 | 
			
		||||
                name = "Zombie";
 | 
			
		||||
            } else if (getType() == DisguiseType.WITHER_SKELETON) {
 | 
			
		||||
                name = "Skeleton";
 | 
			
		||||
            } else {
 | 
			
		||||
                name = toReadable(getType().name());
 | 
			
		||||
            }
 | 
			
		||||
            Class watcherClass = Class.forName("me.libraryaddict.disguise.DisguiseTypes.Watchers." + name + "Watcher");
 | 
			
		||||
            Constructor<?> contructor = watcherClass.getDeclaredConstructor(Disguise.class);
 | 
			
		||||
            tempWatcher = (FlagWatcher) contructor.newInstance(this);
 | 
			
		||||
            tempWatcher = (FlagWatcher) getType().getWatcherClass().getConstructor(Disguise.class).newInstance(this);
 | 
			
		||||
        } catch (Exception ex) {
 | 
			
		||||
            // There is no watcher for this entity, or a error was thrown.
 | 
			
		||||
            if (entity.getType().isAlive())
 | 
			
		||||
                tempWatcher = new LivingWatcher(this);
 | 
			
		||||
            else
 | 
			
		||||
                tempWatcher = new FlagWatcher(this);
 | 
			
		||||
            ex.printStackTrace();
 | 
			
		||||
        }
 | 
			
		||||
        if (this instanceof MobDisguise && !((MobDisguise) this).isAdult()) {
 | 
			
		||||
            if (tempWatcher instanceof AgeableWatcher)
 | 
			
		||||
@@ -523,12 +485,4 @@ public class Disguise {
 | 
			
		||||
    public void setWatcher(FlagWatcher newWatcher) {
 | 
			
		||||
        watcher = newWatcher;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private String toReadable(String string) {
 | 
			
		||||
        String[] strings = string.split("_");
 | 
			
		||||
        string = "";
 | 
			
		||||
        for (String s : strings)
 | 
			
		||||
            string += s.substring(0, 1) + s.substring(1).toLowerCase();
 | 
			
		||||
        return string;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user