diff --git a/src/me/libraryaddict/disguise/DisguiseAPI.java b/src/me/libraryaddict/disguise/DisguiseAPI.java index 30573b57..ef5ef8b2 100644 --- a/src/me/libraryaddict/disguise/DisguiseAPI.java +++ b/src/me/libraryaddict/disguise/DisguiseAPI.java @@ -1,6 +1,5 @@ package me.libraryaddict.disguise; -import java.util.Iterator; import java.util.concurrent.ConcurrentHashMap; import me.libraryaddict.disguise.DisguiseTypes.Disguise; @@ -16,7 +15,9 @@ import org.bukkit.Location; import org.bukkit.Sound; import org.bukkit.craftbukkit.v1_5_R3.CraftSound; import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_5_R3.entity.CraftLivingEntity; import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; @@ -44,6 +45,7 @@ public class DisguiseAPI { */ public static void disguiseToAll(Entity entity, Disguise disguise) { disguises.put(entity instanceof Player ? ((Player) entity).getName() : entity.getUniqueId(), disguise); + disguise.constructWatcher(entity.getType(), entity.getEntityId()); refresh(entity); } @@ -94,7 +96,22 @@ public class DisguiseAPI { if (loc.equals(soundLoc)) { DisguiseSound disSound = DisguiseSound.getType(entity.getType().name()); if (disSound != null) { - soundType = disSound.ownsSound(soundName); + if (((CraftEntity) entity).getHandle().dead) { + soundType = SoundType.DEATH; + System.out.print(soundType); + } else { + boolean hasInvun = false; + if (entity instanceof LivingEntity) { + net.minecraft.server.v1_5_R3.EntityLiving e = ((CraftLivingEntity) entity) + .getHandle(); + hasInvun = e.noDamageTicks == e.maxNoDamageTicks; + } else { + net.minecraft.server.v1_5_R3.Entity e = ((CraftEntity) entity).getHandle(); + hasInvun = e.isInvulnerable(); + } + soundType = disSound.getType(soundName, !hasInvun); + System.out.print(soundType + " " + hasInvun); + } if (soundType != null) { disguisedEntity = entity; break; @@ -107,22 +124,24 @@ public class DisguiseAPI { } } if (disguisedEntity != null) { - // TODO Check if they been damage with invincibility ticks - Sound sound = null; - DisguiseSound dSound = DisguiseSound.getType(DisguiseAPI.getDisguise(disguisedEntity).getType().name()); - if (dSound != null) - sound = dSound.getSound(soundType); - if (sound == null) { - event.setCancelled(true); - } else { - if (sound == Sound.STEP_GRASS) { - World world = ((CraftEntity) disguisedEntity).getHandle().world; - Block b = Block.byId[world.getTypeId(soundLoc.getBlockX(), soundLoc.getBlockY() - 1, - soundLoc.getBlockZ())]; - if (b != null) - mods.write(0, b.stepSound.getStepSound()); + Disguise disguise = DisguiseAPI.getDisguise(disguisedEntity); + if (disguise.replaceSounds()) { + Sound sound = null; + DisguiseSound dSound = DisguiseSound.getType(disguise.getType().name()); + if (dSound != null) + sound = dSound.getSound(soundType); + if (sound == null) { + event.setCancelled(true); } else { - mods.write(0, CraftSound.getSound(sound)); + if (sound == Sound.STEP_GRASS) { + World world = ((CraftEntity) disguisedEntity).getHandle().world; + Block b = Block.byId[world.getTypeId(soundLoc.getBlockX(), soundLoc.getBlockY() - 1, + soundLoc.getBlockZ())]; + if (b != null) + mods.write(0, b.stepSound.getStepSound()); + } else { + mods.write(0, CraftSound.getSound(sound)); + } } } } @@ -151,7 +170,7 @@ public class DisguiseAPI { EntityTrackerEntry entry = (EntityTrackerEntry) ((WorldServer) ((CraftEntity) entity).getHandle().world).tracker.trackedEntities .get(entity.getEntityId()); if (entry != null) { - EntityPlayer[] players = (EntityPlayer[]) entry.trackedPlayers.toArray(); + EntityPlayer[] players = (EntityPlayer[]) entry.trackedPlayers.toArray(new EntityPlayer[entry.trackedPlayers.size()]); for (EntityPlayer player : players) { if (entity instanceof Player && !player.getBukkitEntity().canSee((Player) entity)) continue; diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/Disguise.java b/src/me/libraryaddict/disguise/DisguiseTypes/Disguise.java index 164c63b9..1e59d84d 100644 --- a/src/me/libraryaddict/disguise/DisguiseTypes/Disguise.java +++ b/src/me/libraryaddict/disguise/DisguiseTypes/Disguise.java @@ -1,24 +1,21 @@ package me.libraryaddict.disguise.DisguiseTypes; import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.util.Map; import java.util.Random; import me.libraryaddict.disguise.DisguiseTypes.Watchers.AgeableWatcher; import net.minecraft.server.v1_5_R3.Entity; -import net.minecraft.server.v1_5_R3.EntityAgeable; import net.minecraft.server.v1_5_R3.EntityLiving; -import net.minecraft.server.v1_5_R3.EntityPlayer; -import net.minecraft.server.v1_5_R3.EntitySkeleton; import net.minecraft.server.v1_5_R3.EntityTypes; import net.minecraft.server.v1_5_R3.ItemStack; import net.minecraft.server.v1_5_R3.MathHelper; -import net.minecraft.server.v1_5_R3.MinecraftServer; -import net.minecraft.server.v1_5_R3.PlayerInteractManager; import net.minecraft.server.v1_5_R3.EnumArt; -import net.minecraft.server.v1_5_R3.World; import org.bukkit.Location; import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; import org.bukkit.craftbukkit.v1_5_R3.inventory.CraftItemStack; +import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.util.Vector; @@ -30,18 +27,12 @@ import com.comphenix.protocol.reflect.StructureModifier; public class Disguise { protected DisguiseType disguiseType; - private Entity entity = null; + private boolean replaceSounds; private FlagWatcher watcher; - protected Disguise(DisguiseType newType) { + protected Disguise(DisguiseType newType, boolean doSounds) { disguiseType = newType; - } - - public PacketContainer constructDestroyPacket(int entityId) { - PacketContainer destroyPacket = ProtocolLibrary.getProtocolManager().createPacket(Packets.Server.DESTROY_ENTITY); - StructureModifier mods = destroyPacket.getModifier(); - mods.write(0, new int[] { entityId }); - return destroyPacket; + replaceSounds = doSounds; } public PacketContainer constructPacket(org.bukkit.entity.Entity e) { @@ -76,7 +67,8 @@ public class Disguise { } else if (getType().isMob()) { - entity = ((MobDisguise) this).getEntityLiving(((CraftEntity) e).getHandle().world, e.getLocation(), e.getEntityId()); + // entity = ((MobDisguise) this).getEntityLiving(((CraftEntity) e).getHandle().world, e.getLocation(), + // e.getEntityId()); double d1 = 3.9D; Vector vec = e.getVelocity(); double d2 = vec.getX(); @@ -98,6 +90,31 @@ public class Disguise { StructureModifier mods = spawnPacket.getModifier(); mods.write(0, e.getEntityId()); mods.write(1, (byte) EntityTypes.a(entity)); + String name = toReadable(disguiseType.name()); + if (disguiseType == DisguiseType.WITHER_SKELETON) { + name = "Skeleton"; + } else if (disguiseType == DisguiseType.PRIMED_TNT) { + name = "TNTPrimed"; + } else if (disguiseType == DisguiseType.MINECART_TNT) { + name = "MinecartTNT"; + } else if (disguiseType == DisguiseType.SPLASH_POTION) + name = "Potion"; + else if (disguiseType == DisguiseType.GIANT) + name = "Giant Zombie"; + else if (disguiseType == DisguiseType.DROPPED_ITEM) + name = "Item"; + else if (disguiseType == DisguiseType.FIREBALL) + name = "Large Fireball"; + try { + Class entityClass = Class.forName("net.minecraft.server.v1_5_R3.Entity" + name); + Field field = EntityTypes.class.getDeclaredField("e"); + field.setAccessible(true); + Map map = (Map) field.get(null); + mods.write(1, map.containsKey(entityClass) ? ((Integer) map.get(entityClass)).intValue() : 0); + } catch (Exception e1) { + e1.printStackTrace(); + } + mods.write(2, entity.at.a(loc.getX())); mods.write(3, (int) Math.floor(loc.getY() * 32D)); mods.write(4, entity.at.a(loc.getZ())); @@ -115,7 +132,7 @@ public class Disguise { } else if (getType().isMisc()) { - getEntity(((CraftEntity) e).getHandle().world, e.getLocation(), e.getEntityId()); + // getEntity(((CraftEntity) e).getHandle().world, e.getLocation(), e.getEntityId()); int id = getType().getEntityId(); int data = 0; if (((MiscDisguise) this).getId() >= 0) @@ -159,9 +176,9 @@ public class Disguise { } else if (getType().isPlayer()) { - EntityPlayer entityPlayer = (EntityPlayer) getEntity(((CraftEntity) e).getHandle().world, e.getLocation(), - e.getEntityId()); - entityPlayer.name = ((PlayerDisguise) this).getName(); + // EntityPlayer entityPlayer = (EntityPlayer) getEntity(((CraftEntity) e).getHandle().world, e.getLocation(), + // e.getEntityId()); + // entityPlayer.name = ((PlayerDisguise) this).getName(); spawnPacket = manager.createPacket(Packets.Server.NAMED_ENTITY_SPAWN); StructureModifier mods = spawnPacket.getModifier(); mods.write(0, e.getEntityId()); @@ -182,37 +199,7 @@ public class Disguise { return spawnPacket; } - public Entity getEntity(World world, Location loc, int entityId) { - if (entity != null) { - entity.setLocation(loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch()); - entity.id = entityId; - return entity; - } - try { - if (disguiseType == DisguiseType.PLAYER) { - entity = new EntityPlayer(MinecraftServer.getServer(), world, ((PlayerDisguise) this).getName(), - new PlayerInteractManager(world)); - } else { - String name = toReadable(disguiseType.name()); - if (disguiseType == DisguiseType.WITHER_SKELETON) { - name = "Skeleton"; - } else if (disguiseType == DisguiseType.PRIMED_TNT) { - name = "TNTPrimed"; - } else if (disguiseType == DisguiseType.MINECART_TNT) { - name = "MinecartTNT"; - } - Class entityClass = Class.forName("net.minecraft.server.v1_5_R3.Entity" + name); - Constructor contructor = entityClass.getDeclaredConstructor(World.class); - entity = (Entity) contructor.newInstance(world); - if (disguiseType == DisguiseType.WITHER_SKELETON) { - ((EntitySkeleton) entity).setSkeletonType(1); - } - } - } catch (Exception ex) { - ex.printStackTrace(); - } - entity.setLocation(loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch()); - entity.id = entityId; + public void constructWatcher(EntityType type, int entityId) { try { String name; if (getType().isPlayer()) { @@ -223,16 +210,18 @@ public class Disguise { Class watcherClass = Class.forName("me.libraryaddict.disguise.DisguiseTypes.Watchers." + name + "Watcher"); Constructor contructor = watcherClass.getDeclaredConstructor(int.class); watcher = (FlagWatcher) contructor.newInstance(entityId); + if (watcher instanceof AgeableWatcher && this instanceof MobDisguise) { + ((AgeableWatcher) watcher).setValue(12, ((MobDisguise) this).isAdult() ? 0 : -23999); + } + WatcherValues entity = WatcherValues.valueOf(type.name()); + WatcherValues disguise = WatcherValues.valueOf(getType().name()); + for (int i : entity.getValues()) { + if (disguise.getValue(i) != null && disguise.getValue(i).getClass() != entity.getValue(i).getClass()) + watcher.setValue(i, disguise.getValue(i)); + } } 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; } public DisguiseType getType() { @@ -247,6 +236,14 @@ public class Disguise { return watcher != null; } + public boolean replaceSounds() { + return replaceSounds; + } + + public void setReplaceSounds(boolean areSoundsReplaced) { + replaceSounds = areSoundsReplaced; + } + private String toReadable(String string) { String[] strings = string.split("_"); string = ""; diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/DisguiseSound.java b/src/me/libraryaddict/disguise/DisguiseTypes/DisguiseSound.java index ec063ab8..97c5637d 100644 --- a/src/me/libraryaddict/disguise/DisguiseTypes/DisguiseSound.java +++ b/src/me/libraryaddict/disguise/DisguiseTypes/DisguiseSound.java @@ -12,7 +12,7 @@ public enum DisguiseSound { BLAZE(Sound.BLAZE_HIT, null, Sound.BLAZE_DEATH, Sound.BLAZE_BREATH), - CAVE_SPIDER(Sound.SPIDER_IDLE, Sound.SPIDER_WALK, Sound.SPIDER_DEATH, Sound.PIG_IDLE), + CAVE_SPIDER(Sound.SPIDER_IDLE, Sound.SPIDER_WALK, Sound.SPIDER_DEATH, Sound.SPIDER_IDLE), CHICKEN(Sound.CHICKEN_HURT, Sound.CHICKEN_WALK, Sound.CHICKEN_HURT, Sound.CHICKEN_IDLE, Sound.CHICKEN_EGG_POP), @@ -28,7 +28,7 @@ public enum DisguiseSound { GHAST(Sound.GHAST_SCREAM, null, Sound.GHAST_DEATH, Sound.GHAST_MOAN, Sound.GHAST_CHARGE, Sound.GHAST_FIREBALL, Sound.GHAST_SCREAM2), - GIANT_ZOMBIE(Sound.HURT_FLESH, Sound.STEP_GRASS, null, null), + GIANT(Sound.HURT_FLESH, Sound.STEP_GRASS, null, null), IRON_GOLEM(Sound.IRONGOLEM_HIT, Sound.IRONGOLEM_WALK, Sound.IRONGOLEM_DEATH, Sound.IRONGOLEM_THROW), @@ -52,7 +52,7 @@ public enum DisguiseSound { SLIME(Sound.SLIME_ATTACK, Sound.SLIME_WALK2, null, null, Sound.SLIME_WALK), - SPIDER(Sound.SPIDER_IDLE, Sound.SPIDER_WALK, Sound.SPIDER_DEATH, Sound.PIG_IDLE), + SPIDER(Sound.SPIDER_IDLE, Sound.SPIDER_WALK, Sound.SPIDER_DEATH, Sound.SPIDER_IDLE), WITHER(Sound.WITHER_HURT, null, Sound.WITHER_DEATH, Sound.WITHER_IDLE, Sound.WITHER_SHOOT, Sound.WITHER_SPAWN), @@ -74,8 +74,6 @@ public enum DisguiseSound { public static DisguiseSound getType(String name) { try { - if (name.equals("GIANT")) - return DisguiseSound.GIANT_ZOMBIE; return valueOf(name); } catch (Exception ex) { return null; @@ -124,16 +122,15 @@ public enum DisguiseSound { } /** - * Used to check if the original sound is owned by this disguise sound Ofc it won't be correct for commonly shared names. But - * its the best I can possibly do + * Used to check if this sound name is owned by this disguise sound. */ - public SoundType ownsSound(String name) { + public SoundType getType(String name, boolean ignoreDamage) { if (isCancelSound(name)) return SoundType.CANCEL; if (disguiseSounds.get(SoundType.STEP) == Sound.STEP_GRASS && name.startsWith("step.")) return SoundType.STEP; for (SoundType type : SoundType.values()) { - if (!disguiseSounds.containsKey(type)) + if (!disguiseSounds.containsKey(type) || type == SoundType.DEATH || (ignoreDamage && type == SoundType.HURT)) continue; Sound s = disguiseSounds.get(type); if (s != null) diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/DisguiseType.java b/src/me/libraryaddict/disguise/DisguiseTypes/DisguiseType.java index a2bee759..944f9b21 100644 --- a/src/me/libraryaddict/disguise/DisguiseTypes/DisguiseType.java +++ b/src/me/libraryaddict/disguise/DisguiseTypes/DisguiseType.java @@ -5,33 +5,23 @@ public enum DisguiseType { EntityType.MOB), COW(EntityType.MOB), CREEPER(EntityType.MOB), EGG(EntityType.MISC, 62), ENDER_CRYSTAL( EntityType.MISC, 51), ENDER_DRAGON(EntityType.MOB), ENDER_PEARL(EntityType.MISC, 65), ENDER_SIGNAL(EntityType.MISC, 72), ENDERMAN(EntityType.MOB), EXPERIENCE_ORB(EntityType.MISC), FALLING_BLOCK(EntityType.MISC, 70, 1), FIREWORKS( - EntityType.MISC, 76), FISHING_HOOK(EntityType.MISC, 90), GHAST(EntityType.MOB), GIANT_ZOMBIE(EntityType.MOB), IRON_GOLEM( - EntityType.MOB), ITEM(EntityType.MISC, 2, 1), ITEM_FRAME(EntityType.MISC, 71), LARGE_FIREBALL(EntityType.MISC, 63, 0), MAGMA_CUBE( - EntityType.MOB), MINECART_CHEST(EntityType.MISC, 10, 1), MINECART_FURNACE(EntityType.MISC, 10, 2), MINECART_HOPPER( + EntityType.MISC, 76), FISHING_HOOK(EntityType.MISC, 90), GHAST(EntityType.MOB), GIANT(EntityType.MOB), IRON_GOLEM( + EntityType.MOB), DROPPED_ITEM(EntityType.MISC, 2, 1), ITEM_FRAME(EntityType.MISC, 71), FIREBALL(EntityType.MISC, 63, + 0), MAGMA_CUBE(EntityType.MOB), MINECART_CHEST(EntityType.MISC, 10, 1), MINECART_FURNACE(EntityType.MISC, 10, 2), MINECART_HOPPER( EntityType.MISC, 10), MINECART_MOB_SPAWNER(EntityType.MISC, 10, 4), MINECART_RIDEABLE(EntityType.MISC, 10, 0), MINECART_TNT( - EntityType.MISC, 10, 3), MUSHROOM_COW(EntityType.MOB), OCELOT(EntityType.MOB), PAINTING(EntityType.MISC), PIG(EntityType.MOB), PIG_ZOMBIE( - EntityType.MOB), PLAYER(EntityType.PLAYER), POTION(EntityType.MISC, 73), PRIMED_TNT(EntityType.MISC, 50), SHEEP( - EntityType.MOB), SILVERFISH(EntityType.MOB), SKELETON(EntityType.MOB), SLIME(EntityType.MOB), SMALL_FIREBALL( - EntityType.MISC, 64, 0), SNOWBALL(EntityType.MISC, 61), SNOWMAN(EntityType.MOB), SPIDER(EntityType.MOB), SQUID( - EntityType.MOB), THROWN_EXP_BOTTLE(EntityType.MISC, 75), VILLAGER(EntityType.MOB), WITCH(EntityType.MOB), WITHER( - EntityType.MOB), WITHER_SKELETON(EntityType.MOB), WITHER_SKULL(EntityType.MISC, 66), WOLF(EntityType.MOB), ZOMBIE( - EntityType.MOB); + EntityType.MISC, 10, 3), MUSHROOM_COW(EntityType.MOB), OCELOT(EntityType.MOB), PAINTING(EntityType.MISC), PIG( + EntityType.MOB), PIG_ZOMBIE(EntityType.MOB), PLAYER(EntityType.PLAYER), SPLASH_POTION(EntityType.MISC, 73), PRIMED_TNT( + EntityType.MISC, 50), SHEEP(EntityType.MOB), SILVERFISH(EntityType.MOB), SKELETON(EntityType.MOB), SLIME( + EntityType.MOB), SMALL_FIREBALL(EntityType.MISC, 64, 0), SNOWBALL(EntityType.MISC, 61), SNOWMAN(EntityType.MOB), SPIDER( + EntityType.MOB), SQUID(EntityType.MOB), THROWN_EXP_BOTTLE(EntityType.MISC, 75), VILLAGER(EntityType.MOB), WITCH( + EntityType.MOB), WITHER(EntityType.MOB), WITHER_SKELETON(EntityType.MOB), WITHER_SKULL(EntityType.MISC, 66), WOLF( + EntityType.MOB), ZOMBIE(EntityType.MOB); public static enum EntityType { MISC, MOB, PLAYER; } public static DisguiseType getType(org.bukkit.entity.EntityType entityType) { - if (entityType == org.bukkit.entity.EntityType.SPLASH_POTION) - return DisguiseType.POTION; - else if (entityType == org.bukkit.entity.EntityType.GIANT) - return DisguiseType.GIANT_ZOMBIE; - else if (entityType == org.bukkit.entity.EntityType.DROPPED_ITEM) - return DisguiseType.ITEM; - else if (entityType == org.bukkit.entity.EntityType.FIREBALL) - return DisguiseType.LARGE_FIREBALL; - else if (entityType == org.bukkit.entity.EntityType.SMALL_FIREBALL) - return DisguiseType.LARGE_FIREBALL; return DisguiseType.valueOf(entityType.name()); } diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/FlagWatcher.java b/src/me/libraryaddict/disguise/DisguiseTypes/FlagWatcher.java index c530aea3..185da9db 100644 --- a/src/me/libraryaddict/disguise/DisguiseTypes/FlagWatcher.java +++ b/src/me/libraryaddict/disguise/DisguiseTypes/FlagWatcher.java @@ -26,6 +26,7 @@ public abstract class FlagWatcher { } private int entityId; private HashMap entityValues = new HashMap(); + private HashMap softReplace = new HashMap(); protected FlagWatcher(int entityId) { this.entityId = entityId; @@ -65,6 +66,10 @@ public abstract class FlagWatcher { watch.a(value); } } + } else if (softReplace.containsKey(watch.a())) { + if (watch.b().getClass() == softReplace.get(watch.a()).getClass()) { + + } } newList.add(watch); } @@ -83,6 +88,31 @@ public abstract class FlagWatcher { return newList; } + private WatchableObject processWatcher(WatchableObject watch, HashMap map) { + boolean doD = watch.d(); + watch = new WatchableObject(watch.c(), watch.a(), watch.b()); + if (!doD) + watch.a(false); + if (map.get(watch.a()) == null) { + return watch; + } else { + Object value = map.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(value); + } + } + return watch; + } + public void displayName(boolean display) { if ((Byte) getValue(6) != (display ? 1 : 0)) { setValue(6, (byte) (display ? 1 : 0)); diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/MiscDisguise.java b/src/me/libraryaddict/disguise/DisguiseTypes/MiscDisguise.java index beebb1f7..044f7c8b 100644 --- a/src/me/libraryaddict/disguise/DisguiseTypes/MiscDisguise.java +++ b/src/me/libraryaddict/disguise/DisguiseTypes/MiscDisguise.java @@ -5,13 +5,11 @@ public class MiscDisguise extends Disguise { private int id = -1; public MiscDisguise(DisguiseType disguiseType) { - super(disguiseType); - id = disguiseType.getDefaultId(); - data = disguiseType.getDefaultData(); + this(disguiseType, true, -1, -1); } - public MiscDisguise(DisguiseType disguiseType, int id, int data) { - super(disguiseType); + public MiscDisguise(DisguiseType disguiseType, boolean replaceSounds, int id, int data) { + super(disguiseType, replaceSounds); if (id == -1) id = disguiseType.getDefaultId(); if (data == -1) @@ -20,6 +18,10 @@ public class MiscDisguise extends Disguise { this.data = data; } + public MiscDisguise(DisguiseType disguiseType, int id, int data) { + this(disguiseType, true, id, data); + } + public int getData() { return data; } diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/MobDisguise.java b/src/me/libraryaddict/disguise/DisguiseTypes/MobDisguise.java index c9d8efed..2f40356b 100644 --- a/src/me/libraryaddict/disguise/DisguiseTypes/MobDisguise.java +++ b/src/me/libraryaddict/disguise/DisguiseTypes/MobDisguise.java @@ -1,40 +1,26 @@ package me.libraryaddict.disguise.DisguiseTypes; -import net.minecraft.server.v1_5_R3.Entity; -import net.minecraft.server.v1_5_R3.EntityAgeable; -import net.minecraft.server.v1_5_R3.EntityLiving; -import net.minecraft.server.v1_5_R3.EntityZombie; -import net.minecraft.server.v1_5_R3.World; - -import org.bukkit.Location; +import me.libraryaddict.disguise.DisguiseTypes.Watchers.AgeableWatcher; public class MobDisguise extends Disguise { - private boolean adult; + private boolean isAdult; public MobDisguise(DisguiseType disguiseType, boolean isAdult) { - super(disguiseType); - adult = isAdult; + super(disguiseType, true); } - protected EntityLiving getEntityLiving(World w, Location loc, int id) { - Entity entity = getEntity(w, loc, id); - if (!adult) { - if (entity instanceof EntityAgeable) - ((EntityAgeable) entity).setAge(-24000); - else if (entity instanceof EntityZombie) - ((EntityZombie) entity).setBaby(true); - } - if (entity instanceof EntityLiving) - return (EntityLiving) entity; - return null; + public MobDisguise(DisguiseType disguiseType, boolean isAdult, boolean replaceSounds) { + super(disguiseType, replaceSounds); + this.isAdult = isAdult; } public boolean isAdult() { - return adult; - } - - public void setAdult(boolean setAdult) { - adult = setAdult; + if (getWatcher() != null) { + if (getWatcher() instanceof AgeableWatcher) + return ((AgeableWatcher) getWatcher()).isAdult(); + return false; + } + return isAdult; } } \ No newline at end of file diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/PlayerDisguise.java b/src/me/libraryaddict/disguise/DisguiseTypes/PlayerDisguise.java index 610395ee..246439c4 100644 --- a/src/me/libraryaddict/disguise/DisguiseTypes/PlayerDisguise.java +++ b/src/me/libraryaddict/disguise/DisguiseTypes/PlayerDisguise.java @@ -4,7 +4,11 @@ public class PlayerDisguise extends Disguise { private String playerName; public PlayerDisguise(String name) { - super(DisguiseType.PLAYER); + this(name, true); + } + + public PlayerDisguise(String name, boolean replaceSounds) { + super(DisguiseType.PLAYER, replaceSounds); if (name.length() > 16) name = name.substring(0, 16); playerName = name; diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/WatcherValues.java b/src/me/libraryaddict/disguise/DisguiseTypes/WatcherValues.java new file mode 100644 index 00000000..86bae75f --- /dev/null +++ b/src/me/libraryaddict/disguise/DisguiseTypes/WatcherValues.java @@ -0,0 +1,43 @@ +package me.libraryaddict.disguise.DisguiseTypes; + +import java.util.HashMap; +import java.util.Set; + +public enum WatcherValues { + ARROW(16, (byte) 0), BAT(16, (byte) 0), BLAZE(16, (byte) 0), BOAT(19, 40, 17, 10, 18, 0), CAVE_SPIDER(), CHICKEN(12, 0), COW( + 12, 0), CREEPER(16, (byte) 0, 17, (byte) 0), EGG(), ENDER_CRYSTAL(), ENDER_DRAGON(16, 300), ENDER_PEARL(), ENDER_SIGNAL(), ENDERMAN( + 16, (byte) 0, 17, (byte) 1, 18, (byte) 0), EXPERIENCE_ORB(), FALLING_BLOCK(), FIREWORKS(), FISHING_HOOK(), GHAST(16, + (byte) 0), GIANT(), IRON_GOLEM(), DROPPED_ITEM(), ITEM_FRAME(2, 5, 3, (byte) 0), FIREBALL(), MAGMA_CUBE(16, (byte) 0, + 18, (byte) 0), MINECART_CHEST(16, (byte) 0, 17, 0, 18, 1, 19, 0, 20, 0, 21, 6, 22, (byte) 0), MINECART_FURNACE(16, + (byte) 0, 17, 0, 18, 1, 19, 0, 20, 0, 21, 6, 22, (byte) 0), MINECART_HOPPER(16, (byte) 0, 17, 0, 18, 1, 19, 0, 20, 0, + 21, 6, 22, (byte) 0), MINECART_MOB_SPAWNER(16, (byte) 0, 17, 0, 18, 1, 19, 0, 20, 0, 21, 6, 22, (byte) 0), MINECART_RIDEABLE( + 16, (byte) 0, 17, 0, 18, 1, 19, 0, 20, 0, 21, 6, 22, (byte) 0), MINECART_TNT(16, (byte) 0, 17, 0, 18, 1, 19, 0, 20, + 0, 21, 6, 22, (byte) 0), MUSHROOM_COW(12, 0), OCELOT(12, 0, 16, (byte) 0, 17, "", 18, (byte) 0), PAINTING(), PIG(12, + 0, 16, (byte) 0), PIG_ZOMBIE(12, 0), PLAYER(8, 0, 9, (byte) 0, 10, (byte) 0), SPLASH_POTION(), PRIMED_TNT(), SHEEP( + 12, (byte) 0, 16, (byte) 0), SILVERFISH(), SKELETON(13, (byte) 0), SLIME(16, (byte) 0, 18, (byte) 0), SMALL_FIREBALL(), SNOWBALL(), SNOWMAN(), SPIDER(), SQUID(), THROWN_EXP_BOTTLE(), VILLAGER( + 16, 0), WITCH(), WITHER(16, 300), WITHER_SKELETON(13, (byte) 1), WITHER_SKULL(), WOLF(16, (byte) 0, 17, "", 18, 8, + 19, (byte) 0, 20, (byte) 14), ZOMBIE(13, (byte) 0); + private HashMap values = new HashMap(); + + private WatcherValues(Object... obj) { + for (int i = 0; i < obj.length; i += 2) { + if (!values.containsKey(obj)) + values.put((Integer) obj[i], obj[i + 1]); + else + try { + throw new Exception("Values in WatcherValues already contains " + obj + " for " + this.name()); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + public Set getValues() { + return values.keySet(); + } + + public Object getValue(int no) { + return values.get(no); + } + +} diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/AgeableWatcher.java b/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/AgeableWatcher.java index 0bd1ad6c..969acd20 100644 --- a/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/AgeableWatcher.java +++ b/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/AgeableWatcher.java @@ -2,7 +2,7 @@ package me.libraryaddict.disguise.DisguiseTypes.Watchers; import me.libraryaddict.disguise.DisguiseTypes.FlagWatcher; -public class AgeableWatcher extends FlagWatcher { +public abstract class AgeableWatcher extends FlagWatcher { public AgeableWatcher(int entityId) { super(entityId); diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/ArrowWatcher.java b/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/ArrowWatcher.java new file mode 100644 index 00000000..0c842abe --- /dev/null +++ b/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/ArrowWatcher.java @@ -0,0 +1,21 @@ +package me.libraryaddict.disguise.DisguiseTypes.Watchers; + +import me.libraryaddict.disguise.DisguiseTypes.FlagWatcher; + +public class ArrowWatcher extends FlagWatcher { + + protected ArrowWatcher(int entityId) { + super(entityId); + setValue(16, (byte) 0); + } + + public void setMoving(boolean moving) { + setValue(16, (byte) (moving ? 1 : 0)); + } + + public boolean isMoving() { + return (Byte) getValue(16) == 1; + } + + +} diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/ChickenWatcher.java b/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/ChickenWatcher.java new file mode 100644 index 00000000..8ee4b4de --- /dev/null +++ b/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/ChickenWatcher.java @@ -0,0 +1,9 @@ +package me.libraryaddict.disguise.DisguiseTypes.Watchers; + +public class ChickenWatcher extends AgeableWatcher { + + public ChickenWatcher(int entityId) { + super(entityId); + } + +} diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/CowWatcher.java b/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/CowWatcher.java new file mode 100644 index 00000000..036fb88a --- /dev/null +++ b/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/CowWatcher.java @@ -0,0 +1,9 @@ +package me.libraryaddict.disguise.DisguiseTypes.Watchers; + +public class CowWatcher extends AgeableWatcher { + + public CowWatcher(int entityId) { + super(entityId); + } + +} diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/CreeperWatcher.java b/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/CreeperWatcher.java index 522c6843..1f6d80fa 100644 --- a/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/CreeperWatcher.java +++ b/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/CreeperWatcher.java @@ -6,7 +6,7 @@ public class CreeperWatcher extends FlagWatcher { public CreeperWatcher(int entityId) { super(entityId); - setValue(16, (byte) -1); + setValue(16, (byte) 0); setValue(17, 0); } diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/LivingEntityWatcher.java b/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/LivingEntityWatcher.java new file mode 100644 index 00000000..3ad93fac --- /dev/null +++ b/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/LivingEntityWatcher.java @@ -0,0 +1,11 @@ +package me.libraryaddict.disguise.DisguiseTypes.Watchers; + +import me.libraryaddict.disguise.DisguiseTypes.FlagWatcher; + +public class LivingEntityWatcher extends FlagWatcher { + + protected LivingEntityWatcher(int entityId) { + super(entityId); + } + +} diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/MushroomCowWatcher.java b/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/MushroomCowWatcher.java new file mode 100644 index 00000000..5f709e8f --- /dev/null +++ b/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/MushroomCowWatcher.java @@ -0,0 +1,9 @@ +package me.libraryaddict.disguise.DisguiseTypes.Watchers; + +public class MushroomCowWatcher extends AgeableWatcher { + + public MushroomCowWatcher(int entityId) { + super(entityId); + } + +} diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/PigZombieWatcher.java b/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/PigZombieWatcher.java new file mode 100644 index 00000000..3a55bb27 --- /dev/null +++ b/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/PigZombieWatcher.java @@ -0,0 +1,9 @@ +package me.libraryaddict.disguise.DisguiseTypes.Watchers; + +public class PigZombieWatcher extends AgeableWatcher { + + public PigZombieWatcher(int entityId) { + super(entityId); + } + +} diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/SkeletonWatcher.java b/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/SkeletonWatcher.java new file mode 100644 index 00000000..14a4d19a --- /dev/null +++ b/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/SkeletonWatcher.java @@ -0,0 +1,12 @@ +package me.libraryaddict.disguise.DisguiseTypes.Watchers; + +import me.libraryaddict.disguise.DisguiseTypes.FlagWatcher; + +public class SkeletonWatcher extends FlagWatcher { + + protected SkeletonWatcher(int entityId) { + super(entityId); + setValue(13, (byte) 0); + } + +} diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/WitherSkeletonWatcher.java b/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/WitherSkeletonWatcher.java new file mode 100644 index 00000000..667594b7 --- /dev/null +++ b/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/WitherSkeletonWatcher.java @@ -0,0 +1,12 @@ +package me.libraryaddict.disguise.DisguiseTypes.Watchers; + +import me.libraryaddict.disguise.DisguiseTypes.FlagWatcher; + +public class WitherSkeletonWatcher extends FlagWatcher { + + protected WitherSkeletonWatcher(int entityId) { + super(entityId); + setValue(13, (byte) 1); + } + +} diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/ZombieWatcher.java b/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/ZombieWatcher.java index 57d015f4..1d6126d2 100644 --- a/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/ZombieWatcher.java +++ b/src/me/libraryaddict/disguise/DisguiseTypes/Watchers/ZombieWatcher.java @@ -1,8 +1,6 @@ package me.libraryaddict.disguise.DisguiseTypes.Watchers; -import me.libraryaddict.disguise.DisguiseTypes.FlagWatcher; - -public class ZombieWatcher extends FlagWatcher { +public class ZombieWatcher extends AgeableWatcher { public ZombieWatcher(int entityId) { super(entityId); diff --git a/src/me/libraryaddict/disguise/LibsDisguises.java b/src/me/libraryaddict/disguise/LibsDisguises.java index 2c1b34a7..259d9136 100644 --- a/src/me/libraryaddict/disguise/LibsDisguises.java +++ b/src/me/libraryaddict/disguise/LibsDisguises.java @@ -33,8 +33,10 @@ public class LibsDisguises extends JavaPlugin { @Override public void onEnable() { if (Bukkit.getPluginManager().getPlugin("ProtocolLib") == null) { - System.out.print("[LibsDisguises] WARNING! WARNING! LibsDisguises couldn't find ProtocolLib! This plugin depends on it to run!"); - System.out.print("[LibsDisguises] WARNING! WARNING! LibsDisguises couldn't find ProtocolLib! LibsDisguises is now shutting down!"); + System.out + .print("[LibsDisguises] WARNING! WARNING! LibsDisguises couldn't find ProtocolLib! This plugin depends on it to run!"); + System.out + .print("[LibsDisguises] WARNING! WARNING! LibsDisguises couldn't find ProtocolLib! LibsDisguises is now shutting down!"); getPluginLoader().disablePlugin(this); return; }