Work towards backwards compatibility
This commit is contained in:
		| @@ -46,22 +46,18 @@ public class LibsEquipment implements EntityEquipment { | ||||
|         flagWatcher.sendItemStack(slot, item); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public ItemStack getItemInMainHand() { | ||||
|         return getItem(EquipmentSlot.HAND); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setItemInMainHand(ItemStack item) { | ||||
|         setItem(EquipmentSlot.HAND, item); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public ItemStack getItemInOffHand() { | ||||
|         return getItem(EquipmentSlot.OFF_HAND); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setItemInOffHand(ItemStack item) { | ||||
|         setItem(EquipmentSlot.OFF_HAND, item); | ||||
|     } | ||||
|   | ||||
| @@ -106,10 +106,6 @@ public class MetaIndex<Y> { | ||||
|  | ||||
|     public static MetaIndex<Boolean> ENTITY_SILENT = new MetaIndex<>(FlagWatcher.class, 4, false); | ||||
|  | ||||
|     public static MetaIndex<Byte> ILLAGER_SPELL_TICKS = new MetaIndex<>(IllagerWizardWatcher.class, 0, (byte) 0); | ||||
|  | ||||
|     public static MetaIndex<Byte> ILLAGER_META = new MetaIndex<>(IllagerWatcher.class, 0, (byte) 0); | ||||
|  | ||||
|     public static MetaIndex<BlockPosition> FALLING_BLOCK_POSITION = new MetaIndex<>(FallingBlockWatcher.class, 0, | ||||
|             BlockPosition.ORIGIN); | ||||
|  | ||||
| @@ -138,6 +134,10 @@ public class MetaIndex<Y> { | ||||
|     public static MetaIndex<Optional<UUID>> HORSE_OWNER = new MetaIndex<>(AbstractHorseWatcher.class, 1, | ||||
|             Optional.<UUID>absent()); | ||||
|  | ||||
|     public static MetaIndex<Byte> ILLAGER_META = new MetaIndex<>(IllagerWatcher.class, 0, (byte) 0); | ||||
|  | ||||
|     public static MetaIndex<Byte> ILLAGER_SPELL_TICKS = new MetaIndex<>(IllagerWizardWatcher.class, 0, (byte) 0); | ||||
|  | ||||
|     public static MetaIndex<Byte> INSENTIENT_META = new MetaIndex<>(InsentientWatcher.class, 0, (byte) 0); | ||||
|  | ||||
|     public static MetaIndex<Byte> IRON_GOLEM_PLAYER_CREATED = new MetaIndex<>(IronGolemWatcher.class, 0, (byte) 0); | ||||
| @@ -220,8 +220,7 @@ public class MetaIndex<Y> { | ||||
|  | ||||
|     public static MetaIndex<Byte> SPIDER_CLIMB = new MetaIndex<>(SpiderWatcher.class, 0, (byte) 0); | ||||
|  | ||||
|     public static MetaIndex<ItemStack> SPLASH_POTION_ITEM = new MetaIndex<>(SplashPotionWatcher.class, 0, | ||||
|             new ItemStack(Material.SPLASH_POTION)); | ||||
|     public static MetaIndex<ItemStack> SPLASH_POTION_ITEM; | ||||
|  | ||||
|     public static MetaIndex<Byte> TAMEABLE_META = new MetaIndex<>(TameableWatcher.class, 0, (byte) 0); | ||||
|  | ||||
| @@ -267,6 +266,13 @@ public class MetaIndex<Y> { | ||||
|     public static MetaIndex<Boolean> ZOMBIE_VILLAGER_SHAKING = new MetaIndex<>(ZombieVillagerWatcher.class, 0, false); | ||||
|  | ||||
|     static { | ||||
|         try { | ||||
|             SPLASH_POTION_ITEM = new MetaIndex<>(SplashPotionWatcher.class, 0, | ||||
|                     new ItemStack(Material.valueOf("SPLASH_POTION"))); | ||||
|         } | ||||
|         catch (Exception ex) { | ||||
|             SPLASH_POTION_ITEM = new MetaIndex<>(SplashPotionWatcher.class, 0, new ItemStack(Material.POTION)); | ||||
|         } | ||||
|         setValues(); | ||||
|     } | ||||
|  | ||||
| @@ -343,8 +349,10 @@ public class MetaIndex<Y> { | ||||
|                         continue; | ||||
|  | ||||
|                     if (found != null) { | ||||
|                         System.err.println( | ||||
|                                 entry.getKey().getSimpleName() + " has multiple FlagType's registered for the index " + i + " (" + type.getFlagWatcher().getSimpleName() + ", " + found.getFlagWatcher().getSimpleName() + ")"); | ||||
|                         System.err.println(entry.getKey() | ||||
|                                 .getSimpleName() + " has multiple FlagType's registered for the index " + i + " (" + type | ||||
|                                 .getFlagWatcher().getSimpleName() + ", " + found.getFlagWatcher() | ||||
|                                 .getSimpleName() + ")"); | ||||
|                         continue loop; | ||||
|                     } | ||||
|  | ||||
| @@ -369,8 +377,8 @@ public class MetaIndex<Y> { | ||||
|  | ||||
|                 MetaIndex index = (MetaIndex) field.get(null); | ||||
|  | ||||
|                 toPrint.add( | ||||
|                         index.getFlagWatcher().getSimpleName() + " " + field.getName() + " " + index.getIndex() + " " + index.getDefault().getClass().getSimpleName()); | ||||
|                 toPrint.add(index.getFlagWatcher().getSimpleName() + " " + field.getName() + " " + index | ||||
|                         .getIndex() + " " + index.getDefault().getClass().getSimpleName()); | ||||
|             } | ||||
|         } | ||||
|         catch (Exception ex) { | ||||
| @@ -443,8 +451,10 @@ public class MetaIndex<Y> { | ||||
|                     continue; | ||||
|                 } | ||||
|  | ||||
|                 System.err.println( | ||||
|                         "[LibsDisguises] MetaIndex " + metaIndex.getFlagWatcher().getSimpleName() + " at index " + metaIndex.getIndex() + " has already registered this! (" + metaIndex.getDefault() + "," + index.getDefault() + ")"); | ||||
|                 System.err.println("[LibsDisguises] MetaIndex " + metaIndex.getFlagWatcher() | ||||
|                         .getSimpleName() + " at index " + metaIndex | ||||
|                         .getIndex() + " has already registered this! (" + metaIndex.getDefault() + "," + index | ||||
|                         .getDefault() + ")"); | ||||
|             } | ||||
|  | ||||
|             values()[i] = metaIndexes[a]; | ||||
|   | ||||
| @@ -5,51 +5,40 @@ import org.bukkit.inventory.MainHand; | ||||
| import me.libraryaddict.disguise.disguisetypes.Disguise; | ||||
| import me.libraryaddict.disguise.disguisetypes.MetaIndex; | ||||
|  | ||||
| public class InsentientWatcher extends LivingWatcher | ||||
| { | ||||
|     public InsentientWatcher(Disguise disguise) | ||||
|     { | ||||
| public class InsentientWatcher extends LivingWatcher { | ||||
|     public InsentientWatcher(Disguise disguise) { | ||||
|         super(disguise); | ||||
|     } | ||||
|  | ||||
|     public void setMainHand(MainHand mainHand) | ||||
|     { | ||||
|     public void setMainHand(MainHand mainHand) { | ||||
|         setInsentientFlag(2, mainHand == MainHand.RIGHT); | ||||
|         sendData(MetaIndex.INSENTIENT_META); | ||||
|     } | ||||
|  | ||||
|     public MainHand getMainHand() | ||||
|     { | ||||
|     public MainHand getMainHand() { | ||||
|         return getInsentientFlag(2) ? MainHand.RIGHT : MainHand.LEFT; | ||||
|     } | ||||
|  | ||||
|     public boolean isAI() | ||||
|     { | ||||
|     public boolean isAI() { | ||||
|         return getInsentientFlag(1); | ||||
|     } | ||||
|  | ||||
|     public void setAI(boolean ai) | ||||
|     { | ||||
|     public void setAI(boolean ai) { | ||||
|         setInsentientFlag(1, ai); | ||||
|         sendData(MetaIndex.INSENTIENT_META); | ||||
|     } | ||||
|  | ||||
|     private void setInsentientFlag(int i, boolean flag) | ||||
|     { | ||||
|     private void setInsentientFlag(int i, boolean flag) { | ||||
|         byte b0 = (byte) getData(MetaIndex.INSENTIENT_META); | ||||
|  | ||||
|         if (flag) | ||||
|         { | ||||
|         if (flag) { | ||||
|             setData(MetaIndex.INSENTIENT_META, (byte) (b0 | 1 << i)); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|         } else { | ||||
|             setData(MetaIndex.INSENTIENT_META, (byte) (b0 & (~1 << i))); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private boolean getInsentientFlag(int i) | ||||
|     { | ||||
|     private boolean getInsentientFlag(int i) { | ||||
|         return ((byte) getData(MetaIndex.INSENTIENT_META) & 1 << i) != 0; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -60,10 +60,9 @@ public class PlayerWatcher extends LivingWatcher { | ||||
|     public BlockFace getSleepingDirection() { | ||||
|         if (sleepingDirection == null) { | ||||
|             if (this.getDisguise().getEntity() != null && isSleeping()) { | ||||
|                 this.sleepingDirection = BlockFace | ||||
|                         .values()[Math.round(this.getDisguise().getEntity().getLocation().getYaw() / 90F) & 0x3]; | ||||
|             } | ||||
|             else { | ||||
|                 this.sleepingDirection = BlockFace.values()[Math | ||||
|                         .round(this.getDisguise().getEntity().getLocation().getYaw() / 90F) & 0x3]; | ||||
|             } else { | ||||
|                 return BlockFace.EAST; | ||||
|             } | ||||
|         } | ||||
| @@ -189,8 +188,9 @@ public class PlayerWatcher extends LivingWatcher { | ||||
|             try { | ||||
|                 if (isSleeping()) { | ||||
|                     for (Player player : DisguiseUtilities.getPerverts(getDisguise())) { | ||||
|                         PacketContainer[] packets = DisguiseUtilities.getBedPackets(getDisguise().getEntity().getLocation(), | ||||
|                                 player.getLocation(), (PlayerDisguise) getDisguise()); | ||||
|                         PacketContainer[] packets = DisguiseUtilities | ||||
|                                 .getBedPackets(getDisguise().getEntity().getLocation(), player.getLocation(), | ||||
|                                         (PlayerDisguise) getDisguise()); | ||||
|  | ||||
|                         if (getDisguise().getEntity() == player) { | ||||
|                             for (PacketContainer packet : packets) { | ||||
| @@ -200,15 +200,13 @@ public class PlayerWatcher extends LivingWatcher { | ||||
|  | ||||
|                                 ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet); | ||||
|                             } | ||||
|                         } | ||||
|                         else { | ||||
|                         } else { | ||||
|                             for (PacketContainer packet : packets) { | ||||
|                                 ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet); | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|                 else { | ||||
|                 } else { | ||||
|                     PacketContainer packet = new PacketContainer(Server.ANIMATION); | ||||
|  | ||||
|                     StructureModifier<Integer> mods = packet.getIntegers(); | ||||
| @@ -232,10 +230,8 @@ public class PlayerWatcher extends LivingWatcher { | ||||
|  | ||||
|         if (flag) { | ||||
|             setData(MetaIndex.PLAYER_SKIN, (byte) (b0 | 1 << i)); | ||||
|         } | ||||
|         else { | ||||
|         } else { | ||||
|             setData(MetaIndex.PLAYER_SKIN, (byte) (b0 & (~1 << i))); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -704,7 +704,7 @@ public class DisguiseParser { | ||||
|                                 value = ReflectionManager.parseGameProfile(valueString); | ||||
|                             } | ||||
|                             catch (Exception ex) { | ||||
|                                 throw parseToException(GameProfile.class, valueString, methodName); | ||||
|                                 throw parseToException(WrappedGameProfile.class, valueString, methodName); | ||||
|                             } | ||||
|                         } else if (float.class == param || double.class == param) { | ||||
|                             // Parse to number | ||||
| @@ -733,7 +733,7 @@ public class DisguiseParser { | ||||
|                             catch (Exception ex) { | ||||
|                                 throw parseToException(param, valueString, methodName); | ||||
|                             } | ||||
|                         } else if (param == Llama.Color.class) { | ||||
|                         } else if (param.getName().equals("org.bukkit.entity.Llama$Color")) { | ||||
|                             try { | ||||
|                                 value = Llama.Color.valueOf(valueString.toUpperCase()); | ||||
|                             } | ||||
|   | ||||
| @@ -10,83 +10,71 @@ import org.bukkit.Sound; | ||||
|  * Only living disguises go in here! | ||||
|  */ | ||||
| public enum DisguiseSound { | ||||
|     ARROW(null, null, null, null, "entity.arrow.hit", "entity.arrow.shoot"), | ||||
|  | ||||
|     ARROW(null, null, null, null, Sound.ENTITY_ARROW_HIT, Sound.ENTITY_ARROW_SHOOT), | ||||
|     BAT("entity.bat.hurt", null, "entity.bat.death", "entity.bat.ambient", "entity.player.small_fall", | ||||
|             "entity.bat.loop", "entity.player.big_fall", "entity.bat.takeoff"), | ||||
|  | ||||
|     BAT(Sound.ENTITY_BAT_HURT, null, Sound.ENTITY_BAT_DEATH, Sound.ENTITY_BAT_AMBIENT, Sound.ENTITY_PLAYER_SMALL_FALL, | ||||
|             Sound.ENTITY_BAT_LOOP, Sound.ENTITY_PLAYER_BIG_FALL, Sound.ENTITY_BAT_TAKEOFF), | ||||
|     BLAZE("entity.blaze.hurt", null, "entity.blaze.death", "entity.blaze.ambient", "entity.player.small_fall", | ||||
|             "entity.player.big_fall"), | ||||
|  | ||||
|     BLAZE(Sound.ENTITY_BLAZE_HURT, null, Sound.ENTITY_BLAZE_DEATH, Sound.ENTITY_BLAZE_AMBIENT, | ||||
|             Sound.ENTITY_PLAYER_SMALL_FALL, Sound.ENTITY_PLAYER_BIG_FALL), | ||||
|     CAVE_SPIDER("entity.spider.ambient", "entity.spider.step", "entity.spider.death", "entity.spider.ambient"), | ||||
|  | ||||
|     CAVE_SPIDER(Sound.ENTITY_SPIDER_AMBIENT, Sound.ENTITY_SPIDER_STEP, Sound.ENTITY_SPIDER_DEATH, | ||||
|             Sound.ENTITY_SPIDER_AMBIENT), | ||||
|     CHICKEN("entity.chicken.hurt", "entity.chicken.step", "entity.chicken.hurt", "entity.chicken.ambient", | ||||
|             "entity.player.small_fall", "entity.chicken.egg", "entity.player.big_fall"), | ||||
|  | ||||
|     CHICKEN(Sound.ENTITY_CHICKEN_HURT, Sound.ENTITY_CHICKEN_STEP, Sound.ENTITY_CHICKEN_HURT, | ||||
|             Sound.ENTITY_CHICKEN_AMBIENT, Sound.ENTITY_PLAYER_SMALL_FALL, Sound.ENTITY_CHICKEN_EGG, | ||||
|             Sound.ENTITY_PLAYER_BIG_FALL), | ||||
|     COW("entity.cow.hurt", "entity.cow.step", "entity.cow.death", "entity.cow.ambient"), | ||||
|  | ||||
|     COW(Sound.ENTITY_COW_HURT, Sound.ENTITY_COW_STEP, Sound.ENTITY_COW_DEATH, Sound.ENTITY_COW_AMBIENT), | ||||
|     CREEPER("entity.creeper.hurt", "block.grass.step", "entity.creeper.death", null, "entity.creeper.primed"), | ||||
|  | ||||
|     CREEPER(Sound.ENTITY_CREEPER_HURT, Sound.BLOCK_GRASS_STEP, Sound.ENTITY_CREEPER_DEATH, null, | ||||
|             Sound.ENTITY_CREEPER_PRIMED), | ||||
|     DONKEY("entity.donkey.hurt", "block.grass.step", "entity.donkey.death", "entity.donkey.ambient", | ||||
|             "entity.horse.gallop", "entity.horse.saddle", "entity.donkey.angry", "entity.horse.step_wood", | ||||
|             "entity.horse.armor", "entity.horse.land", "entity.horse.jump", "entity.horse.angry"), | ||||
|  | ||||
|     DONKEY(Sound.ENTITY_DONKEY_HURT, Sound.BLOCK_GRASS_STEP, Sound.ENTITY_DONKEY_DEATH, Sound.ENTITY_DONKEY_AMBIENT, | ||||
|             Sound.ENTITY_HORSE_GALLOP, Sound.ENTITY_HORSE_SADDLE, Sound.ENTITY_DONKEY_ANGRY, | ||||
|             Sound.ENTITY_HORSE_STEP_WOOD, Sound.ENTITY_HORSE_ARMOR, Sound.ENTITY_HORSE_LAND, Sound.ENTITY_HORSE_JUMP, | ||||
|             Sound.ENTITY_HORSE_ANGRY), | ||||
|     ELDER_GUARDIAN("entity.elder_guardian.hurt", null, "entity.elder_guardian.death", "entity.elder_guardian.ambient"), | ||||
|  | ||||
|     ELDER_GUARDIAN(Sound.ENTITY_ELDER_GUARDIAN_HURT, null, Sound.ENTITY_ELDER_GUARDIAN_DEATH, | ||||
|             Sound.ENTITY_ELDER_GUARDIAN_AMBIENT), | ||||
|     ENDER_DRAGON("entity.enderdragon.hurt", null, "entity.enderdragon.death", "entity.enderdragon.ambient", | ||||
|             "entity.player.small_fall", "entity.enderdragon.flap", "entity.player.big_fall"), | ||||
|  | ||||
|     ENDER_DRAGON(Sound.ENTITY_ENDERDRAGON_HURT, null, Sound.ENTITY_ENDERDRAGON_DEATH, Sound.ENTITY_ENDERDRAGON_AMBIENT, | ||||
|             Sound.ENTITY_PLAYER_SMALL_FALL, Sound.ENTITY_ENDERDRAGON_FLAP, Sound.ENTITY_PLAYER_BIG_FALL), | ||||
|     ENDERMAN("entity.endermen.hurt", "block.grass.step", "entity.endermen.death", "entity.endermen.ambient", | ||||
|             "entity.endermen.scream", "entity.endermen.teleport", "entity.endermen.stare"), | ||||
|  | ||||
|     ENDERMAN(Sound.ENTITY_ENDERMEN_HURT, Sound.BLOCK_GRASS_STEP, Sound.ENTITY_ENDERMEN_DEATH, | ||||
|             Sound.ENTITY_ENDERMEN_AMBIENT, Sound.ENTITY_ENDERMEN_SCREAM, Sound.ENTITY_ENDERMEN_TELEPORT, | ||||
|             Sound.ENTITY_ENDERMEN_STARE), | ||||
|     ENDERMITE("entity.silverfish.hurt", "entity.endermite.step", "entity.endermite.death", "entity.endermite.ambient"), | ||||
|  | ||||
|     ENDERMITE(Sound.ENTITY_SILVERFISH_HURT, Sound.ENTITY_ENDERMITE_STEP, Sound.ENTITY_ENDERMITE_DEATH, | ||||
|             Sound.ENTITY_ENDERMITE_AMBIENT), | ||||
|     EVOKER("entity.evocation_illager.hurt", null, "entity.evocation_illager.death", "entity.evocation_illager.ambient", | ||||
|             "entity.evocation_illager.cast_spell", "entity.evocation_illager.prepare_attack", | ||||
|             "entity.evocation_illager.prepare_summon", "entity.evocation_illager.prepare_wololo"), | ||||
|  | ||||
|     EVOKER(Sound.ENTITY_EVOCATION_ILLAGER_HURT, null, Sound.ENTITY_EVOCATION_ILLAGER_DEATH, | ||||
|             Sound.ENTITY_EVOCATION_ILLAGER_AMBIENT, Sound.ENTITY_EVOCATION_ILLAGER_CAST_SPELL, | ||||
|             Sound.ENTITY_EVOCATION_ILLAGER_PREPARE_ATTACK, Sound.ENTITY_EVOCATION_ILLAGER_PREPARE_SUMMON, | ||||
|             Sound.ENTITY_EVOCATION_ILLAGER_PREPARE_WOLOLO), | ||||
|     EVOKER_FANGS(null, null, null, null, "entity.evocation_fangs.attack"), | ||||
|  | ||||
|     EVOKER_FANGS(null, null, null, null, Sound.ENTITY_EVOCATION_FANGS_ATTACK), | ||||
|     GHAST("entity.ghast.hurt", null, "entity.ghast.death", "entity.ghast.ambient", "entity.player.small_fall", | ||||
|             "entity.ghast.shoot", "entity.player.big_fall", "entity.ghast.scream", "entity.ghast.warn"), | ||||
|  | ||||
|     GHAST(Sound.ENTITY_GHAST_HURT, null, Sound.ENTITY_GHAST_DEATH, Sound.ENTITY_GHAST_AMBIENT, | ||||
|             Sound.ENTITY_PLAYER_SMALL_FALL, Sound.ENTITY_GHAST_SHOOT, Sound.ENTITY_PLAYER_BIG_FALL, | ||||
|             Sound.ENTITY_GHAST_SCREAM, Sound.ENTITY_GHAST_WARN), | ||||
|     GIANT("entity.player.hurt", "block.grass.step", null, null), | ||||
|  | ||||
|     GIANT(Sound.ENTITY_PLAYER_HURT, Sound.BLOCK_GRASS_STEP, null, null), | ||||
|     GUARDIAN("entity.guardian.hurt", null, "entity.guardian.death", "entity.elder_guardian.ambient"), | ||||
|  | ||||
|     GUARDIAN(Sound.ENTITY_GUARDIAN_HURT, null, Sound.ENTITY_GUARDIAN_DEATH, Sound.ENTITY_ELDER_GUARDIAN_AMBIENT), | ||||
|  | ||||
|     HORSE(Sound.ENTITY_HORSE_HURT, Sound.BLOCK_GRASS_STEP, Sound.ENTITY_HORSE_DEATH, Sound.ENTITY_HORSE_AMBIENT, | ||||
|             Sound.ENTITY_HORSE_GALLOP, Sound.ENTITY_HORSE_SADDLE, Sound.ENTITY_DONKEY_ANGRY, | ||||
|             Sound.ENTITY_HORSE_STEP_WOOD, Sound.ENTITY_HORSE_ARMOR, Sound.ENTITY_HORSE_LAND, Sound.ENTITY_HORSE_JUMP, | ||||
|             Sound.ENTITY_HORSE_ANGRY), | ||||
|     HORSE("entity.horse.hurt", "block.grass.step", "entity.horse.death", "entity.horse.ambient", "entity.horse.gallop", | ||||
|             "entity.horse.saddle", "entity.donkey.angry", "entity.horse.step_wood", "entity.horse.armor", | ||||
|             "entity.horse.land", "entity.horse.jump", "entity.horse.angry"), | ||||
|  | ||||
|     ILLUSIONER("entity.illusion_illager.hurt", null, "entity.illusion_illager.death", "entity.illusion_illager.ambient", | ||||
|             "entity.illusion_illager.cast_spell", "entity.illusion_illager" + ".prepare_blindness", | ||||
|             "entity.illusion_illager.cast_spell", "entity.illusion_illager.prepare_blindness", | ||||
|             "entity.illusion_illager.prepare_mirror", "entity.illusion_illager.mirror_move"), | ||||
|  | ||||
|     IRON_GOLEM(Sound.ENTITY_IRONGOLEM_HURT, Sound.ENTITY_IRONGOLEM_STEP, Sound.ENTITY_IRONGOLEM_DEATH, | ||||
|             Sound.ENTITY_IRONGOLEM_ATTACK), | ||||
|     IRON_GOLEM("entity.irongolem.hurt", "entity.irongolem.step", "entity.irongolem.death", "entity.irongolem.attack"), | ||||
|  | ||||
|     LLAMA(Sound.ENTITY_LLAMA_HURT, Sound.ENTITY_LLAMA_STEP, Sound.ENTITY_LLAMA_DEATH, Sound.ENTITY_LLAMA_AMBIENT, | ||||
|             Sound.ENTITY_LLAMA_ANGRY, Sound.ENTITY_LLAMA_CHEST, Sound.ENTITY_LLAMA_EAT, Sound.ENTITY_LLAMA_SWAG), | ||||
|     LLAMA("entity.llama.hurt", "entity.llama.step", "entity.llama.death", "entity.llama.ambient", "entity.llama.angry", | ||||
|             "entity.llama.chest", "entity.llama.eat", "entity.llama.swag"), | ||||
|  | ||||
|     MAGMA_CUBE(Sound.ENTITY_MAGMACUBE_HURT, Sound.ENTITY_MAGMACUBE_JUMP, null, null), | ||||
|     MAGMA_CUBE("entity.magmacube.hurt", "entity.magmacube.jump", null, null), | ||||
|  | ||||
|     MULE(Sound.ENTITY_MULE_HURT, Sound.BLOCK_GRASS_STEP, Sound.ENTITY_MULE_DEATH, Sound.ENTITY_MULE_AMBIENT), | ||||
|     MULE("entity.mule.hurt", "block.grass.step", "entity.mule.death", "entity.mule.ambient"), | ||||
|  | ||||
|     MUSHROOM_COW(Sound.ENTITY_COW_HURT, Sound.ENTITY_COW_STEP, Sound.ENTITY_COW_HURT, Sound.ENTITY_COW_AMBIENT), | ||||
|     MUSHROOM_COW("entity.cow.hurt", "entity.cow.step", "entity.cow.hurt", "entity.cow.ambient"), | ||||
|  | ||||
|     OCELOT(Sound.ENTITY_CAT_HURT, Sound.BLOCK_GRASS_STEP, Sound.ENTITY_CAT_HURT, Sound.ENTITY_CAT_AMBIENT, | ||||
|             Sound.ENTITY_CAT_PURR, Sound.ENTITY_CAT_PURREOW), | ||||
|     OCELOT("entity.cat.hurt", "block.grass.step", "entity.cat.hurt", "entity.cat.ambient", "entity.cat.purr", | ||||
|             "entity.cat.purreow"), | ||||
|  | ||||
|     PARROT("entity.parrot.hurt", "entity.parrot.step", "entity.parrot.death", "entity.parrot.ambient", | ||||
|             "entity.parrot.eat", "entity.parrot.fly", "entity.parrot.imitate.blaze", "entity.parrot.imitate.creeper", | ||||
| @@ -101,81 +89,77 @@ public enum DisguiseSound { | ||||
|             "entity.parrot.imitate.wolf", "entity.parrot.imitate.zombie", "entity.parrot.imitate.zombie_pigman", | ||||
|             "entity.parrot.imitate.zombie_villager"), | ||||
|  | ||||
|     PIG(Sound.ENTITY_PIG_HURT, Sound.ENTITY_PIG_STEP, Sound.ENTITY_PIG_DEATH, Sound.ENTITY_PIG_AMBIENT), | ||||
|     PIG("entity.pig.hurt", "entity.pig.step", "entity.pig.death", "entity.pig.ambient"), | ||||
|  | ||||
|     PIG_ZOMBIE(Sound.ENTITY_ZOMBIE_PIG_HURT, null, Sound.ENTITY_ZOMBIE_PIG_DEATH, Sound.ENTITY_ZOMBIE_PIG_AMBIENT, | ||||
|             Sound.ENTITY_ZOMBIE_PIG_ANGRY), | ||||
|     PIG_ZOMBIE("entity.zombie_pig.hurt", null, "entity.zombie_pig.death", "entity.zombie_pig.ambient", | ||||
|             "entity.zombie_pig.angry"), | ||||
|  | ||||
|     PLAYER(Sound.ENTITY_PLAYER_HURT, | ||||
|             new Sound[]{Sound.BLOCK_STONE_STEP, Sound.BLOCK_GRASS_STEP, Sound.BLOCK_ANVIL_STEP, Sound.BLOCK_CLOTH_STEP, | ||||
|                     Sound.BLOCK_GLASS_STEP, Sound.BLOCK_GRAVEL_STEP, Sound.BLOCK_LADDER_STEP, Sound.BLOCK_METAL_STEP, | ||||
|                     Sound.BLOCK_SAND_STEP, Sound.BLOCK_SLIME_STEP, Sound.BLOCK_SNOW_STEP, Sound.BLOCK_WOOD_STEP}, | ||||
|             Sound.ENTITY_PLAYER_DEATH, null), | ||||
|     PLAYER("entity.player.hurt", "block.stone.step", "block.grass.step", "block.anvil.step", "block.cloth.step", | ||||
|             "block.glass.step", "block.gravel.step", "block.ladder.step", "block.metal.step", "block.sand.step", | ||||
|             "block.slime.step", "block.snow.step", "block.wood.step", "entity.player.death", null), | ||||
|  | ||||
|     RABBIT(Sound.ENTITY_RABBIT_HURT, Sound.ENTITY_RABBIT_JUMP, Sound.ENTITY_RABBIT_DEATH, Sound.ENTITY_RABBIT_AMBIENT), | ||||
|     RABBIT("entity.rabbit.hurt", "entity.rabbit.jump", "entity.rabbit.death", "entity.rabbit.ambient"), | ||||
|  | ||||
|     SHEEP(Sound.ENTITY_SHEEP_HURT, Sound.ENTITY_SHEEP_STEP, null, Sound.ENTITY_SHEEP_AMBIENT, Sound.ENTITY_SHEEP_SHEAR), | ||||
|     SHEEP("entity.sheep.hurt", "entity.sheep.step", null, "entity.sheep.ambient", "entity.sheep.shear"), | ||||
|  | ||||
|     SHULKER(Sound.ENTITY_SHULKER_HURT, null, Sound.ENTITY_SHULKER_DEATH, Sound.ENTITY_SHULKER_AMBIENT, | ||||
|             Sound.ENTITY_SHULKER_OPEN, Sound.ENTITY_SHULKER_CLOSE, Sound.ENTITY_SHULKER_HURT_CLOSED, | ||||
|             Sound.ENTITY_SHULKER_TELEPORT), | ||||
|     SHULKER("entity.shulker.hurt", null, "entity.shulker.death", "entity.shulker.ambient", "entity.shulker.open", | ||||
|             "entity.shulker.close", "entity.shulker.hurt_closed", "entity.shulker.teleport"), | ||||
|  | ||||
|     SILVERFISH(Sound.ENTITY_SILVERFISH_HURT, Sound.ENTITY_SILVERFISH_STEP, Sound.ENTITY_SILVERFISH_DEATH, | ||||
|             Sound.ENTITY_SILVERFISH_AMBIENT), | ||||
|     SILVERFISH("entity.silverfish.hurt", "entity.silverfish.step", "entity.silverfish.death", | ||||
|             "entity.silverfish.ambient"), | ||||
|  | ||||
|     SKELETON(Sound.ENTITY_SKELETON_HURT, Sound.ENTITY_SKELETON_STEP, Sound.ENTITY_SKELETON_DEATH, | ||||
|             Sound.ENTITY_SKELETON_AMBIENT), | ||||
|     SKELETON("entity.skeleton.hurt", "entity.skeleton.step", "entity.skeleton.death", "entity.skeleton.ambient"), | ||||
|  | ||||
|     SKELETON_HORSE(Sound.ENTITY_SKELETON_HORSE_HURT, Sound.BLOCK_GRASS_STEP, Sound.ENTITY_SKELETON_HORSE_DEATH, | ||||
|             Sound.ENTITY_SKELETON_HORSE_AMBIENT, Sound.ENTITY_HORSE_GALLOP, Sound.ENTITY_HORSE_SADDLE, | ||||
|             Sound.ENTITY_DONKEY_ANGRY, Sound.ENTITY_HORSE_STEP_WOOD, Sound.ENTITY_HORSE_ARMOR, Sound.ENTITY_HORSE_LAND, | ||||
|             Sound.ENTITY_HORSE_JUMP, Sound.ENTITY_HORSE_ANGRY), | ||||
|     SKELETON_HORSE("entity.skeleton_horse.hurt", "block.grass.step", "entity.skeleton_horse.death", | ||||
|             "entity.skeleton_horse.ambient", "entity.horse.gallop", "entity.horse.saddle", "entity.donkey.angry", | ||||
|             "entity.horse.step_wood", "entity.horse.armor", "entity.horse.land", "entity.horse.jump", | ||||
|             "entity.horse.angry"), | ||||
|  | ||||
|     SLIME(Sound.ENTITY_SLIME_HURT, Sound.ENTITY_SLIME_JUMP, Sound.ENTITY_SLIME_DEATH, null), | ||||
|     SLIME("entity.slime.hurt", "entity.slime.jump", "entity.slime.death", null), | ||||
|  | ||||
|     SNOWMAN(Sound.ENTITY_SNOWMAN_HURT, null, Sound.ENTITY_SNOWMAN_DEATH, Sound.ENTITY_SNOWMAN_AMBIENT, | ||||
|             Sound.ENTITY_SNOWMAN_SHOOT), | ||||
|     SNOWMAN("entity.snowman.hurt", null, "entity.snowman.death", "entity.snowman.ambient", "entity.snowman.shoot"), | ||||
|  | ||||
|     SPIDER(Sound.ENTITY_SPIDER_AMBIENT, Sound.ENTITY_SPIDER_STEP, Sound.ENTITY_SPIDER_DEATH, | ||||
|             Sound.ENTITY_SPIDER_AMBIENT), | ||||
|     SPIDER("entity.spider.ambient", "entity.spider.step", "entity.spider.death", "entity.spider.ambient"), | ||||
|  | ||||
|     SQUID(Sound.ENTITY_SQUID_HURT, null, Sound.ENTITY_SQUID_DEATH, Sound.ENTITY_SQUID_AMBIENT), | ||||
|     SQUID("entity.squid.hurt", null, "entity.squid.death", "entity.squid.ambient"), | ||||
|  | ||||
|     UNDEAD_HORSE(Sound.ENTITY_ZOMBIE_HORSE_HURT, Sound.BLOCK_GRASS_STEP, Sound.ENTITY_ZOMBIE_HORSE_DEATH, | ||||
|             Sound.ENTITY_ZOMBIE_HORSE_AMBIENT, Sound.ENTITY_HORSE_GALLOP, Sound.ENTITY_HORSE_SADDLE, | ||||
|             Sound.ENTITY_DONKEY_ANGRY, Sound.ENTITY_HORSE_STEP_WOOD, Sound.ENTITY_HORSE_ARMOR, Sound.ENTITY_HORSE_LAND, | ||||
|             Sound.ENTITY_HORSE_JUMP, Sound.ENTITY_HORSE_ANGRY), | ||||
|     UNDEAD_HORSE("entity.zombie_horse.hurt", "block.grass.step", "entity.zombie_horse.death", | ||||
|             "entity.zombie_horse.ambient", "entity.horse.gallop", "entity.horse.saddle", "entity.donkey.angry", | ||||
|             "entity.horse.step_wood", "entity.horse.armor", "entity.horse.land", "entity.horse.jump", | ||||
|             "entity.horse.angry"), | ||||
|  | ||||
|     VEX(Sound.ENTITY_VEX_HURT, null, Sound.ENTITY_VEX_DEATH, Sound.ENTITY_VEX_AMBIENT, Sound.ENTITY_VEX_CHARGE), | ||||
|     VEX("entity.vex.hurt", null, "entity.vex.death", "entity.vex.ambient", "entity.vex.charge"), | ||||
|  | ||||
|     VILLAGER(Sound.ENTITY_VILLAGER_HURT, null, Sound.ENTITY_VILLAGER_DEATH, Sound.ENTITY_VILLAGER_AMBIENT, | ||||
|             Sound.ENTITY_VILLAGER_TRADING, Sound.ENTITY_VILLAGER_NO, Sound.ENTITY_VILLAGER_YES), | ||||
|     VILLAGER("entity.villager.hurt", null, "entity.villager.death", "entity.villager.ambient", | ||||
|             "entity.villager.trading", "entity.villager.no", "entity.villager.yes"), | ||||
|  | ||||
|     VINDICATOR(Sound.ENTITY_VINDICATION_ILLAGER_HURT, null, Sound.ENTITY_VINDICATION_ILLAGER_DEATH, | ||||
|             Sound.ENTITY_VINDICATION_ILLAGER_AMBIENT), | ||||
|     VINDICATOR("entity.vindication_illager.hurt", null, "entity.vindication_illager.death", | ||||
|             "entity.vindication_illager.ambient"), | ||||
|  | ||||
|     WITCH(Sound.ENTITY_WITCH_HURT, null, Sound.ENTITY_WITCH_DEATH, Sound.ENTITY_WITCH_AMBIENT), | ||||
|     WITCH("entity.witch.hurt", null, "entity.witch.death", "entity.witch.ambient"), | ||||
|  | ||||
|     WITHER(Sound.ENTITY_WITHER_HURT, null, Sound.ENTITY_WITHER_DEATH, Sound.ENTITY_WITHER_AMBIENT, | ||||
|             Sound.ENTITY_PLAYER_SMALL_FALL, Sound.ENTITY_WITHER_SPAWN, Sound.ENTITY_PLAYER_BIG_FALL, | ||||
|             Sound.ENTITY_WITHER_SHOOT), | ||||
|     WITHER("entity.wither.hurt", null, "entity.wither.death", "entity.wither.ambient", "entity.player.small_fall", | ||||
|             "entity.wither.spawn", "entity.player.big_fall", "entity.wither.shoot"), | ||||
|  | ||||
|     WITHER_SKELETON(Sound.ENTITY_SKELETON_HURT, Sound.ENTITY_SKELETON_STEP, Sound.ENTITY_SKELETON_DEATH, | ||||
|             Sound.ENTITY_SKELETON_AMBIENT), | ||||
|     WITHER_SKELETON("entity.skeleton.hurt", "entity.skeleton.step", "entity.skeleton.death", "entity.skeleton.ambient"), | ||||
|  | ||||
|     WOLF(Sound.ENTITY_WOLF_HURT, Sound.ENTITY_WOLF_STEP, Sound.ENTITY_WOLF_DEATH, Sound.ENTITY_WOLF_AMBIENT, | ||||
|             Sound.ENTITY_WOLF_GROWL, Sound.ENTITY_WOLF_PANT, Sound.ENTITY_WOLF_HOWL, Sound.ENTITY_WOLF_SHAKE, | ||||
|             Sound.ENTITY_WOLF_WHINE), | ||||
|     WOLF("entity.wolf.hurt", "entity.wolf.step", "entity.wolf.death", "entity.wolf.ambient", "entity.wolf.growl", | ||||
|             "entity.wolf.pant", "entity.wolf.howl", "entity.wolf.shake", "entity.wolf.whine"), | ||||
|  | ||||
|     ZOMBIE(Sound.ENTITY_ZOMBIE_HURT, Sound.ENTITY_ZOMBIE_STEP, Sound.ENTITY_ZOMBIE_DEATH, Sound.ENTITY_ZOMBIE_AMBIENT, | ||||
|             Sound.ENTITY_ZOMBIE_INFECT, Sound.ENTITY_ZOMBIE_BREAK_DOOR_WOOD, Sound.ENTITY_ZOMBIE_ATTACK_DOOR_WOOD, | ||||
|             Sound.ENTITY_ZOMBIE_ATTACK_IRON_DOOR), ZOMBIE_VILLAGER(Sound.ENTITY_ZOMBIE_VILLAGER_HURT, | ||||
|             Sound.ENTITY_ZOMBIE_VILLAGER_STEP, Sound.ENTITY_ZOMBIE_VILLAGER_DEATH, Sound.ENTITY_ZOMBIE_VILLAGER_AMBIENT, | ||||
|             Sound.ENTITY_ZOMBIE_INFECT, Sound.ENTITY_ZOMBIE_BREAK_DOOR_WOOD, Sound.ENTITY_ZOMBIE_ATTACK_DOOR_WOOD, | ||||
|             Sound.ENTITY_ZOMBIE_ATTACK_IRON_DOOR); | ||||
|     ZOMBIE("entity.zombie.hurt", "entity.zombie.step", "entity.zombie.death", "entity.zombie.ambient", | ||||
|             "entity.zombie.infect", "entity.zombie.break_door_wood", "entity.zombie.attack_door_wood", | ||||
|             "entity.zombie.attack_iron_door"), | ||||
|  | ||||
|     ZOMBIE_VILLAGER("entity.zombie_villager.hurt", "entity.zombie_villager.step", "entity.zombie_villager.death", | ||||
|             "entity.zombie_villager.ambient", "entity.zombie.infect", "entity.zombie.break_door_wood", | ||||
|             "entity.zombie.attack_door_wood", "entity.zombie.attack_iron_door"); | ||||
|  | ||||
|     public enum SoundType { | ||||
|         CANCEL, DEATH, HURT, IDLE, STEP | ||||
|         CANCEL, | ||||
|         DEATH, | ||||
|         HURT, | ||||
|         IDLE, | ||||
|         STEP | ||||
|     } | ||||
|  | ||||
|     public static DisguiseSound getType(String name) { | ||||
| @@ -308,8 +292,8 @@ public enum DisguiseSound { | ||||
|         }*/ | ||||
|  | ||||
|         for (SoundType type : SoundType.values()) { | ||||
|             if (!disguiseSounds.containsKey( | ||||
|                     type) || type == SoundType.DEATH || (ignoreDamage && type == SoundType.HURT)) { | ||||
|             if (!disguiseSounds | ||||
|                     .containsKey(type) || type == SoundType.DEATH || (ignoreDamage && type == SoundType.HURT)) { | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
|   | ||||
| @@ -920,8 +920,8 @@ public class DisguiseUtilities { | ||||
|         try { | ||||
|             PacketContainer destroyPacket = getDestroyPacket(disguise.getEntity().getEntityId()); | ||||
|  | ||||
|             if (disguise.isDisguiseInUse() && disguise.getEntity() instanceof Player && disguise.getEntity().getName() | ||||
|                     .equalsIgnoreCase(player)) { | ||||
|             if (disguise.isDisguiseInUse() && disguise.getEntity() instanceof Player && ((Player) disguise.getEntity()) | ||||
|                     .getName().equalsIgnoreCase(player)) { | ||||
|                 removeSelfDisguise((Player) disguise.getEntity()); | ||||
|  | ||||
|                 if (disguise.isSelfDisguiseVisible()) { | ||||
| @@ -1178,7 +1178,15 @@ public class DisguiseUtilities { | ||||
|             // Code to stop player pushing | ||||
|             Scoreboard scoreboard = player.getScoreboard(); | ||||
|             Team team = originalTeam == null ? null : scoreboard.getTeam(originalTeam); | ||||
|             Team ldTeam = scoreboard.getEntryTeam(player.getName()); | ||||
|             Team ldTeam = null; | ||||
|  | ||||
|             for (Team t : scoreboard.getTeams()) { | ||||
|                 if (!t.hasEntry(player.getName())) | ||||
|                     continue; | ||||
|  | ||||
|                 ldTeam = t; | ||||
|                 break; | ||||
|             } | ||||
|  | ||||
|             if (ldTeam != null) { | ||||
|                 if (!ldTeam.getName().equals("LD Pushing") && !ldTeam.getName().endsWith("_LDP")) { | ||||
| @@ -1276,10 +1284,18 @@ public class DisguiseUtilities { | ||||
|             if (pOption != DisguisePushing.IGNORE_SCOREBOARD) { | ||||
|                 // Code to stop player pushing | ||||
|                 Scoreboard scoreboard = player.getScoreboard(); | ||||
|                 Team prevTeam = scoreboard.getEntryTeam(player.getName()); | ||||
|                 Team prevTeam = null; | ||||
|                 Team ldTeam = null; | ||||
|                 String ldTeamName = "LD Pushing"; | ||||
|  | ||||
|                 for (Team t : scoreboard.getTeams()) { | ||||
|                     if (!t.hasEntry(player.getName())) | ||||
|                         continue; | ||||
|  | ||||
|                     prevTeam = t; | ||||
|                     break; | ||||
|                 } | ||||
|  | ||||
|                 // If the player is in a team already | ||||
|                 if (prevTeam != null && !(prevTeam.getName().equals("LD Pushing") || prevTeam.getName() | ||||
|                         .endsWith("_LDP"))) { | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| package me.libraryaddict.disguise.utilities; | ||||
|  | ||||
| import com.comphenix.protocol.wrappers.BlockPosition; | ||||
| import com.mojang.authlib.GameProfile; | ||||
| import com.comphenix.protocol.wrappers.WrappedGameProfile; | ||||
| import me.libraryaddict.disguise.disguisetypes.*; | ||||
| import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm; | ||||
| import org.apache.commons.lang.StringUtils; | ||||
| @@ -10,7 +10,6 @@ import org.bukkit.Material; | ||||
| import org.bukkit.TreeSpecies; | ||||
| import org.bukkit.block.BlockFace; | ||||
| import org.bukkit.entity.Horse; | ||||
| import org.bukkit.entity.Llama; | ||||
| import org.bukkit.entity.Ocelot; | ||||
| import org.bukkit.entity.Villager; | ||||
| import org.bukkit.inventory.ItemStack; | ||||
| @@ -143,19 +142,32 @@ public class ReflectionFlagWatchers { | ||||
|         new ParamInfo(AnimalColor.class, "Animal Color", "View all the colors you can use for an animal color"); | ||||
|         new ParamInfo(Art.class, "Art", "View all the paintings you can use for a painting disguise"); | ||||
|  | ||||
|         new ParamInfo(Llama.Color.class, "Llama Color", "View all the colors you can use for a llama color"); | ||||
|         try { | ||||
|             new ParamInfo("org.bukkit.entity.Llama.Color", "Llama Color", | ||||
|                     "View all the colors you can use for a llama color"); | ||||
|         } | ||||
|         catch (Exception ex) { | ||||
|         } | ||||
|  | ||||
|         new ParamInfo(Horse.Color.class, "Horse Color", "View all the colors you can use for a horses color"); | ||||
|  | ||||
|         new ParamInfo(Ocelot.Type.class, "Ocelot Type", "View all the ocelot types you can use for ocelots"); | ||||
|         new ParamInfo(Villager.Profession.class, "Villager Profession", | ||||
|                 "View all the professions you can set on a villager"); | ||||
|         new ParamInfo(BlockFace.class, Arrays.copyOf(BlockFace.values(), 6), "Direction (North, East, South, West, " + | ||||
|                 "Up, Down)", | ||||
|                 "View the four directions usable on player setSleeping disguise"); | ||||
|         new ParamInfo(BlockFace.class, Arrays.copyOf(BlockFace.values(), 6), | ||||
|                 "Direction (North, East, South, West, " + "Up, Down)", | ||||
|                 "View the directions usable on player setSleeping and shulker direction"); | ||||
|         new ParamInfo(RabbitType.class, "Rabbit Type", "View the kinds of rabbits you can turn into"); | ||||
|         new ParamInfo(TreeSpecies.class, "Tree Species", "View the different types of tree species"); | ||||
|  | ||||
|         try { | ||||
|             new ParamInfo("org.bukkit.inventory.MainHand", "Main Hand", "Set the main hand for an entity"); | ||||
|             new ParamInfo("org.bukkit.entity.Llama.Color", "Llama Color", | ||||
|                     "View all the colors you can use for a llama color"); | ||||
|         } | ||||
|         catch (Exception ex) { | ||||
|         } | ||||
|  | ||||
|         try { | ||||
|             new ParamInfo("org.bukkit.entity.Parrot$Variant", "Parrot Variant", | ||||
|                     "View the different colors a parrot can be"); | ||||
| @@ -178,11 +190,11 @@ public class ReflectionFlagWatchers { | ||||
|             materials[i] = Material.values()[i].name(); | ||||
|         } | ||||
|  | ||||
|         new ParamInfo(ItemStack.class, "Item (id:damage), damage optional", "An ItemStack compromised of " + | ||||
|                 "ID:Durability", materials); | ||||
|         new ParamInfo(ItemStack.class, "Item (id:damage), damage optional", | ||||
|                 "An ItemStack compromised of " + "ID:Durability", materials); | ||||
|  | ||||
|         new ParamInfo(ItemStack[].class, "Four ItemStacks (id:damage,id:damage..), damage optional", "Four ItemStacks separated by an ,", | ||||
|                 materials) { | ||||
|         new ParamInfo(ItemStack[].class, "Four ItemStacks (id:damage,id:damage..), damage optional", | ||||
|                 "Four ItemStacks separated by an ,", materials) { | ||||
|             @Override | ||||
|             public String[] getEnums(String tabComplete) { | ||||
|                 String beginning = tabComplete | ||||
| @@ -214,7 +226,7 @@ public class ReflectionFlagWatchers { | ||||
|         new ParamInfo(int[].class, "number,number,number..", "Numbers separated by an ,"); | ||||
|  | ||||
|         new ParamInfo(BlockPosition.class, "Block Position (num,num,num)", "Three numbers separated by a ,"); | ||||
|         new ParamInfo(GameProfile.class, "GameProfile", | ||||
|         new ParamInfo(WrappedGameProfile.class, "GameProfile", | ||||
|                 "Get the gameprofile here https://sessionserver.mojang.com/session/minecraft/profile/PLAYER_UUID_GOES_HERE?unsigned=false"); | ||||
|  | ||||
|         Collections.sort(paramList, new Comparator<ParamInfo>() { | ||||
|   | ||||
| @@ -5,15 +5,12 @@ import com.comphenix.protocol.wrappers.EnumWrappers.Direction; | ||||
| import com.comphenix.protocol.wrappers.WrappedDataWatcher.Registry; | ||||
| import com.comphenix.protocol.wrappers.WrappedDataWatcher.Serializer; | ||||
| import com.comphenix.protocol.wrappers.WrappedDataWatcher.WrappedDataWatcherObject; | ||||
| import com.comphenix.protocol.wrappers.nbt.NbtBase; | ||||
| import com.comphenix.protocol.wrappers.nbt.NbtCompound; | ||||
| import com.comphenix.protocol.wrappers.nbt.NbtFactory; | ||||
| import com.comphenix.protocol.wrappers.nbt.NbtWrapper; | ||||
| import com.google.common.base.Optional; | ||||
| import com.google.gson.Gson; | ||||
| import me.libraryaddict.disguise.disguisetypes.DisguiseType; | ||||
| import org.apache.commons.lang3.tuple.ImmutablePair; | ||||
| import org.apache.commons.lang3.tuple.Pair; | ||||
| import org.bukkit.*; | ||||
| import org.bukkit.entity.*; | ||||
| import org.bukkit.inventory.EquipmentSlot; | ||||
| @@ -41,8 +38,8 @@ public class ReflectionManager { | ||||
|     static { | ||||
|         for (Method method : getNmsClass("EntityLiving").getDeclaredMethods()) { | ||||
|             try { | ||||
|                 if (method.getReturnType() == float.class && Modifier.isProtected( | ||||
|                         method.getModifiers()) && method.getParameterTypes().length == 0) { | ||||
|                 if (method.getReturnType() == float.class && Modifier.isProtected(method.getModifiers()) && method | ||||
|                         .getParameterTypes().length == 0) { | ||||
|                     Object entity = createEntityInstance("Cow"); | ||||
|  | ||||
|                     method.setAccessible(true); | ||||
| @@ -85,9 +82,8 @@ public class ReflectionManager { | ||||
|         String id = (String) response.get("id"); | ||||
|  | ||||
|         if (!id.contains("-")) { | ||||
|             id = Pattern.compile( | ||||
|                     "([0-9a-fA-F]{8})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]+)").matcher( | ||||
|                     id).replaceFirst("$1-$2-$3-$4-$5"); | ||||
|             id = Pattern.compile("([0-9a-fA-F]{8})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]+)") | ||||
|                     .matcher(id).replaceFirst("$1-$2-$3-$4-$5"); | ||||
|         } | ||||
|  | ||||
|         WrappedGameProfile gameProfile = new WrappedGameProfile(UUID.fromString(id), (String) response.get("name")); | ||||
| @@ -117,28 +113,29 @@ public class ReflectionManager { | ||||
|                 case "Player": | ||||
|                     Object minecraftServer = getNmsMethod("MinecraftServer", "getServer").invoke(null); | ||||
|  | ||||
|                     Object playerinteractmanager = getNmsClass("PlayerInteractManager").getDeclaredConstructor( | ||||
|                             getNmsClass("World")).newInstance(world); | ||||
|                     Object playerinteractmanager = getNmsClass("PlayerInteractManager") | ||||
|                             .getDeclaredConstructor(getNmsClass("World")).newInstance(world); | ||||
|  | ||||
|                     WrappedGameProfile gameProfile = getGameProfile(new UUID(0, 0), "Steve"); | ||||
|  | ||||
|                     entityObject = entityClass.getDeclaredConstructor(getNmsClass("MinecraftServer"), | ||||
|                             getNmsClass("WorldServer"), gameProfile.getHandleType(), | ||||
|                             playerinteractmanager.getClass()).newInstance(minecraftServer, world, | ||||
|                             gameProfile.getHandle(), playerinteractmanager); | ||||
|                     entityObject = entityClass | ||||
|                             .getDeclaredConstructor(getNmsClass("MinecraftServer"), getNmsClass("WorldServer"), | ||||
|                                     gameProfile.getHandleType(), playerinteractmanager.getClass()) | ||||
|                             .newInstance(minecraftServer, world, gameProfile.getHandle(), playerinteractmanager); | ||||
|                     break; | ||||
|                 case "EnderPearl": | ||||
|                     entityObject = entityClass.getDeclaredConstructor(getNmsClass("World"), | ||||
|                             getNmsClass("EntityLiving")).newInstance(world, createEntityInstance("Cow")); | ||||
|                     entityObject = entityClass.getDeclaredConstructor(getNmsClass("World"), getNmsClass("EntityLiving")) | ||||
|                             .newInstance(world, createEntityInstance("Cow")); | ||||
|                     break; | ||||
|                 case "Potion": | ||||
|                     entityObject = entityClass.getDeclaredConstructor(getNmsClass("World"), Double.TYPE, Double.TYPE, | ||||
|                             Double.TYPE, getNmsClass("ItemStack")).newInstance(world, 0d, 0d, 0d, | ||||
|                             getNmsItem(new ItemStack(Material.SPLASH_POTION))); | ||||
|                     entityObject = entityClass | ||||
|                             .getDeclaredConstructor(getNmsClass("World"), Double.TYPE, Double.TYPE, Double.TYPE, | ||||
|                                     getNmsClass("ItemStack")) | ||||
|                             .newInstance(world, 0d, 0d, 0d, getNmsItem(new ItemStack(Material.SPLASH_POTION))); | ||||
|                     break; | ||||
|                 case "FishingHook": | ||||
|                     entityObject = entityClass.getDeclaredConstructor(getNmsClass("World"), | ||||
|                             getNmsClass("EntityHuman")).newInstance(world, createEntityInstance("Player")); | ||||
|                     entityObject = entityClass.getDeclaredConstructor(getNmsClass("World"), getNmsClass("EntityHuman")) | ||||
|                             .newInstance(world, createEntityInstance("Player")); | ||||
|                     break; | ||||
|                 default: | ||||
|                     entityObject = entityClass.getDeclaredConstructor(getNmsClass("World")).newInstance(world); | ||||
| @@ -174,9 +171,10 @@ public class ReflectionManager { | ||||
|  | ||||
|     public static Object createMobEffect(int id, int duration, int amplification, boolean ambient, boolean particles) { | ||||
|         try { | ||||
|             return getNmsClass("MobEffect").getDeclaredConstructor(getNmsClass("MobEffectList"), Integer.TYPE, | ||||
|                     Integer.TYPE, Boolean.TYPE, Boolean.TYPE).newInstance(getMobEffectList(id), duration, amplification, | ||||
|                     ambient, particles); | ||||
|             return getNmsClass("MobEffect") | ||||
|                     .getDeclaredConstructor(getNmsClass("MobEffectList"), Integer.TYPE, Integer.TYPE, Boolean.TYPE, | ||||
|                             Boolean.TYPE) | ||||
|                     .newInstance(getMobEffectList(id), duration, amplification, ambient, particles); | ||||
|         } | ||||
|         catch (Exception e) { | ||||
|             e.printStackTrace(); | ||||
| @@ -331,8 +329,8 @@ public class ReflectionManager { | ||||
|  | ||||
|     public static Object getBlockPosition(int x, int y, int z) { | ||||
|         try { | ||||
|             return getNmsClass("BlockPosition").getDeclaredConstructor(int.class, int.class, int.class).newInstance(x, | ||||
|                     y, z); | ||||
|             return getNmsClass("BlockPosition").getDeclaredConstructor(int.class, int.class, int.class) | ||||
|                     .newInstance(x, y, z); | ||||
|         } | ||||
|         catch (Exception ex) { | ||||
|             ex.printStackTrace(); | ||||
| @@ -365,13 +363,14 @@ public class ReflectionManager { | ||||
|  | ||||
|     public static Object getPlayerInfoData(Object playerInfoPacket, WrappedGameProfile gameProfile) { | ||||
|         try { | ||||
|             Object playerListName = getNmsClass("ChatComponentText").getDeclaredConstructor(String.class).newInstance( | ||||
|                     gameProfile.getName()); | ||||
|             Object playerListName = getNmsClass("ChatComponentText").getDeclaredConstructor(String.class) | ||||
|                     .newInstance(gameProfile.getName()); | ||||
|  | ||||
|             return getNmsClass("PacketPlayOutPlayerInfo$PlayerInfoData").getDeclaredConstructor( | ||||
|                     getNmsClass("PacketPlayOutPlayerInfo"), gameProfile.getHandleType(), int.class, | ||||
|                     getNmsClass("EnumGamemode"), getNmsClass("IChatBaseComponent")).newInstance(playerInfoPacket, | ||||
|                     gameProfile.getHandle(), 0, getNmsClass("EnumGamemode").getEnumConstants()[1], playerListName); | ||||
|             return getNmsClass("PacketPlayOutPlayerInfo$PlayerInfoData") | ||||
|                     .getDeclaredConstructor(getNmsClass("PacketPlayOutPlayerInfo"), gameProfile.getHandleType(), | ||||
|                             int.class, getNmsClass("EnumGamemode"), getNmsClass("IChatBaseComponent")) | ||||
|                     .newInstance(playerInfoPacket, gameProfile.getHandle(), 0, | ||||
|                             getNmsClass("EnumGamemode").getEnumConstants()[1], playerListName); | ||||
|         } | ||||
|         catch (Exception ex) { | ||||
|             ex.printStackTrace(); | ||||
| @@ -555,9 +554,9 @@ public class ReflectionManager { | ||||
|                 if (method.getReturnType().getSimpleName().equals("MinecraftSessionService")) { | ||||
|                     Object session = method.invoke(minecraftServer); | ||||
|  | ||||
|                     return WrappedGameProfile.fromHandle( | ||||
|                             session.getClass().getDeclaredMethod("fillProfileProperties", gameProfile.getHandleType(), | ||||
|                                     boolean.class).invoke(session, gameProfile.getHandle(), true)); | ||||
|                     return WrappedGameProfile.fromHandle(session.getClass() | ||||
|                             .getDeclaredMethod("fillProfileProperties", gameProfile.getHandleType(), boolean.class) | ||||
|                             .invoke(session, gameProfile.getHandle(), true)); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| @@ -592,8 +591,8 @@ public class ReflectionManager { | ||||
|                     LibsProfileLookupCaller callback = new LibsProfileLookupCaller(); | ||||
|  | ||||
|                     profileRepo.getClass().getDeclaredMethod("findProfilesByNames", String[].class, agent.getClass(), | ||||
|                             Class.forName("com.mojang.authlib.ProfileLookupCallback")).invoke(profileRepo, | ||||
|                             new String[]{playername}, agent, callback); | ||||
|                             Class.forName("com.mojang.authlib.ProfileLookupCallback")) | ||||
|                             .invoke(profileRepo, new String[]{playername}, agent, callback); | ||||
|  | ||||
|                     if (callback.getGameProfile() != null) { | ||||
|                         return callback.getGameProfile(); | ||||
| @@ -614,9 +613,9 @@ public class ReflectionManager { | ||||
|         try { | ||||
|             Location loc = entity.getLocation(); | ||||
|  | ||||
|             Object boundingBox = boundingBoxConstructor.newInstance(loc.getX() - newBox.getX(), | ||||
|                     loc.getY() - newBox.getY(), loc.getZ() - newBox.getZ(), loc.getX() + newBox.getX(), | ||||
|                     loc.getY() + newBox.getY(), loc.getZ() + newBox.getZ()); | ||||
|             Object boundingBox = boundingBoxConstructor | ||||
|                     .newInstance(loc.getX() - newBox.getX(), loc.getY() - newBox.getY(), loc.getZ() - newBox.getZ(), | ||||
|                             loc.getX() + newBox.getX(), loc.getY() + newBox.getY(), loc.getZ() + newBox.getZ()); | ||||
|  | ||||
|             setBoundingBoxMethod.invoke(getNmsEntity(entity), boundingBox); | ||||
|         } | ||||
| @@ -799,9 +798,8 @@ public class ReflectionManager { | ||||
|                 BlockPosition pos = (BlockPosition) val; | ||||
|  | ||||
|                 try { | ||||
|                     return Optional.of( | ||||
|                             getNmsConstructor("BlockPosition", int.class, int.class, int.class).newInstance(pos.getX(), | ||||
|                                     pos.getY(), pos.getZ())); | ||||
|                     return Optional.of(getNmsConstructor("BlockPosition", int.class, int.class, int.class) | ||||
|                             .newInstance(pos.getX(), pos.getY(), pos.getZ())); | ||||
|                 } | ||||
|                 catch (Exception ex) { | ||||
|                     ex.printStackTrace(); | ||||
| @@ -818,16 +816,16 @@ public class ReflectionManager { | ||||
|             Vector3F angle = (Vector3F) value; | ||||
|  | ||||
|             try { | ||||
|                 return getNmsConstructor("Vector3f", float.class, float.class, float.class).newInstance(angle.getX(), | ||||
|                         angle.getY(), angle.getZ()); | ||||
|                 return getNmsConstructor("Vector3f", float.class, float.class, float.class) | ||||
|                         .newInstance(angle.getX(), angle.getY(), angle.getZ()); | ||||
|             } | ||||
|             catch (Exception ex) { | ||||
|                 ex.printStackTrace(); | ||||
|             } | ||||
|         } else if (value instanceof Direction) { | ||||
|             try { | ||||
|                 return (Enum) getNmsMethod("EnumDirection", "fromType1", int.class).invoke(null, | ||||
|                         ((Direction) value).ordinal()); | ||||
|                 return (Enum) getNmsMethod("EnumDirection", "fromType1", int.class) | ||||
|                         .invoke(null, ((Direction) value).ordinal()); | ||||
|             } | ||||
|             catch (Exception ex) { | ||||
|                 ex.printStackTrace(); | ||||
| @@ -836,8 +834,8 @@ public class ReflectionManager { | ||||
|             BlockPosition pos = (BlockPosition) value; | ||||
|  | ||||
|             try { | ||||
|                 return getNmsConstructor("BlockPosition", int.class, int.class, int.class).newInstance(pos.getX(), | ||||
|                         pos.getY(), pos.getZ()); | ||||
|                 return getNmsConstructor("BlockPosition", int.class, int.class, int.class) | ||||
|                         .newInstance(pos.getX(), pos.getY(), pos.getZ()); | ||||
|             } | ||||
|             catch (Exception ex) { | ||||
|                 ex.printStackTrace(); | ||||
| @@ -906,7 +904,7 @@ public class ReflectionManager { | ||||
|         return id + (data << 12); | ||||
|     } | ||||
|  | ||||
|     public static Pair<Integer, Integer> getFromCombinedId(int combinedId) { | ||||
|     public static ImmutablePair<Integer, Integer> getFromCombinedId(int combinedId) { | ||||
|         int j = combinedId & 4095; | ||||
|         int k = combinedId >> 12 & 15; | ||||
|  | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| package me.libraryaddict.disguise.utilities; | ||||
|  | ||||
| import me.libraryaddict.disguise.DisguiseConfig; | ||||
| import org.apache.commons.lang3.StringEscapeUtils; | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.apache.commons.lang.StringEscapeUtils; | ||||
| import org.apache.commons.lang.StringUtils; | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.configuration.file.YamlConfiguration; | ||||
|  | ||||
|   | ||||
| @@ -2,8 +2,10 @@ package me.libraryaddict.disguise.utilities.backwards; | ||||
|  | ||||
| import me.libraryaddict.disguise.disguisetypes.MetaIndex; | ||||
| import me.libraryaddict.disguise.utilities.LibsPremium; | ||||
| import me.libraryaddict.disguise.utilities.ReflectionManager; | ||||
| import me.libraryaddict.disguise.utilities.backwards.metadata.Version_1_10; | ||||
| import me.libraryaddict.disguise.utilities.backwards.metadata.Version_1_11; | ||||
| import me.libraryaddict.disguise.utilities.backwards.metadata.Version_1_9; | ||||
| import org.bukkit.Bukkit; | ||||
|  | ||||
| import java.lang.reflect.Field; | ||||
| import java.util.ArrayList; | ||||
| @@ -14,16 +16,27 @@ import java.util.ArrayList; | ||||
| public class BackwardsSupport { | ||||
|     public static BackwardMethods getMethods() { | ||||
|         try { | ||||
|             String version = ReflectionManager.getBukkitVersion(); | ||||
|             String version = Bukkit.getVersion(); | ||||
|             version = version.substring(version.lastIndexOf(" ") + 1, version.length() - 1); | ||||
|  | ||||
|             Class<? extends BackwardMethods> methods = BackwardMethods.class; | ||||
|  | ||||
|             if (version.equals("v1_11_R1")) { | ||||
|             if (version.equals("1.9") || version.equals("1.9.1") || version.equals("1.9.2") || version | ||||
|                     .equals("1.9.3") || version.equals("1.9.4")) { | ||||
|                 methods = Version_1_9.class; | ||||
|             } else if (version.equals("1.10") || version.equals("1.10.1") || version.equals("1.10.2")) { | ||||
|                 methods = Version_1_10.class; | ||||
|             } else if (version.equals("1.11") || version.equals("1.11.1") || version.equals("1.11.2")) { | ||||
|                 methods = Version_1_11.class; | ||||
|             } | ||||
|  | ||||
|             if (!LibsPremium.isPremium() && methods != BackwardMethods.class) { | ||||
|                 System.out.println("[LibsDisguises] You must purchase the plugin to use backwards compatibility!"); | ||||
|                 methods = BackwardMethods.class; | ||||
|             if (methods != BackwardMethods.class) { | ||||
|                 if (!LibsPremium.isPremium()) { | ||||
|                     System.out.println("[LibsDisguises] You must purchase the plugin to use backwards compatibility!"); | ||||
|                     methods = BackwardMethods.class; | ||||
|                 } else { | ||||
|                     System.out.println("[LibsDisguises] Enabled backwards support for " + version); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             return setupMetadata(methods); | ||||
| @@ -35,21 +48,31 @@ public class BackwardsSupport { | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     private static void getIndexes(Class backwardsClass, BackwardMethods backwards, | ||||
|             ArrayList<MetaIndex> newIndexes) throws IllegalAccessException { | ||||
|         for (Field field : backwardsClass.getFields()) { | ||||
|             if (field.getType() != MetaIndex.class) | ||||
|                 continue; | ||||
|  | ||||
|             if (MetaIndex.setMetaIndex(field.getName(), (MetaIndex) field.get(backwards))) { | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
|             newIndexes.add((MetaIndex) field.get(backwards)); | ||||
|         } | ||||
|  | ||||
|         backwardsClass = backwardsClass.getSuperclass(); | ||||
|  | ||||
|         if (backwardsClass.getSimpleName().contains("Version_")) | ||||
|             getIndexes(backwardsClass, backwards, newIndexes); | ||||
|     } | ||||
|  | ||||
|     private static BackwardMethods setupMetadata(Class<? extends BackwardMethods> backwardsClass) { | ||||
|         try { | ||||
|             BackwardMethods backwards = backwardsClass.newInstance(); | ||||
|             ArrayList<MetaIndex> newIndexes = new ArrayList<>(); | ||||
|  | ||||
|             for (Field field : backwards.getClass().getFields()) { | ||||
|                 if (field.getType() != MetaIndex.class) | ||||
|                     continue; | ||||
|  | ||||
|                 if (MetaIndex.setMetaIndex(field.getName(), (MetaIndex) field.get(backwards))) { | ||||
|                     continue; | ||||
|                 } | ||||
|  | ||||
|                 newIndexes.add((MetaIndex) field.get(backwards)); | ||||
|             } | ||||
|             getIndexes(backwardsClass, backwards, newIndexes); | ||||
|  | ||||
|             MetaIndex.setValues(); | ||||
|  | ||||
|   | ||||
| @@ -1,7 +1,13 @@ | ||||
| package me.libraryaddict.disguise.utilities.backwards.metadata; | ||||
|  | ||||
| import me.libraryaddict.disguise.disguisetypes.MetaIndex; | ||||
|  | ||||
| /** | ||||
|  * Created by libraryaddict on 9/06/2017. | ||||
|  * <p> | ||||
|  * Supports 1.10.0 1.10.1 and 1.10.2 | ||||
|  */ | ||||
| public class Version_1_10 { | ||||
| public class Version_1_10 extends Version_1_11 { | ||||
|     private MetaIndex ILLAGER_META; | ||||
|     private MetaIndex ILLAGER_SPELL_TICKS; | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,7 @@ | ||||
| package me.libraryaddict.disguise.utilities.backwards.metadata; | ||||
|  | ||||
| /** | ||||
|  * Created by libraryaddict on 24/06/2017. | ||||
|  */ | ||||
| public class Version_1_7 { | ||||
| } | ||||
| @@ -0,0 +1,7 @@ | ||||
| package me.libraryaddict.disguise.utilities.backwards.metadata; | ||||
|  | ||||
| /** | ||||
|  * Created by libraryaddict on 24/06/2017. | ||||
|  */ | ||||
| public class Version_1_8 { | ||||
| } | ||||
| @@ -0,0 +1,9 @@ | ||||
| package me.libraryaddict.disguise.utilities.backwards.metadata; | ||||
|  | ||||
| /** | ||||
|  * Created by libraryaddict on 24/06/2017. | ||||
|  * <p> | ||||
|  * Intended for 1.9, 1.9.1, 1.9.2, 1.9.3, 1.9.4 | ||||
|  */ | ||||
| public class Version_1_9 extends Version_1_10 { | ||||
| } | ||||
							
								
								
									
										10
									
								
								src/org/bukkit/inventory/EquipmentSlot.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/org/bukkit/inventory/EquipmentSlot.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| package org.bukkit.inventory; | ||||
|  | ||||
| public enum EquipmentSlot { | ||||
|     HAND, | ||||
|     OFF_HAND, | ||||
|     FEET, | ||||
|     LEGS, | ||||
|     CHEST, | ||||
|     HEAD | ||||
| } | ||||
							
								
								
									
										6
									
								
								src/org/bukkit/inventory/MainHand.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/org/bukkit/inventory/MainHand.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| package org.bukkit.inventory; | ||||
|  | ||||
| public enum MainHand { | ||||
|     LEFT, | ||||
|     RIGHT | ||||
| } | ||||
		Reference in New Issue
	
	Block a user