Read description
Updated libs disguise to use custom datawatchers. This ensures that I can now set custom flags on disguises. Also fixes it looking bugged
This commit is contained in:
		@@ -3,8 +3,6 @@ package me.libraryaddict.disguise;
 | 
			
		||||
import java.util.concurrent.ConcurrentHashMap;
 | 
			
		||||
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.Disguise;
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.MobDisguise;
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.PlayerDisguise;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.*;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
@@ -42,26 +40,7 @@ public class DisguiseAPI {
 | 
			
		||||
    public static void disguiseToPlayer(Player disguiser, Player observer, Disguise disguise) {
 | 
			
		||||
        disguises.put(disguiser.getName(), disguise);
 | 
			
		||||
        Packet29DestroyEntity destroyPacket = new Packet29DestroyEntity(new int[] { disguiser.getEntityId() });
 | 
			
		||||
        Packet spawnPacket = null;
 | 
			
		||||
        if (disguise.getType().isMob()) {
 | 
			
		||||
 | 
			
		||||
            EntityLiving entityLiving = ((MobDisguise) disguise).getEntityLiving(((CraftPlayer) disguiser).getHandle().world,
 | 
			
		||||
                    disguiser.getLocation(), disguiser.getEntityId());
 | 
			
		||||
            spawnPacket = new Packet24MobSpawn(entityLiving);
 | 
			
		||||
 | 
			
		||||
        } else if (disguise.getType().isMisc()) {
 | 
			
		||||
 | 
			
		||||
            Entity entity = disguise.getEntity(((CraftPlayer) disguiser).getHandle().world, disguiser.getLocation(),
 | 
			
		||||
                    disguiser.getEntityId());
 | 
			
		||||
            spawnPacket = new Packet23VehicleSpawn(entity, 0);
 | 
			
		||||
 | 
			
		||||
        } else if (disguise.getType().isPlayer()) {
 | 
			
		||||
 | 
			
		||||
            EntityHuman entityHuman = ((CraftPlayer) disguiser).getHandle();
 | 
			
		||||
            spawnPacket = new Packet20NamedEntitySpawn(entityHuman);
 | 
			
		||||
            ((Packet20NamedEntitySpawn) spawnPacket).b = ((PlayerDisguise) disguise).getName();
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        Packet spawnPacket = disguise.constructPacket(disguiser);
 | 
			
		||||
        ((CraftPlayer) observer).getHandle().playerConnection.sendPacket(destroyPacket);
 | 
			
		||||
        ((CraftPlayer) observer).getHandle().playerConnection.sendPacket(spawnPacket);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								src/me/libraryaddict/disguise/DisguiseTypes/AnimalColor.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/me/libraryaddict/disguise/DisguiseTypes/AnimalColor.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
package me.libraryaddict.disguise.DisguiseTypes;
 | 
			
		||||
 | 
			
		||||
public enum AnimalColor {
 | 
			
		||||
    BLACK(15), BLUE(11), BROWN(
 | 
			
		||||
            12), CYAN(9), GRAY(7), GREEN(13), LIGHT_BLUE(3), LIME(5), MAGENTA(2), ORANGE(1), PINK(6), PURPLE(10), RED(14), SILVER(8), WHITE(0), YELLOW(4);
 | 
			
		||||
 | 
			
		||||
    private int value;
 | 
			
		||||
 | 
			
		||||
    private AnimalColor(int newValue) {
 | 
			
		||||
        value = newValue;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getId() {
 | 
			
		||||
        return value;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,20 +1,58 @@
 | 
			
		||||
package me.libraryaddict.disguise.DisguiseTypes;
 | 
			
		||||
 | 
			
		||||
import java.lang.reflect.Constructor;
 | 
			
		||||
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.Watchers.AgeableWatcher;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.Entity;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.EntityCreeper;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.EntityAgeable;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.EntityHuman;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.EntityLiving;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.EntitySkeleton;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.Packet;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.Packet20NamedEntitySpawn;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.Packet23VehicleSpawn;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.Packet24MobSpawn;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.World;
 | 
			
		||||
import org.bukkit.Location;
 | 
			
		||||
import org.bukkit.craftbukkit.v1_5_R3.entity.CraftPlayer;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
 | 
			
		||||
public class Disguise {
 | 
			
		||||
    protected DisguiseType disguiseType;
 | 
			
		||||
    private Entity entity;
 | 
			
		||||
    private LibsBaseWatcher watcher;
 | 
			
		||||
 | 
			
		||||
    protected Disguise(DisguiseType newType) {
 | 
			
		||||
        disguiseType = newType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Packet constructPacket(Player p) {
 | 
			
		||||
        Packet spawnPacket = null;
 | 
			
		||||
        if (getType().isMob()) {
 | 
			
		||||
 | 
			
		||||
            EntityLiving entityLiving = ((MobDisguise) this).getEntityLiving(((CraftPlayer) p).getHandle().world,
 | 
			
		||||
                    p.getLocation(), p.getEntityId());
 | 
			
		||||
            spawnPacket = new Packet24MobSpawn(entityLiving);
 | 
			
		||||
 | 
			
		||||
        } else if (getType().isMisc()) {
 | 
			
		||||
 | 
			
		||||
            Entity entity = getEntity(((CraftPlayer) p).getHandle().world, p.getLocation(), p.getEntityId());
 | 
			
		||||
            spawnPacket = new Packet23VehicleSpawn(entity, 0);
 | 
			
		||||
 | 
			
		||||
        } else if (getType().isPlayer()) {
 | 
			
		||||
 | 
			
		||||
            EntityHuman entityHuman = ((CraftPlayer) p).getHandle();
 | 
			
		||||
            spawnPacket = new Packet20NamedEntitySpawn(entityHuman);
 | 
			
		||||
            ((Packet20NamedEntitySpawn) spawnPacket).b = ((PlayerDisguise) this).getName();
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        return spawnPacket;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Entity getEntity() {
 | 
			
		||||
        return entity;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Entity getEntity(World world, Location loc, int entityId) {
 | 
			
		||||
        Entity entity = null;
 | 
			
		||||
        try {
 | 
			
		||||
@@ -22,9 +60,6 @@ public class Disguise {
 | 
			
		||||
            if (disguiseType == DisguiseType.WITHER_SKELETON) {
 | 
			
		||||
                name = "Skeleton";
 | 
			
		||||
            }
 | 
			
		||||
            if (disguiseType == DisguiseType.CHARGED_CREEPER) {
 | 
			
		||||
                name = "Creeper";
 | 
			
		||||
            }
 | 
			
		||||
            if (disguiseType == DisguiseType.TNT_PRIMED) {
 | 
			
		||||
                name = "TNTPrimed";
 | 
			
		||||
            }
 | 
			
		||||
@@ -34,15 +69,31 @@ public class Disguise {
 | 
			
		||||
            if (disguiseType == DisguiseType.WITHER_SKELETON) {
 | 
			
		||||
                ((EntitySkeleton) entity).setSkeletonType(1);
 | 
			
		||||
            }
 | 
			
		||||
            if (disguiseType == DisguiseType.CHARGED_CREEPER) {
 | 
			
		||||
                ((EntityCreeper) entity).setPowered(true);
 | 
			
		||||
            }
 | 
			
		||||
        } catch (Exception ex) {
 | 
			
		||||
            ex.printStackTrace();
 | 
			
		||||
        }
 | 
			
		||||
        entity.setLocation(loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
 | 
			
		||||
        entity.id = entityId;
 | 
			
		||||
        this.entity = entity;
 | 
			
		||||
        try {
 | 
			
		||||
            String name;
 | 
			
		||||
            if (getType().isPlayer()) {
 | 
			
		||||
                name = "Player";
 | 
			
		||||
            } else {
 | 
			
		||||
                name = toReadable(getType().name());
 | 
			
		||||
            }
 | 
			
		||||
            Class watcherClass = Class.forName("me.libraryaddict.disguise.DisguiseTypes.Watchers." + name + "Watcher");
 | 
			
		||||
            Constructor<?> contructor = watcherClass.getDeclaredConstructor(int.class);
 | 
			
		||||
            watcher = (LibsBaseWatcher) contructor.newInstance(entityId);
 | 
			
		||||
        } catch (Exception ex) {
 | 
			
		||||
            // There is no watcher for this entity
 | 
			
		||||
        }
 | 
			
		||||
        if (watcher == null && entity instanceof EntityAgeable && this instanceof MobDisguise) {
 | 
			
		||||
            watcher = new AgeableWatcher(entityId);
 | 
			
		||||
        }
 | 
			
		||||
        if (watcher instanceof AgeableWatcher && this instanceof MobDisguise) {
 | 
			
		||||
            ((AgeableWatcher) watcher).setValue(12, ((MobDisguise) this).isAdult() ? 0 : -23999);
 | 
			
		||||
        }
 | 
			
		||||
        return entity;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -50,8 +101,12 @@ public class Disguise {
 | 
			
		||||
        return disguiseType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Entity getEntity() {
 | 
			
		||||
        return entity;
 | 
			
		||||
    public LibsBaseWatcher getWatcher() {
 | 
			
		||||
        return watcher;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean hasWatcher() {
 | 
			
		||||
        return watcher != null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private String toReadable(String string) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +1,13 @@
 | 
			
		||||
package me.libraryaddict.disguise.DisguiseTypes;
 | 
			
		||||
 | 
			
		||||
public enum DisguiseType {
 | 
			
		||||
    BAT(EntityType.MOB), BLAZE(EntityType.MOB), CAVE_SPIDER(EntityType.MOB), CHARGED_CREEPER(EntityType.MOB), CHICKEN(
 | 
			
		||||
            EntityType.MOB), COW(EntityType.MOB), CREEPER(EntityType.MOB), ENDER_CRYSTAL(EntityType.MISC), ENDER_DRAGON(
 | 
			
		||||
            EntityType.MOB), ENDERMAN(EntityType.MOB), GHAST(EntityType.MOB), GIANT_ZOMBIE(EntityType.MOB), IRON_GOLEM(EntityType.MOB), MAGMA_CUBE(
 | 
			
		||||
            EntityType.MOB), MUSHROOM_COW(EntityType.MOB), OCELOT(EntityType.MOB), PIG(EntityType.MOB), PIG_ZOMBIE(EntityType.MOB), PLAYER(
 | 
			
		||||
            EntityType.PLAYER), TNT_PRIMED(EntityType.MISC), SHEEP(EntityType.MOB), SILVERFISH(EntityType.MOB), SKELETON(
 | 
			
		||||
            EntityType.MOB), SLIME(EntityType.MOB), SNOWMAN(EntityType.MOB), SPIDER(EntityType.MOB), SQUID(EntityType.MOB), VILLAGER(
 | 
			
		||||
            EntityType.MOB), WITCH(EntityType.MOB), WITHER(EntityType.MOB), WITHER_SKELETON(EntityType.MOB), WOLF(EntityType.MOB), ZOMBIE(
 | 
			
		||||
            EntityType.MOB);
 | 
			
		||||
    BAT(EntityType.MOB), BLAZE(EntityType.MOB), CAVE_SPIDER(EntityType.MOB), CHICKEN(EntityType.MOB), COW(EntityType.MOB), CREEPER(
 | 
			
		||||
            EntityType.MOB), ENDER_CRYSTAL(EntityType.MISC), ENDER_DRAGON(EntityType.MOB), ENDERMAN(EntityType.MOB), GHAST(
 | 
			
		||||
            EntityType.MOB), GIANT_ZOMBIE(EntityType.MOB), IRON_GOLEM(EntityType.MOB), MAGMA_CUBE(EntityType.MOB), MUSHROOM_COW(
 | 
			
		||||
            EntityType.MOB), OCELOT(EntityType.MOB), PIG(EntityType.MOB), PIG_ZOMBIE(EntityType.MOB), PLAYER(EntityType.PLAYER), SHEEP(EntityType.MOB), SILVERFISH(EntityType.MOB), SKELETON(EntityType.MOB), SLIME(EntityType.MOB), SNOWMAN(
 | 
			
		||||
            EntityType.MOB), SPIDER(EntityType.MOB), SQUID(EntityType.MOB), TNT_PRIMED(
 | 
			
		||||
            EntityType.MISC), VILLAGER(EntityType.MOB), WITCH(EntityType.MOB), WITHER(
 | 
			
		||||
            EntityType.MOB), WITHER_SKELETON(EntityType.MOB), WOLF(EntityType.MOB), ZOMBIE(EntityType.MOB);
 | 
			
		||||
 | 
			
		||||
    public static enum EntityType {
 | 
			
		||||
        MISC, MOB, PLAYER;
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,91 @@
 | 
			
		||||
package me.libraryaddict.disguise.DisguiseTypes;
 | 
			
		||||
 | 
			
		||||
import java.lang.reflect.Field;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Iterator;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.craftbukkit.v1_5_R3.entity.CraftPlayer;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
 | 
			
		||||
import net.minecraft.server.v1_5_R3.Packet40EntityMetadata;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.WatchableObject;
 | 
			
		||||
 | 
			
		||||
public abstract class LibsBaseWatcher {
 | 
			
		||||
 | 
			
		||||
    private static HashMap<Class, Integer> classTypes = new HashMap<Class, Integer>();
 | 
			
		||||
    static {
 | 
			
		||||
        classTypes.put(Byte.class, 0);
 | 
			
		||||
        classTypes.put(Short.class, 1);
 | 
			
		||||
        classTypes.put(Integer.class, 2);
 | 
			
		||||
        classTypes.put(String.class, 4);
 | 
			
		||||
    }
 | 
			
		||||
    private int entityId;
 | 
			
		||||
    private HashMap<Integer, Object> entityValues = new HashMap<Integer, Object>();
 | 
			
		||||
 | 
			
		||||
    protected LibsBaseWatcher(int entityId) {
 | 
			
		||||
        this.entityId = entityId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<WatchableObject> convert(List<WatchableObject> list) {
 | 
			
		||||
        Iterator<WatchableObject> itel = list.iterator();
 | 
			
		||||
        List<WatchableObject> newList = new ArrayList<WatchableObject>();
 | 
			
		||||
        while (itel.hasNext()) {
 | 
			
		||||
            WatchableObject watch = itel.next();
 | 
			
		||||
            if (entityValues.containsKey(watch.a())) {
 | 
			
		||||
                boolean doD = watch.d();
 | 
			
		||||
                watch = new WatchableObject(watch.c(), watch.a(), watch.b());
 | 
			
		||||
                if (!doD)
 | 
			
		||||
                    watch.a(false);
 | 
			
		||||
                if (entityValues.get(watch.a()) == null) {
 | 
			
		||||
                    continue;
 | 
			
		||||
                } else {
 | 
			
		||||
                    Object value = entityValues.get(watch.a());
 | 
			
		||||
                    if (watch.b().getClass() != value.getClass()) {
 | 
			
		||||
                        watch.a(value);
 | 
			
		||||
                        try {
 | 
			
		||||
                            Field field = WatchableObject.class.getDeclaredField("a");
 | 
			
		||||
                            field.setAccessible(true);
 | 
			
		||||
                            field.set(watch, classTypes.get(value.getClass()));
 | 
			
		||||
                        } catch (Exception ex) {
 | 
			
		||||
                            ex.printStackTrace();
 | 
			
		||||
                        }
 | 
			
		||||
                    } else {
 | 
			
		||||
                        watch.a(entityValues.get(watch.a()));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            newList.add(watch);
 | 
			
		||||
        }
 | 
			
		||||
        return newList;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected Object getValue(int no) {
 | 
			
		||||
        return entityValues.get(no);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void sendData(int data) {
 | 
			
		||||
        Packet40EntityMetadata packet = new Packet40EntityMetadata();
 | 
			
		||||
        try {
 | 
			
		||||
            packet.a = entityId;
 | 
			
		||||
            Field field = Packet40EntityMetadata.class.getDeclaredField("b");
 | 
			
		||||
            field.setAccessible(true);
 | 
			
		||||
            Object value = entityValues.get(data);
 | 
			
		||||
            List<WatchableObject> list = new ArrayList<WatchableObject>();
 | 
			
		||||
            list.add(new WatchableObject(classTypes.get(value.getClass()), data, value));
 | 
			
		||||
            field.set(packet, list);
 | 
			
		||||
        } catch (Exception ex) {
 | 
			
		||||
            ex.printStackTrace();
 | 
			
		||||
        }
 | 
			
		||||
        for (Player p : Bukkit.getOnlinePlayers()) {
 | 
			
		||||
            ((CraftPlayer) p).getHandle().playerConnection.sendPacket(packet);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void setValue(int no, Object value) {
 | 
			
		||||
        entityValues.put(no, value);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -17,7 +17,7 @@ public class MobDisguise extends Disguise {
 | 
			
		||||
        adult = isAdult;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public EntityLiving getEntityLiving(World w, Location loc, int id) {
 | 
			
		||||
    protected EntityLiving getEntityLiving(World w, Location loc, int id) {
 | 
			
		||||
        Entity entity = getEntity(w, loc, id);
 | 
			
		||||
        if (!adult) {
 | 
			
		||||
            if (entity instanceof EntityAgeable)
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,23 @@
 | 
			
		||||
package me.libraryaddict.disguise.DisguiseTypes.Watchers;
 | 
			
		||||
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.LibsBaseWatcher;
 | 
			
		||||
 | 
			
		||||
public class AgeableWatcher extends LibsBaseWatcher {
 | 
			
		||||
 | 
			
		||||
    public AgeableWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(12, 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isAdult() {
 | 
			
		||||
        return (Integer) getValue(12) >= 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setAdult(boolean isAdult) {
 | 
			
		||||
        if (isAdult != isAdult()) {
 | 
			
		||||
            setValue(12, isAdult ? 0 : -23999);
 | 
			
		||||
            sendData(12);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,21 @@
 | 
			
		||||
package me.libraryaddict.disguise.DisguiseTypes.Watchers;
 | 
			
		||||
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.LibsBaseWatcher;
 | 
			
		||||
 | 
			
		||||
public class BlazeWatcher extends LibsBaseWatcher {
 | 
			
		||||
 | 
			
		||||
    public BlazeWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(16, (byte) 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isBlazing() {
 | 
			
		||||
        return (Byte) getValue(16) == 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setBlazing(boolean isBlazing) {
 | 
			
		||||
        setValue(16, (byte) (isBlazing ? 1 : 0));
 | 
			
		||||
        sendData(16);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,31 @@
 | 
			
		||||
package me.libraryaddict.disguise.DisguiseTypes.Watchers;
 | 
			
		||||
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.LibsBaseWatcher;
 | 
			
		||||
 | 
			
		||||
public class CreeperWatcher extends LibsBaseWatcher {
 | 
			
		||||
 | 
			
		||||
    public CreeperWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(16, (byte) -1);
 | 
			
		||||
        setValue(17, 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isFused() {
 | 
			
		||||
        return (Byte) getValue(16) == 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isPowered() {
 | 
			
		||||
        return (Byte) getValue(17) == 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFuse(boolean isFused) {
 | 
			
		||||
        setValue(16, (byte) (isFused ? 1 : -1));
 | 
			
		||||
        sendData(16);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setPowered(boolean powered) {
 | 
			
		||||
        setValue(17, (byte) (powered ? 1 : 0));
 | 
			
		||||
        sendData(17);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,21 @@
 | 
			
		||||
package me.libraryaddict.disguise.DisguiseTypes.Watchers;
 | 
			
		||||
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.LibsBaseWatcher;
 | 
			
		||||
 | 
			
		||||
public class EnderDragonWatcher extends LibsBaseWatcher {
 | 
			
		||||
 | 
			
		||||
    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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,21 @@
 | 
			
		||||
package me.libraryaddict.disguise.DisguiseTypes.Watchers;
 | 
			
		||||
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.LibsBaseWatcher;
 | 
			
		||||
 | 
			
		||||
public class EndermanWatcher extends LibsBaseWatcher {
 | 
			
		||||
 | 
			
		||||
    public EndermanWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(18, (byte) 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isAgressive() {
 | 
			
		||||
        return (Integer) getValue(18) == 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setAgressive(boolean isAgressive) {
 | 
			
		||||
        setValue(18, (byte) (isAgressive ? 1 : 0));
 | 
			
		||||
        sendData(18);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,21 @@
 | 
			
		||||
package me.libraryaddict.disguise.DisguiseTypes.Watchers;
 | 
			
		||||
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.LibsBaseWatcher;
 | 
			
		||||
 | 
			
		||||
public class GhastWatcher extends LibsBaseWatcher {
 | 
			
		||||
 | 
			
		||||
    public GhastWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(16, (byte) 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isAgressive() {
 | 
			
		||||
        return (Byte) getValue(16) == 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setAgressive(boolean isAgressive) {
 | 
			
		||||
        setValue(16, (byte) (isAgressive ? 1 : 0));
 | 
			
		||||
        sendData(16);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,9 @@
 | 
			
		||||
package me.libraryaddict.disguise.DisguiseTypes.Watchers;
 | 
			
		||||
 | 
			
		||||
public class MagmaCubeWatcher extends SlimeWatcher {
 | 
			
		||||
 | 
			
		||||
    public MagmaCubeWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,56 @@
 | 
			
		||||
package me.libraryaddict.disguise.DisguiseTypes.Watchers;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.Ocelot;
 | 
			
		||||
import org.bukkit.entity.Ocelot.Type;
 | 
			
		||||
 | 
			
		||||
public class OcelotWatcher extends AgeableWatcher {
 | 
			
		||||
    private boolean isSitting;
 | 
			
		||||
    private boolean isTamed;
 | 
			
		||||
    private Type type = Ocelot.Type.WILD_OCELOT;
 | 
			
		||||
 | 
			
		||||
    public OcelotWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(16, (byte) 0);
 | 
			
		||||
        setValue(17, "");
 | 
			
		||||
        setValue(18, (byte) 0);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public String getOwner() {
 | 
			
		||||
        return (String) getValue(17);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public Type getType() {
 | 
			
		||||
        return type;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setOwner(String newOwner) {
 | 
			
		||||
        setValue(17, newOwner);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSitting(boolean sitting) {
 | 
			
		||||
        if (isSitting != sitting) {
 | 
			
		||||
            isSitting = sitting;
 | 
			
		||||
            updateStatus();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setTamed(boolean tamed) {
 | 
			
		||||
        if (isTamed != tamed) {
 | 
			
		||||
            isTamed = tamed;
 | 
			
		||||
            updateStatus();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setType(Type newType) {
 | 
			
		||||
        if (type != newType) {
 | 
			
		||||
            type = newType;
 | 
			
		||||
            setValue(18, (byte) type.getId());
 | 
			
		||||
            sendData(18);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void updateStatus() {
 | 
			
		||||
        setValue(16, (byte) ((isSitting ? 1 : 0) + (isTamed ? 4 : 0)));
 | 
			
		||||
        sendData(16);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,18 @@
 | 
			
		||||
package me.libraryaddict.disguise.DisguiseTypes.Watchers;
 | 
			
		||||
 | 
			
		||||
public class PigWatcher extends AgeableWatcher {
 | 
			
		||||
 | 
			
		||||
    public PigWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(16, (byte) 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isSaddled() {
 | 
			
		||||
        return (Byte) getValue(16) == 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSaddled(boolean isSaddled) {
 | 
			
		||||
        setValue(16, (byte) (isSaddled ? 1 : 0));
 | 
			
		||||
        sendData(16);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,30 @@
 | 
			
		||||
package me.libraryaddict.disguise.DisguiseTypes.Watchers;
 | 
			
		||||
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.AnimalColor;
 | 
			
		||||
 | 
			
		||||
public class SheepWatcher extends AgeableWatcher {
 | 
			
		||||
    private AnimalColor color = AnimalColor.WHITE;
 | 
			
		||||
    private boolean isSheared;
 | 
			
		||||
 | 
			
		||||
    public SheepWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(16, (byte) 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isSheared() {
 | 
			
		||||
        return isSheared;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setColor(AnimalColor newColor) {
 | 
			
		||||
        setValue(16, (byte) (newColor.getId() + (isSheared ? 16 : 0)));
 | 
			
		||||
        sendData(16);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSheared(boolean sheared) {
 | 
			
		||||
        if (sheared != isSheared) {
 | 
			
		||||
            isSheared = sheared;
 | 
			
		||||
            setColor(color);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,23 @@
 | 
			
		||||
package me.libraryaddict.disguise.DisguiseTypes.Watchers;
 | 
			
		||||
 | 
			
		||||
import java.util.Random;
 | 
			
		||||
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.LibsBaseWatcher;
 | 
			
		||||
 | 
			
		||||
public class SlimeWatcher extends LibsBaseWatcher {
 | 
			
		||||
 | 
			
		||||
    public SlimeWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(16, (byte) new Random().nextInt(4) + 1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getSize() {
 | 
			
		||||
        return (Integer) getValue(16);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSize(int size) {
 | 
			
		||||
        setValue(16, (byte) size);
 | 
			
		||||
        sendData(16);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,24 @@
 | 
			
		||||
package me.libraryaddict.disguise.DisguiseTypes.Watchers;
 | 
			
		||||
 | 
			
		||||
import java.util.Random;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.Villager.Profession;
 | 
			
		||||
 | 
			
		||||
public class VillagerWatcher extends AgeableWatcher {
 | 
			
		||||
    private Profession profession;
 | 
			
		||||
 | 
			
		||||
    public VillagerWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        profession = Profession.values()[new Random().nextInt(Profession.values().length)];
 | 
			
		||||
        setValue(16, profession.getId());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setProfession(Profession newProfession) {
 | 
			
		||||
        if (profession != newProfession) {
 | 
			
		||||
            profession = newProfession;
 | 
			
		||||
            setValue(16, profession.getId());
 | 
			
		||||
            sendData(16);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,78 @@
 | 
			
		||||
package me.libraryaddict.disguise.DisguiseTypes.Watchers;
 | 
			
		||||
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.AnimalColor;
 | 
			
		||||
 | 
			
		||||
public class WolfWatcher extends AgeableWatcher {
 | 
			
		||||
    private AnimalColor collarColor = AnimalColor.RED;
 | 
			
		||||
    private boolean isAgressive;
 | 
			
		||||
    private boolean isSitting;
 | 
			
		||||
    private boolean isTamed;
 | 
			
		||||
 | 
			
		||||
    public WolfWatcher(int entityId) {
 | 
			
		||||
        super(entityId);
 | 
			
		||||
        setValue(16, (byte) 7);
 | 
			
		||||
        setValue(17, "");
 | 
			
		||||
        setValue(18, 8);
 | 
			
		||||
        setValue(19, (byte) 0);
 | 
			
		||||
        setValue(20, (byte) collarColor.getId());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public AnimalColor getCollarColor() {
 | 
			
		||||
        return collarColor;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getHealth() {
 | 
			
		||||
        return (Integer) getValue(18);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getName() {
 | 
			
		||||
        return (String) getValue(17);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isAgressive() {
 | 
			
		||||
        return isAgressive;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isSitting() {
 | 
			
		||||
        return isSitting;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isTamed() {
 | 
			
		||||
        return isTamed;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setAgressive(boolean aggressive) {
 | 
			
		||||
        if (isAgressive != aggressive) {
 | 
			
		||||
            isAgressive = aggressive;
 | 
			
		||||
            updateStatus();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCollarColor(AnimalColor newColor) {
 | 
			
		||||
        if (newColor != collarColor) {
 | 
			
		||||
            collarColor = newColor;
 | 
			
		||||
            setValue(20, (byte) newColor.getId());
 | 
			
		||||
            sendData(20);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSitting(boolean sitting) {
 | 
			
		||||
        if (isSitting != sitting) {
 | 
			
		||||
            isSitting = sitting;
 | 
			
		||||
            updateStatus();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setTamed(boolean tamed) {
 | 
			
		||||
        if (isTamed != tamed) {
 | 
			
		||||
            isTamed = tamed;
 | 
			
		||||
            updateStatus();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void updateStatus() {
 | 
			
		||||
        setValue(16, (byte) ((isTamed ? 4 : 0) + (isSitting ? 1 : 0) + (isAgressive ? 2 : 0)));
 | 
			
		||||
        sendData(16);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -1,17 +1,13 @@
 | 
			
		||||
package me.libraryaddict.disguise;
 | 
			
		||||
 | 
			
		||||
import java.lang.reflect.Method;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.Disguise;
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.MiscDisguise;
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.MobDisguise;
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseTypes.PlayerDisguise;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.DataWatcher;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.Entity;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.EntityLiving;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.EntityPlayer;
 | 
			
		||||
import org.bukkit.craftbukkit.v1_5_R3.entity.CraftPlayer;
 | 
			
		||||
import net.minecraft.server.v1_5_R3.WatchableObject;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.plugin.java.JavaPlugin;
 | 
			
		||||
 | 
			
		||||
@@ -54,7 +50,8 @@ public class LibsDisguises extends JavaPlugin {
 | 
			
		||||
                                            }
 | 
			
		||||
                                        }
 | 
			
		||||
                                    } else if (!disguise.getType().isPlayer()) {
 | 
			
		||||
                                        mods.write(1, modifyDataWatcher(disguise, watched));
 | 
			
		||||
                                        if (disguise.hasWatcher())
 | 
			
		||||
                                            mods.write(1, disguise.getWatcher().convert((List<WatchableObject>) mods.read(1)));
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
@@ -63,39 +60,5 @@ public class LibsDisguises extends JavaPlugin {
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private List modifyDataWatcher(Disguise disguise, Player p) {
 | 
			
		||||
        Entity e = disguise.getEntity();
 | 
			
		||||
        EntityPlayer hE = ((CraftPlayer) p).getHandle();
 | 
			
		||||
        e.setAirTicks(hE.getAirTicks());
 | 
			
		||||
        e.fireTicks = p.getFireTicks();
 | 
			
		||||
        a(e.getDataWatcher(), 0, e.fireTicks > 0);
 | 
			
		||||
        e.setSprinting(p.isSprinting());
 | 
			
		||||
        e.setSneaking(p.isSneaking());
 | 
			
		||||
        if (e instanceof EntityLiving) {
 | 
			
		||||
            EntityLiving lE = (EntityLiving) e;
 | 
			
		||||
            lE.setInvisible(hE.isInvisible());
 | 
			
		||||
            lE.effects = hE.effects;
 | 
			
		||||
            lE.updateEffects = true;
 | 
			
		||||
            try {
 | 
			
		||||
                Method method = EntityLiving.class.getDeclaredMethod("bA");
 | 
			
		||||
                method.setAccessible(true);
 | 
			
		||||
                method.invoke(lE);
 | 
			
		||||
            } catch (Exception e1) {
 | 
			
		||||
                e1.printStackTrace();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return e.getDataWatcher().b();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void a(DataWatcher datawatcher, int i, boolean flag) {
 | 
			
		||||
        byte b0 = datawatcher.getByte(0);
 | 
			
		||||
        if (flag) {
 | 
			
		||||
            datawatcher.watch(0, Byte.valueOf((byte) (b0 | 1 << i)));
 | 
			
		||||
        } else {
 | 
			
		||||
            datawatcher.watch(0, Byte.valueOf((byte) (b0 & ~(1 << i))));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user