diff --git a/pom.xml b/pom.xml index 5dce3739..1f018b9f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ LibsDisguises LibsDisguises - 9.8.2 + 9.8.2-SNAPSHOT clean install @@ -53,12 +53,12 @@ org.spigotmc spigot-api - 1.13.2-R0.1-SNAPSHOT + 1.14-R0.1-SNAPSHOT org.spigotmc spigot - 1.13.2-R0.1-SNAPSHOT + 1.14-R0.1-SNAPSHOT diff --git a/src/main/java/me/libraryaddict/disguise/DisguiseAPI.java b/src/main/java/me/libraryaddict/disguise/DisguiseAPI.java index d72c29aa..2b72f6e0 100644 --- a/src/main/java/me/libraryaddict/disguise/DisguiseAPI.java +++ b/src/main/java/me/libraryaddict/disguise/DisguiseAPI.java @@ -93,9 +93,6 @@ public class DisguiseAPI { if (saddle != null && saddle.getType() == Material.SADDLE) { ((AbstractHorseWatcher) watcher).setSaddled(true); } - - if (watcher instanceof HorseWatcher) - ((HorseWatcher) watcher).setHorseArmor(horseInventory.getArmor()); } } for (Method method : entity.getClass().getMethods()) { @@ -217,7 +214,7 @@ public class DisguiseAPI { } public static void disguiseIgnorePlayers(Entity entity, Disguise disguise, Player... playersToNotSeeDisguise) { - disguiseIgnorePlayers(entity, disguise, (Collection) Arrays.asList(playersToNotSeeDisguise)); + disguiseIgnorePlayers(entity, disguise, Arrays.asList(playersToNotSeeDisguise)); } public static void disguiseIgnorePlayers(Entity entity, Disguise disguise, String... playersToNotSeeDisguise) { @@ -290,7 +287,7 @@ public class DisguiseAPI { } public static void disguiseToPlayers(Entity entity, Disguise disguise, Player... playersToViewDisguise) { - disguiseToPlayers(entity, disguise, (Collection) Arrays.asList(playersToViewDisguise)); + disguiseToPlayers(entity, disguise, Arrays.asList(playersToViewDisguise)); } public static void disguiseToPlayers(Entity entity, Disguise disguise, String... playersToViewDisguise) { diff --git a/src/main/java/me/libraryaddict/disguise/DisguiseConfig.java b/src/main/java/me/libraryaddict/disguise/DisguiseConfig.java index 1eb6da06..3a16e36e 100644 --- a/src/main/java/me/libraryaddict/disguise/DisguiseConfig.java +++ b/src/main/java/me/libraryaddict/disguise/DisguiseConfig.java @@ -20,10 +20,10 @@ import java.util.HashMap; import java.util.Map.Entry; public class DisguiseConfig { - public static enum DisguisePushing { // This enum has a really bad name.. + public enum DisguisePushing { // This enum has a really bad name.. MODIFY_SCOREBOARD, IGNORE_SCOREBOARD, - CREATE_SCOREBOARD; + CREATE_SCOREBOARD } public enum UpdatesBranch { @@ -33,7 +33,6 @@ public class DisguiseConfig { } private static boolean animationEnabled; - private static boolean bedEnabled; private static boolean blowDisguisesWhenAttacking; private static boolean blowDisguisesWhenAttacked; private static boolean collectEnabled; @@ -307,7 +306,6 @@ public class DisguiseConfig { setWitherSkullPacketsEnabled(config.getBoolean("PacketsEnabled.WitherSkull")); setEquipmentPacketsEnabled(config.getBoolean("PacketsEnabled.Equipment")); setAnimationPacketsEnabled(config.getBoolean("PacketsEnabled.Animation")); - setBedPacketsEnabled(config.getBoolean("PacketsEnabled.Bed")); setEntityStatusPacketsEnabled(config.getBoolean("PacketsEnabled.EntityStatus")); setCollectPacketsEnabled(config.getBoolean("PacketsEnabled.Collect")); setMetadataPacketsEnabled(config.getBoolean("PacketsEnabled.Metadata")); @@ -447,10 +445,6 @@ public class DisguiseConfig { return animationEnabled; } - public static boolean isBedPacketsEnabled() { - return bedEnabled; - } - public static boolean isCollectPacketsEnabled() { return collectEnabled; } @@ -600,14 +594,6 @@ public class DisguiseConfig { } } - public static void setBedPacketsEnabled(boolean enabled) { - if (enabled != isBedPacketsEnabled()) { - bedEnabled = enabled; - - PacketsManager.setupMainPacketsListener(); - } - } - public static void setCollectPacketsEnabled(boolean enabled) { if (enabled != isCollectPacketsEnabled()) { collectEnabled = enabled; diff --git a/src/main/java/me/libraryaddict/disguise/DisguiseListener.java b/src/main/java/me/libraryaddict/disguise/DisguiseListener.java index bee25f97..81d483b5 100644 --- a/src/main/java/me/libraryaddict/disguise/DisguiseListener.java +++ b/src/main/java/me/libraryaddict/disguise/DisguiseListener.java @@ -93,12 +93,9 @@ public class DisguiseListener implements Listener { } // If build number is null, or not a number. Then we can't check snapshots regardless - if (!plugin.isNumberedBuild()) { - return true; - } + return !plugin.isNumberedBuild(); // Check snapshots - return false; } private void runUpdateScheduler() { @@ -190,53 +187,6 @@ public class DisguiseListener implements Listener { } } - private void chunkMove(Player player, Location newLoc, Location oldLoc) { - try { - // Resend the bed chunks - for (PacketContainer packet : DisguiseUtilities.getBedChunkPacket(newLoc, oldLoc)) { - ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet, false); - } - - if (newLoc != null) { - for (HashSet list : DisguiseUtilities.getDisguises().values()) { - for (TargetedDisguise disguise : list) { - if (disguise.getEntity() == null) - continue; - - if (!disguise.isPlayerDisguise()) - continue; - - if (!disguise.canSee(player)) - continue; - - if (!((PlayerDisguise) disguise).getWatcher().isSleeping()) - continue; - - if (!DisguiseUtilities.getPerverts(disguise).contains(player)) - continue; - - PacketContainer[] packets = DisguiseUtilities.getBedPackets( - disguise.getEntity() == player ? newLoc : disguise.getEntity().getLocation(), newLoc, - (PlayerDisguise) disguise); - - if (disguise.getEntity() == player) { - for (PacketContainer packet : packets) { - packet.getIntegers().write(0, DisguiseAPI.getSelfDisguiseId()); - } - } - - for (PacketContainer packet : packets) { - ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet); - } - } - } - } - } - catch (InvocationTargetException e) { - e.printStackTrace(); - } - } - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onVelocity(PlayerVelocityEvent event) { DisguiseUtilities.setPlayerVelocity(event.getPlayer()); @@ -332,10 +282,6 @@ public class DisguiseListener implements Listener { notifyUpdate(p); - if (DisguiseConfig.isBedPacketsEnabled()) { - chunkMove(p, p.getLocation(), null); - } - if (DisguiseConfig.isSaveGameProfiles() && DisguiseConfig.isUpdateGameProfiles() && DisguiseUtilities.hasGameProfile(p.getName())) { WrappedGameProfile profile = WrappedGameProfile.fromPlayer(p); @@ -395,17 +341,6 @@ public class DisguiseListener implements Listener { */ @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onMove(PlayerMoveEvent event) { - if (DisguiseConfig.isBedPacketsEnabled()) { - Location to = event.getTo(); - Location from = event.getFrom(); - - if (DisguiseUtilities.getChunkCord(to.getBlockX()) != DisguiseUtilities.getChunkCord(from.getBlockX()) || - DisguiseUtilities.getChunkCord(to.getBlockZ()) != - DisguiseUtilities.getChunkCord(from.getBlockZ())) { - chunkMove(event.getPlayer(), to, from); - } - } - // If the bounding boxes are modified and the player moved more than a little // The runnable in Disguise also calls it, so we should ignore smaller movements if (DisguiseConfig.isModifyBoundingBox() && event.getFrom().distanceSquared(event.getTo()) > 0.2) { @@ -456,22 +391,6 @@ public class DisguiseListener implements Listener { DisguiseUtilities.saveDisguises(player.getUniqueId(), disguises); } - @EventHandler - public void onRespawn(PlayerRespawnEvent event) { - if (DisguiseConfig.isBedPacketsEnabled()) { - final Player player = event.getPlayer(); - - chunkMove(event.getPlayer(), null, player.getLocation()); - - Bukkit.getScheduler().runTask(plugin, new Runnable() { - @Override - public void run() { - chunkMove(player, player.getLocation(), null); - } - }); - } - } - @EventHandler public void onRightClick(PlayerInteractEntityEvent event) { Player p = event.getPlayer(); @@ -658,21 +577,6 @@ public class DisguiseListener implements Listener { Location to = event.getTo(); Location from = event.getFrom(); - if (DisguiseConfig.isBedPacketsEnabled()) { - if (DisguiseUtilities.getChunkCord(to.getBlockX()) != DisguiseUtilities.getChunkCord(from.getBlockX()) || - DisguiseUtilities.getChunkCord(to.getBlockZ()) != - DisguiseUtilities.getChunkCord(from.getBlockZ())) { - chunkMove(player, null, from); - - Bukkit.getScheduler().runTask(plugin, new Runnable() { - @Override - public void run() { - chunkMove(player, player.getLocation(), null); - } - }); - } - } - if (!DisguiseAPI.isDisguised(player)) { return; } @@ -743,10 +647,6 @@ public class DisguiseListener implements Listener { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onWorldSwitch(final PlayerChangedWorldEvent event) { - if (DisguiseConfig.isBedPacketsEnabled()) { - chunkMove(event.getPlayer(), event.getPlayer().getLocation(), null); - } - if (!DisguiseAPI.isDisguised(event.getPlayer())) { return; } diff --git a/src/main/java/me/libraryaddict/disguise/LibsDisguises.java b/src/main/java/me/libraryaddict/disguise/LibsDisguises.java index 3cd3b390..10c9c835 100644 --- a/src/main/java/me/libraryaddict/disguise/LibsDisguises.java +++ b/src/main/java/me/libraryaddict/disguise/LibsDisguises.java @@ -16,8 +16,8 @@ import me.libraryaddict.disguise.utilities.packets.PacketsManager; import me.libraryaddict.disguise.utilities.reflection.DisguiseValues; import me.libraryaddict.disguise.utilities.reflection.FakeBoundingBox; import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; -import org.apache.commons.lang3.ArrayUtils; -import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang.ArrayUtils; +import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; import org.bukkit.command.CommandExecutor; import org.bukkit.command.PluginCommand; @@ -55,9 +55,18 @@ public class LibsDisguises extends JavaPlugin { LibsPremium.check(getDescription().getVersion()); - if (!ReflectionManager.getMinecraftVersion().startsWith("1.13")) { + if (!LibsPremium.isPremium()) { + getLogger().severe("You must purchase the plugin to use support for 1.14!"); + getLogger().severe("This will be released free once the plugin is stable!"); + getLogger().severe("If you've already purchased the plugin, place the purchased jar inside the " + + "Lib's Disguises plugin folder"); + getPluginLoader().disablePlugin(this); + return; + } + + if (!ReflectionManager.getMinecraftVersion().startsWith("1.14")) { getLogger().severe("You're using the wrong version of Lib's Disguises for your server! This is " + - "intended for 1.13!"); + "intended for 1.14!"); getPluginLoader().disablePlugin(this); return; } @@ -311,6 +320,12 @@ public class LibsDisguises extends JavaPlugin { case TRIDENT: nmsEntityName = "ThrownTrident"; break; + case WANDERING_TRADER: + nmsEntityName = "VillagerTrader"; + break; + case TRADER_LLAMA: + nmsEntityName = "LLamaTrader"; // Interesting capitalization + break; default: break; } @@ -336,14 +351,15 @@ public class LibsDisguises extends JavaPlugin { continue; } - Object nmsEntity = ReflectionManager.createEntityInstance(nmsEntityName); + Object nmsEntity = ReflectionManager.createEntityInstance(disguiseType, nmsEntityName); if (nmsEntity == null) { getLogger().warning("Entity not found! (" + nmsEntityName + ")"); continue; } - disguiseType.setTypeId(ReflectionManager.getEntityType(nmsEntity)); + disguiseType.setTypeId(ReflectionManager.getEntityTypeId(disguiseType.getEntityType())); + Entity bukkitEntity = ReflectionManager.getBukkitEntity(nmsEntity); int entitySize = 0; @@ -431,7 +447,7 @@ public class LibsDisguises extends JavaPlugin { disguiseValues.setBabyBox(ReflectionManager.getBoundingBox(bukkitEntity)); } - disguiseValues.setEntitySize(ReflectionManager.getSize(bukkitEntity)); + //disguiseValues.setEntitySize(ReflectionManager.getSize(bukkitEntity)); } catch (SecurityException | IllegalArgumentException | IllegalAccessException | FieldAccessException ex) { getLogger().severe("Uh oh! Trouble while making values for the disguise " + disguiseType.name() + "!"); diff --git a/src/main/java/me/libraryaddict/disguise/commands/DisguiseBaseCommand.java b/src/main/java/me/libraryaddict/disguise/commands/DisguiseBaseCommand.java index f65c8004..c367cf40 100644 --- a/src/main/java/me/libraryaddict/disguise/commands/DisguiseBaseCommand.java +++ b/src/main/java/me/libraryaddict/disguise/commands/DisguiseBaseCommand.java @@ -4,7 +4,7 @@ import me.libraryaddict.disguise.disguisetypes.DisguiseType; import me.libraryaddict.disguise.utilities.parser.DisguiseParser; import me.libraryaddict.disguise.utilities.parser.DisguisePerm; import me.libraryaddict.disguise.utilities.parser.DisguisePermissions; -import me.libraryaddict.disguise.utilities.parser.ParamInfoManager; +import me.libraryaddict.disguise.utilities.parser.params.ParamInfoManager; import me.libraryaddict.disguise.utilities.parser.params.ParamInfo; import org.bukkit.Bukkit; import org.bukkit.command.CommandExecutor; diff --git a/src/main/java/me/libraryaddict/disguise/commands/DisguiseHelpCommand.java b/src/main/java/me/libraryaddict/disguise/commands/DisguiseHelpCommand.java index e4888a0c..162f5ca2 100644 --- a/src/main/java/me/libraryaddict/disguise/commands/DisguiseHelpCommand.java +++ b/src/main/java/me/libraryaddict/disguise/commands/DisguiseHelpCommand.java @@ -5,7 +5,7 @@ import me.libraryaddict.disguise.utilities.translations.TranslateType; import me.libraryaddict.disguise.utilities.parser.DisguiseParser; import me.libraryaddict.disguise.utilities.parser.DisguisePerm; import me.libraryaddict.disguise.utilities.parser.DisguisePermissions; -import me.libraryaddict.disguise.utilities.parser.ParamInfoManager; +import me.libraryaddict.disguise.utilities.parser.params.ParamInfoManager; import me.libraryaddict.disguise.utilities.parser.params.ParamInfo; import org.apache.commons.lang.StringUtils; import org.bukkit.ChatColor; diff --git a/src/main/java/me/libraryaddict/disguise/commands/DisguiseModifyRadiusCommand.java b/src/main/java/me/libraryaddict/disguise/commands/DisguiseModifyRadiusCommand.java index 4700987f..17365acf 100644 --- a/src/main/java/me/libraryaddict/disguise/commands/DisguiseModifyRadiusCommand.java +++ b/src/main/java/me/libraryaddict/disguise/commands/DisguiseModifyRadiusCommand.java @@ -5,6 +5,7 @@ import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.DisguiseType; import me.libraryaddict.disguise.utilities.DisguiseUtilities; import me.libraryaddict.disguise.utilities.parser.*; +import me.libraryaddict.disguise.utilities.parser.params.ParamInfoManager; import me.libraryaddict.disguise.utilities.translations.LibsMsg; import me.libraryaddict.disguise.utilities.translations.TranslateType; import org.apache.commons.lang.StringUtils; diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/AnimalColor.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/AnimalColor.java index d509f8eb..b4669475 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/AnimalColor.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/AnimalColor.java @@ -9,17 +9,17 @@ public enum AnimalColor { BROWN(DyeColor.BROWN, Material.COCOA_BEANS), CYAN(DyeColor.CYAN, Material.CYAN_DYE), GRAY(DyeColor.GRAY, Material.GRAY_DYE), - GREEN(DyeColor.GREEN, Material.CACTUS_GREEN), + GREEN(DyeColor.GREEN, Material.GREEN_DYE), LIGHT_BLUE(DyeColor.LIGHT_BLUE, Material.LIGHT_BLUE_DYE), LIME(DyeColor.LIME, Material.LIME_DYE), MAGENTA(DyeColor.MAGENTA, Material.MAGENTA_DYE), ORANGE(DyeColor.ORANGE, Material.ORANGE_DYE), PINK(DyeColor.PINK, Material.PINK_DYE), PURPLE(DyeColor.PURPLE, Material.PURPLE_DYE), - RED(DyeColor.RED, Material.ROSE_RED), + RED(DyeColor.RED, Material.RED_DYE), LIGHT_GRAY(DyeColor.LIGHT_GRAY, Material.LIGHT_GRAY_DYE), WHITE(DyeColor.WHITE, Material.BONE_MEAL), - YELLOW(DyeColor.YELLOW, Material.DANDELION_YELLOW); + YELLOW(DyeColor.YELLOW, Material.YELLOW_DYE); public static AnimalColor getColorByWool(int woolId) { for (AnimalColor color : values()) { diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/DisguiseType.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/DisguiseType.java index 83e21541..34a2afac 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/DisguiseType.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/DisguiseType.java @@ -18,6 +18,8 @@ public enum DisguiseType { BOAT(1), + CAT, + CAVE_SPIDER, CHICKEN, @@ -68,6 +70,8 @@ public enum DisguiseType { FISHING_HOOK(90), + FOX, + GHAST, GIANT, @@ -114,6 +118,8 @@ public enum DisguiseType { PAINTING, + PANDA, + PARROT, PHANTOM, @@ -122,6 +128,8 @@ public enum DisguiseType { PIG_ZOMBIE, + PILLAGER, + PLAYER, POLAR_BEAR, @@ -132,6 +140,8 @@ public enum DisguiseType { RABBIT, + RAVAGER, + SALMON, SHEEP, @@ -166,10 +176,10 @@ public enum DisguiseType { THROWN_EXP_BOTTLE(75), - TIPPED_ARROW(60), - TRIDENT(94, 0), + TRADER_LLAMA, + TROPICAL_FISH, TURTLE, @@ -184,6 +194,8 @@ public enum DisguiseType { VINDICATOR, + WANDERING_TRADER, + WITCH, WITHER, @@ -198,14 +210,6 @@ public enum DisguiseType { ZOMBIE_VILLAGER; - static { - for (DisguiseType type : values()) { - String name = type.name(); - - type.setEntityType(EntityType.valueOf(name)); - } - } - public static DisguiseType getType(Entity entity) { DisguiseType disguiseType = getType(entity.getType()); @@ -213,12 +217,15 @@ public enum DisguiseType { } public static DisguiseType getType(EntityType entityType) { - try { - return valueOf(entityType.name().toUpperCase()); - } - catch (Throwable ex) { - return DisguiseType.UNKNOWN; + for (DisguiseType type : values()) { + if (type.getEntityType() != entityType) { + continue; + } + + return type; } + + return DisguiseType.UNKNOWN; } private EntityType entityType; @@ -245,6 +252,8 @@ public enum DisguiseType { break; } } + + setEntityType(EntityType.valueOf(name())); } public int getDefaultData() { diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/EntityPose.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/EntityPose.java new file mode 100644 index 00000000..0f5b6afc --- /dev/null +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/EntityPose.java @@ -0,0 +1,14 @@ +package me.libraryaddict.disguise.disguisetypes; + +/** + * Created by libraryaddict on 6/05/2019. + */ +public enum EntityPose { + STANDING, + FALL_FLYING, + SLEEPING, + SWIMMING, + SPIN_ATTACK, + SNEAKING, + DYING +} diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/FlagWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/FlagWatcher.java index a8e5dcb7..e4228e30 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/FlagWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/FlagWatcher.java @@ -191,6 +191,15 @@ public class FlagWatcher { return newList; } + public EntityPose getEntityPose() { + return getData(MetaIndex.ENTITY_POSE); + } + + public void setEntityPose(EntityPose entityPose) { + setData(MetaIndex.ENTITY_POSE, entityPose); + sendData(MetaIndex.ENTITY_POSE); + } + public ItemStack[] getArmor() { return getEquipment().getArmorContents(); } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/MetaIndex.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/MetaIndex.java index fe68526c..26a9d79b 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/MetaIndex.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/MetaIndex.java @@ -10,6 +10,8 @@ import me.libraryaddict.disguise.utilities.DisguiseUtilities; import org.bukkit.Color; import org.bukkit.Material; import org.bukkit.Particle; +import org.bukkit.entity.MushroomCow; +import org.bukkit.entity.Villager; import org.bukkit.inventory.ItemStack; import java.lang.reflect.Field; @@ -98,6 +100,8 @@ public class MetaIndex { */ public static MetaIndex> ARROW_UUID = new MetaIndex<>(ArrowWatcher.class, 1, Optional.empty()); + public static MetaIndex ARROW_PIERCE_LEVEL = new MetaIndex<>(ArrowWatcher.class, 2, (byte) 0); + /** * If the bat is hanging, false/true state */ @@ -128,6 +132,14 @@ public class MetaIndex { public static MetaIndex BOAT_SHAKE = new MetaIndex<>(BoatWatcher.class, 6, 0); + public static MetaIndex CAT_TYPE = new MetaIndex<>(CatWatcher.class, 0, 0); + + public static MetaIndex CAT_LYING_DOWN = new MetaIndex<>(CatWatcher.class, 1, false); + + public static MetaIndex CAT_LOOKING_UP = new MetaIndex<>(CatWatcher.class, 2, false); + + public static MetaIndex CAT_COLLAR = new MetaIndex<>(CatWatcher.class, 3, AnimalColor.RED.ordinal()); + /** * If creeper is ignited, about to blow up */ @@ -174,6 +186,9 @@ public class MetaIndex { public static MetaIndex ENDER_DRAGON_PHASE = new MetaIndex<>(EnderDragonWatcher.class, 0, 10); + public static MetaIndex ENDER_SIGNAL_ITEM = new MetaIndex<>(EnderSignalWatcher.class, 0, + new ItemStack(Material.AIR)); + /** * If the enderman is screaming */ @@ -213,18 +228,40 @@ public class MetaIndex { */ public static MetaIndex ENTITY_SILENT = new MetaIndex<>(FlagWatcher.class, 4, false); + /** + * If entity can make sounds, no noticable effects + */ + public static MetaIndex ENTITY_POSE = new MetaIndex<>(FlagWatcher.class, 6, EntityPose.STANDING); + public static MetaIndex FALLING_BLOCK_POSITION = new MetaIndex<>(FallingBlockWatcher.class, 0, BlockPosition.ORIGIN); + public static MetaIndex FIREBALL_ITEM = new MetaIndex<>(FireballWatcher.class, 0, + new ItemStack(Material.AIR)); + public static MetaIndex FIREWORK_ITEM = new MetaIndex<>(FireworkWatcher.class, 0, new ItemStack(Material.FIREWORK_ROCKET)); public static MetaIndex FISH_FROM_BUCKET = new MetaIndex<>(FishWatcher.class, 0, false); - public static MetaIndex FIREWORK_ATTACHED_ENTITY = new MetaIndex<>(FireworkWatcher.class, 1, 0); + public static MetaIndex FIREWORK_ATTACHED_ENTITY = new MetaIndex<>(FireworkWatcher.class, 1, + OptionalInt.empty()); + + public static MetaIndex FIREWORK_SHOT_AT_ANGLE = new MetaIndex<>(FireworkWatcher.class, 2, false); public static MetaIndex FISHING_HOOK_HOOKED = new MetaIndex<>(FishingHookWatcher.class, 0, 0); + /** + * The type of fox, its coloring + */ + public static MetaIndex FOX_TYPE = new MetaIndex<>(FoxWatcher.class, 0, 0); + + public static MetaIndex FOX_META = new MetaIndex<>(FoxWatcher.class, 1, (byte) 0); + + public static MetaIndex> FOX_TRUSTED_1 = new MetaIndex<>(FoxWatcher.class, 2, Optional.empty()); + + public static MetaIndex> FOX_TRUSTED_2 = new MetaIndex<>(FoxWatcher.class, 3, Optional.empty()); + /** * Changes the face of the ghast */ @@ -240,11 +277,6 @@ public class MetaIndex { */ public static MetaIndex GUARDIAN_TARGET = new MetaIndex<>(GuardianWatcher.class, 1, 0); - /** - * What type of armor the horse has - */ - public static MetaIndex HORSE_ARMOR = new MetaIndex<>(HorseWatcher.class, 1, 0); - /** * If horse has chest, set for donkey */ @@ -267,9 +299,7 @@ public class MetaIndex { public static MetaIndex> HORSE_OWNER = new MetaIndex<>(AbstractHorseWatcher.class, 1, Optional.empty()); - public static MetaIndex ILLAGER_META = new MetaIndex<>(IllagerWatcher.class, 0, (byte) 0); - - public static MetaIndex ILLAGER_SPELL_TICKS = new MetaIndex<>(IllagerWizardWatcher.class, 0, (byte) 0); + public static MetaIndex ILLAGER_SPELL = new MetaIndex<>(IllagerWizardWatcher.class, 0, (byte) 0); public static MetaIndex INSENTIENT_META = new MetaIndex<>(InsentientWatcher.class, 0, (byte) 0); @@ -311,6 +341,9 @@ public class MetaIndex { */ public static MetaIndex LIVING_POTIONS = new MetaIndex<>(LivingWatcher.class, 2, 0); + public static MetaIndex> LIVING_BED_POSITION = new MetaIndex<>(LivingWatcher.class, 5, + Optional.empty()); + /** * If there is no carpet, -1. Otherwise it's a color enum value */ @@ -357,7 +390,22 @@ public class MetaIndex { */ public static MetaIndex MINECART_FURANCE_FUELED = new MetaIndex<>(MinecartFurnaceWatcher.class, 0, false); - public static MetaIndex OCELOT_TYPE = new MetaIndex<>(OcelotWatcher.class, 0, 0); + public static MetaIndex MUSHROOM_COW_TYPE = new MetaIndex<>(MushroomCowWatcher.class, 0, + MushroomCow.Variant.RED.name().toLowerCase()); + + public static MetaIndex OCELOT_TRUST = new MetaIndex<>(OcelotWatcher.class, 0, false); + + public static MetaIndex PANDA_HEAD_SHAKING = new MetaIndex<>(PandaWatcher.class, 0, 0); + + public static MetaIndex PANDA_UNKNOWN_1 = new MetaIndex<>(PandaWatcher.class, 1, 0); + + public static MetaIndex PANDA_UNKNOWN_2 = new MetaIndex<>(PandaWatcher.class, 2, 0); + + public static MetaIndex PANDA_MAIN_GENE = new MetaIndex<>(PandaWatcher.class, 3, (byte) 0); + + public static MetaIndex PANDA_HIDDEN_GENE = new MetaIndex<>(PandaWatcher.class, 4, (byte) 0); + + public static MetaIndex PANDA_META = new MetaIndex<>(PandaWatcher.class, 5, (byte) 0); public static MetaIndex PARROT_VARIANT = new MetaIndex<>(ParrotWatcher.class, 0, 0); @@ -370,6 +418,8 @@ public class MetaIndex { */ public static MetaIndex PIG_BOOST = new MetaIndex<>(PigWatcher.class, 1, 0); + public static MetaIndex PILLAGER_AIMING_BOW = new MetaIndex<>(PillagerWatcher.class, 0, false); + public static MetaIndex PLAYER_ABSORPTION = new MetaIndex<>(PlayerWatcher.class, 0, 0F); public static MetaIndex PLAYER_HAND = new MetaIndex<>(PlayerWatcher.class, 3, (byte) 0); @@ -390,6 +440,8 @@ public class MetaIndex { public static MetaIndex RABBIT_TYPE = new MetaIndex<>(RabbitWatcher.class, 0, 0); + public static MetaIndex RAIDER_CASTING_SPELL = new MetaIndex<>(RaiderWatcher.class, 0, false); + public static MetaIndex SHEEP_WOOL = new MetaIndex<>(SheepWatcher.class, 0, (byte) 0); public static MetaIndex> SHULKER_ATTACHED = new MetaIndex<>(ShulkerWatcher.class, 1, @@ -401,8 +453,6 @@ public class MetaIndex { public static MetaIndex SHULKER_PEEKING = new MetaIndex<>(ShulkerWatcher.class, 2, (byte) 0); - public static MetaIndex SKELETON_SWING_ARMS = new MetaIndex<>(SkeletonWatcher.class, 0, false); - public static MetaIndex SLIME_SIZE = new MetaIndex<>(SlimeWatcher.class, 0, 1); public static MetaIndex SNOWMAN_DERP = new MetaIndex<>(SnowmanWatcher.class, 0, (byte) 16); @@ -417,6 +467,9 @@ public class MetaIndex { public static MetaIndex> TAMEABLE_OWNER = new MetaIndex<>(TameableWatcher.class, 1, Optional.empty()); + public static MetaIndex THROWABLE_ITEM = new MetaIndex<>(ThrowableWatcher.class, 0, + new ItemStack(Material.AIR)); + public static MetaIndex TIPPED_ARROW_COLOR = new MetaIndex<>(TippedArrowWatcher.class, 0, -1); public static MetaIndex TNT_FUSE_TICKS = new MetaIndex<>(TNTWatcher.class, 0, Integer.MAX_VALUE); @@ -441,7 +494,10 @@ public class MetaIndex { public static MetaIndex VEX_ANGRY = new MetaIndex<>(VexWatcher.class, 0, (byte) 0); - public static MetaIndex VILLAGER_PROFESSION = new MetaIndex<>(VillagerWatcher.class, 0, 0); + public static MetaIndex ABSTRACT_VILLAGER_ANGRY = new MetaIndex<>(AbstractVillagerWatcher.class, 0, 0); + + public static MetaIndex VILLAGER_DATA = new MetaIndex<>(VillagerWatcher.class, 0, + new VillagerData(Villager.Type.PLAINS, Villager.Profession.NONE, 1)); public static MetaIndex WITCH_AGGRESSIVE = new MetaIndex<>(WitchWatcher.class, 0, false); @@ -461,15 +517,14 @@ public class MetaIndex { public static MetaIndex WOLF_DAMAGE = new MetaIndex<>(WolfWatcher.class, 0, 1F); - public static MetaIndex ZOMBIE_AGGRESSIVE = new MetaIndex<>(ZombieWatcher.class, 2, false); - public static MetaIndex ZOMBIE_BABY = new MetaIndex<>(ZombieWatcher.class, 0, false); - public static MetaIndex ZOMBIE_CONVERTING_DROWNED = new MetaIndex<>(ZombieWatcher.class, 3, false); + public static MetaIndex ZOMBIE_CONVERTING_DROWNED = new MetaIndex<>(ZombieWatcher.class, 2, false); public static MetaIndex ZOMBIE_PLACEHOLDER = new MetaIndex<>(ZombieWatcher.class, 1, 0); - public static MetaIndex ZOMBIE_VILLAGER_PROFESSION = new MetaIndex<>(ZombieVillagerWatcher.class, 1, 0); + public static MetaIndex ZOMBIE_VILLAGER_PROFESSION = new MetaIndex<>(ZombieVillagerWatcher.class, 1, + new VillagerData(Villager.Type.PLAINS, Villager.Profession.NONE, 1)); /** * Shown for villager conversion diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/MiscDisguise.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/MiscDisguise.java index b63ec5f7..84888385 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/MiscDisguise.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/MiscDisguise.java @@ -75,7 +75,6 @@ public class MiscDisguise extends TargetedDisguise { case FISHING_HOOK: // Entity ID of whoever is holding fishing rod case ARROW: // Entity ID of shooter. Used for "Is he on this scoreboard team and do I render it moving // through his body?" - case TIPPED_ARROW: case SPECTRAL_ARROW: case SMALL_FIREBALL: // Unknown. Uses entity id of shooter. 0 if no shooter case FIREBALL: // Unknown. Uses entity id of shooter. 0 if no shooter diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/RabbitType.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/RabbitType.java index 7668820c..9deeef17 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/RabbitType.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/RabbitType.java @@ -15,7 +15,7 @@ public enum RabbitType { private int type; - private RabbitType(int type) { + RabbitType(int type) { this.type = type; } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/TargetedDisguise.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/TargetedDisguise.java index b1004f21..3a2d4bec 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/TargetedDisguise.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/TargetedDisguise.java @@ -156,9 +156,7 @@ public abstract class TargetedDisguise extends Disguise { } public TargetedDisguise silentlyRemovePlayer(String playername) { - if (disguiseViewers.contains(playername)) { - disguiseViewers.remove(playername); - } + disguiseViewers.remove(playername); return this; } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/VillagerData.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/VillagerData.java new file mode 100644 index 00000000..316832b6 --- /dev/null +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/VillagerData.java @@ -0,0 +1,30 @@ +package me.libraryaddict.disguise.disguisetypes; + +import org.bukkit.entity.Villager; + +/** + * Created by libraryaddict on 6/05/2019. + */ +public class VillagerData { + private final Villager.Type type; + private final Villager.Profession profession; + private final int level; + + public VillagerData(Villager.Type type, Villager.Profession profession, int level) { + this.type = type; + this.profession = profession; + this.level = level; + } + + public Villager.Type getType() { + return type; + } + + public Villager.Profession getProfession() { + return profession; + } + + public int getLevel() { + return level; + } +} diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AbstractVillagerWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AbstractVillagerWatcher.java new file mode 100644 index 00000000..bfb20892 --- /dev/null +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/AbstractVillagerWatcher.java @@ -0,0 +1,18 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.MetaIndex; + +/** + * Created by libraryaddict on 18/05/2019. + */ +public class AbstractVillagerWatcher extends AgeableWatcher { + public AbstractVillagerWatcher(Disguise disguise) { + super(disguise); + } + + public void setAngry(int ticks) { + setData(MetaIndex.ABSTRACT_VILLAGER_ANGRY, ticks); + sendData(MetaIndex.ABSTRACT_VILLAGER_ANGRY); + } +} diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ArmorStandWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ArmorStandWatcher.java index 824f39a7..b19b9d1f 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ArmorStandWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ArmorStandWatcher.java @@ -7,40 +7,32 @@ import com.comphenix.protocol.wrappers.Vector3F; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; -public class ArmorStandWatcher extends LivingWatcher -{ - public ArmorStandWatcher(Disguise disguise) - { +public class ArmorStandWatcher extends LivingWatcher { + public ArmorStandWatcher(Disguise disguise) { super(disguise); } - private boolean getArmorStandFlag(int value) - { + private boolean getArmorStandFlag(int value) { return (getData(MetaIndex.ARMORSTAND_META) & value) != 0; } - public EulerAngle getBody() - { + public EulerAngle getBody() { return getPose(MetaIndex.ARMORSTAND_BODY); } - public EulerAngle getHead() - { + public EulerAngle getHead() { return getPose(MetaIndex.ARMORSTAND_HEAD); } - public EulerAngle getLeftArm() - { + public EulerAngle getLeftArm() { return getPose(MetaIndex.ARMORSTAND_LEFT_ARM); } - public EulerAngle getLeftLeg() - { + public EulerAngle getLeftLeg() { return getPose(MetaIndex.ARMORSTAND_LEFT_LEG); } - private EulerAngle getPose(MetaIndex type) - { + private EulerAngle getPose(MetaIndex type) { if (!hasValue(type)) return new EulerAngle(0, 0, 0); @@ -49,51 +41,40 @@ public class ArmorStandWatcher extends LivingWatcher return new EulerAngle(vec.getX(), vec.getY(), vec.getZ()); } - public EulerAngle getRightArm() - { + public EulerAngle getRightArm() { return getPose(MetaIndex.ARMORSTAND_RIGHT_ARM); } - public EulerAngle getRightLeg() - { + public EulerAngle getRightLeg() { return getPose(MetaIndex.ARMORSTAND_RIGHT_LEG); } - public boolean isMarker() - { + public boolean isMarker() { return getArmorStandFlag(10); } - public boolean isNoBasePlate() - { + public boolean isNoBasePlate() { return getArmorStandFlag(8); } - public boolean isNoGravity() - { + public boolean isNoGravity() { return getArmorStandFlag(2); } - public boolean isShowArms() - { + public boolean isShowArms() { return getArmorStandFlag(4); } - public boolean isSmall() - { + public boolean isSmall() { return getArmorStandFlag(1); } - private void setArmorStandFlag(int value, boolean isTrue) - { - byte b1 = (byte) getData(MetaIndex.ARMORSTAND_META); + private void setArmorStandFlag(int value, boolean isTrue) { + byte b1 = getData(MetaIndex.ARMORSTAND_META); - if (isTrue) - { + if (isTrue) { b1 = (byte) (b1 | value); - } - else - { + } else { b1 = (byte) (b1 & value); } @@ -101,70 +82,52 @@ public class ArmorStandWatcher extends LivingWatcher sendData(MetaIndex.ARMORSTAND_META); } - public void setBody(EulerAngle vector) - { + public void setBody(EulerAngle vector) { setPose(MetaIndex.ARMORSTAND_BODY, vector); } - public void setHead(EulerAngle vector) - { + public void setHead(EulerAngle vector) { setPose(MetaIndex.ARMORSTAND_HEAD, vector); } - public void setLeftArm(EulerAngle vector) - { + public void setLeftArm(EulerAngle vector) { setPose(MetaIndex.ARMORSTAND_LEFT_ARM, vector); } - public void setLeftLeg(EulerAngle vector) - { + public void setLeftLeg(EulerAngle vector) { setPose(MetaIndex.ARMORSTAND_LEFT_LEG, vector); } - public void setMarker(boolean isMarker) - { + public void setMarker(boolean isMarker) { setArmorStandFlag(16, isMarker); - sendData(MetaIndex.ARMORSTAND_META); } - public void setNoBasePlate(boolean noBasePlate) - { + public void setNoBasePlate(boolean noBasePlate) { setArmorStandFlag(8, noBasePlate); - sendData(MetaIndex.ARMORSTAND_META); } - public void setNoGravity(boolean noGravity) - { + public void setNoGravity(boolean noGravity) { setArmorStandFlag(2, noGravity); - sendData(MetaIndex.ARMORSTAND_META); } - private void setPose(MetaIndex type, EulerAngle vector) - { + private void setPose(MetaIndex type, EulerAngle vector) { setData(type, new Vector3F((float) vector.getX(), (float) vector.getY(), (float) vector.getZ())); sendData(type); } - public void setRightArm(EulerAngle vector) - { + public void setRightArm(EulerAngle vector) { setPose(MetaIndex.ARMORSTAND_RIGHT_ARM, vector); } - public void setRightLeg(EulerAngle vector) - { + public void setRightLeg(EulerAngle vector) { setPose(MetaIndex.ARMORSTAND_RIGHT_LEG, vector); } - public void setShowArms(boolean showArms) - { + public void setShowArms(boolean showArms) { setArmorStandFlag(4, showArms); - sendData(MetaIndex.ARMORSTAND_META); } - public void setSmall(boolean isSmall) - { + public void setSmall(boolean isSmall) { setArmorStandFlag(1, isSmall); - sendData(MetaIndex.ARMORSTAND_META); } - } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ArrowWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ArrowWatcher.java index bcb9de03..521b56eb 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ArrowWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ArrowWatcher.java @@ -17,4 +17,13 @@ public class ArrowWatcher extends FlagWatcher { setData(MetaIndex.ARROW_CRITICAL, (byte) (critical ? 1 : 0)); sendData(MetaIndex.ARROW_CRITICAL); } + + public void setPierceLevel(int pierceLevel) { + setData(MetaIndex.ARROW_PIERCE_LEVEL, (byte) pierceLevel); + sendData(MetaIndex.ARROW_PIERCE_LEVEL); + } + + public int getPierceLevel() { + return getData(MetaIndex.ARROW_PIERCE_LEVEL); + } } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/BatWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/BatWatcher.java index 8f1340d0..829e7edf 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/BatWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/BatWatcher.java @@ -15,7 +15,7 @@ public class BatWatcher extends InsentientWatcher public boolean isHanging() { - return ((byte) getData(MetaIndex.BAT_HANGING)) == 1; + return getData(MetaIndex.BAT_HANGING) == 1; } public void setHanging(boolean hanging) diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/CatWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/CatWatcher.java new file mode 100644 index 00000000..78f8a6cb --- /dev/null +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/CatWatcher.java @@ -0,0 +1,69 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.AnimalColor; +import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import org.bukkit.DyeColor; +import org.bukkit.entity.Cat; + +import java.util.Random; + +/** + * Created by libraryaddict on 6/05/2019. + */ +public class CatWatcher extends TameableWatcher { + public CatWatcher(Disguise disguise) { + super(disguise); + + setType(Cat.Type.values()[new Random().nextInt(Cat.Type.values().length)]); + } + + public Cat.Type getType() { + return Cat.Type.values()[getData(MetaIndex.CAT_TYPE)]; + } + + public void setType(Cat.Type type) { + setData(MetaIndex.CAT_TYPE, type.ordinal()); + sendData(MetaIndex.CAT_TYPE); + } + + @Deprecated + public void setCollarColor(AnimalColor color) { + setCollarColor(color.getDyeColor()); + } + + public void setCollarColor(DyeColor newColor) { + if (!isTamed()) { + setTamed(true); + } + + if (newColor == getCollarColor().getDyeColor()) { + return; + } + + setData(MetaIndex.CAT_COLLAR, (int) newColor.getWoolData()); + sendData(MetaIndex.CAT_COLLAR); + } + + public AnimalColor getCollarColor() { + return AnimalColor.getColorByWool(getData(MetaIndex.CAT_COLLAR)); + } + + public void setLyingDown(boolean value) { + setData(MetaIndex.CAT_LYING_DOWN, value); + sendData(MetaIndex.CAT_LYING_DOWN); + } + + public boolean isLyingDown() { + return getData(MetaIndex.CAT_LYING_DOWN); + } + + public void setLookingUp(boolean value) { + setData(MetaIndex.CAT_LOOKING_UP, value); + sendData(MetaIndex.CAT_LOOKING_UP); + } + + public boolean isLookingUp() { + return getData(MetaIndex.CAT_LOOKING_UP); + } +} diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/CreeperWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/CreeperWatcher.java index 914cbdb9..486b5b17 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/CreeperWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/CreeperWatcher.java @@ -13,12 +13,12 @@ public class CreeperWatcher extends InsentientWatcher public boolean isIgnited() { - return (boolean) getData(MetaIndex.CREEPER_IGNITED); + return getData(MetaIndex.CREEPER_IGNITED); } public boolean isPowered() { - return (boolean) getData(MetaIndex.CREEPER_POWERED); + return getData(MetaIndex.CREEPER_POWERED); } public void setIgnited(boolean ignited) diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/EggWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/EggWatcher.java new file mode 100644 index 00000000..031e01ba --- /dev/null +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/EggWatcher.java @@ -0,0 +1,19 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.Disguise; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +/** + * Created by libraryaddict on 6/05/2019. + */ +public class EggWatcher extends ThrowableWatcher { + public EggWatcher(Disguise disguise) { + super(disguise); + } + + @Override + protected ItemStack getDefaultItemStack() { + return new ItemStack(Material.EGG); + } +} diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/EnderPearlWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/EnderPearlWatcher.java new file mode 100644 index 00000000..56a74266 --- /dev/null +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/EnderPearlWatcher.java @@ -0,0 +1,19 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.Disguise; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +/** + * Created by libraryaddict on 6/05/2019. + */ +public class EnderPearlWatcher extends ThrowableWatcher { + public EnderPearlWatcher(Disguise disguise) { + super(disguise); + } + + @Override + protected ItemStack getDefaultItemStack() { + return new ItemStack(Material.ENDER_PEARL); + } +} diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/EnderSignalWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/EnderSignalWatcher.java new file mode 100644 index 00000000..592d40fd --- /dev/null +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/EnderSignalWatcher.java @@ -0,0 +1,27 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagWatcher; +import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +/** + * Created by libraryaddict on 6/05/2019. + */ +public class EnderSignalWatcher extends FlagWatcher { + public EnderSignalWatcher(Disguise disguise) { + super(disguise); + + setItemStack(new ItemStack(Material.ENDER_EYE)); + } + + public void setItemStack(ItemStack item) { + setData(MetaIndex.ENDER_SIGNAL_ITEM, item); + sendData(MetaIndex.ENDER_SIGNAL_ITEM); + } + + public ItemStack getItemStack() { + return getData(MetaIndex.ENDER_SIGNAL_ITEM); + } +} diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FireballWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FireballWatcher.java new file mode 100644 index 00000000..6dd3e89e --- /dev/null +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FireballWatcher.java @@ -0,0 +1,27 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagWatcher; +import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +/** + * Created by libraryaddict on 6/05/2019. + */ +public class FireballWatcher extends FlagWatcher { + public FireballWatcher(Disguise disguise) { + super(disguise); + + setData(MetaIndex.FIREBALL_ITEM, new ItemStack(Material.FIRE_CHARGE)); + } + + public ItemStack getItemStack() { + return getData(MetaIndex.FIREBALL_ITEM); + } + + public void setItemStack(ItemStack item) { + setData(MetaIndex.FIREBALL_ITEM, item); + sendData(MetaIndex.FIREBALL_ITEM); + } +} diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FireworkWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FireworkWatcher.java index 3117c6f9..671ded22 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FireworkWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FireworkWatcher.java @@ -7,6 +7,8 @@ import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; +import java.util.OptionalInt; + public class FireworkWatcher extends FlagWatcher { public FireworkWatcher(Disguise disguise) { super(disguise); @@ -17,7 +19,16 @@ public class FireworkWatcher extends FlagWatcher { return new ItemStack(Material.AIR); } - return (ItemStack) getData(MetaIndex.FIREWORK_ITEM); + return getData(MetaIndex.FIREWORK_ITEM); + } + + public boolean isShotAtAngle() { + return getData(MetaIndex.FIREWORK_SHOT_AT_ANGLE); + } + + public void setShotAtAngle(boolean shotAtAngle) { + setData(MetaIndex.FIREWORK_SHOT_AT_ANGLE, shotAtAngle); + sendData(MetaIndex.FIREWORK_SHOT_AT_ANGLE); } public void setFirework(ItemStack newItem) { @@ -32,12 +43,12 @@ public class FireworkWatcher extends FlagWatcher { sendData(MetaIndex.FIREWORK_ITEM); } - public void setAttachedEntity(int entityId) { + public void setAttachedEntity(OptionalInt entityId) { setData(MetaIndex.FIREWORK_ATTACHED_ENTITY, entityId); sendData(MetaIndex.FIREWORK_ATTACHED_ENTITY); } - public int getAttachedEntity() { + public OptionalInt getAttachedEntity() { return getData(MetaIndex.FIREWORK_ATTACHED_ENTITY); } } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FoxWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FoxWatcher.java new file mode 100644 index 00000000..13b0fa5d --- /dev/null +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/FoxWatcher.java @@ -0,0 +1,100 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import org.bukkit.entity.Fox; + +import java.util.Random; + +/** + * Created by libraryaddict on 6/05/2019. + */ +public class FoxWatcher extends AgeableWatcher { + public FoxWatcher(Disguise disguise) { + super(disguise); + + setType(Fox.Type.values()[new Random().nextInt(Fox.Type.values().length)]); + } + + public boolean isSitting() { + return getFoxFlag(1); + } + + public boolean isCrouching() { + return getFoxFlag(4); + } + + public void setCrouching(boolean value) { + setFoxFlag(4, value); + } + + public void setSitting(boolean value) { + setFoxFlag(1, value); + } + + public boolean isSleeping() { + return getFoxFlag(32); + } + + public void setSleeping(boolean value) { + setFoxFlag(32, value); + } + + public Fox.Type getType() { + return Fox.Type.values()[getData(MetaIndex.FOX_TYPE)]; + } + + public void setType(Fox.Type type) { + setData(MetaIndex.FOX_TYPE, type.ordinal()); + sendData(MetaIndex.FOX_TYPE); + } + + public void setHeadTilted(boolean value) { + setFoxFlag(8, value); + } + + public boolean isHeadTilted() { + return getFoxFlag(8); + } + + public void setSpringing(boolean value) { + setFoxFlag(16, value); + } + + public boolean isSpringing() { + return getFoxFlag(16); + } + + public void setTipToeing(boolean value) { + setFoxFlag(64, value); + } + + public boolean isTipToeing() { + return getFoxFlag(64); + } + + public void setAngry(boolean value) { + setFoxFlag(128, value); + } + + public boolean isAngry() { + return getFoxFlag(128); + } + + private boolean getFoxFlag(int value) { + return (getData(MetaIndex.FOX_META) & value) != 0; + } + + private void setFoxFlag(int no, boolean flag) { + byte b1 = getData(MetaIndex.FOX_META); + + if (flag) { + b1 = (byte) (b1 | no); + } else { + b1 = (byte) (b1 & ~no); + } + + setData(MetaIndex.FOX_META, b1); + sendData(MetaIndex.FOX_META); + } +} diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/GuardianWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/GuardianWatcher.java index ae0c8c2b..6a9d3679 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/GuardianWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/GuardianWatcher.java @@ -14,16 +14,16 @@ public class GuardianWatcher extends InsentientWatcher { /** * Is this guardian targetting someone? - * + * * @return */ public boolean isTarget() { - return ((int) getData(MetaIndex.GUARDIAN_TARGET)) != 0; + return getData(MetaIndex.GUARDIAN_TARGET) != 0; } /** * Shoot a beam at the given entityId. - * + * * @param entityId */ public void setTarget(int entityId) { @@ -37,7 +37,7 @@ public class GuardianWatcher extends InsentientWatcher { /** * Shoot a beam at the given player name. - * + * * @param playername */ public void setTarget(String playername) { diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/HorseWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/HorseWatcher.java index 46f602ec..74604818 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/HorseWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/HorseWatcher.java @@ -18,24 +18,7 @@ public class HorseWatcher extends AbstractHorseWatcher { } public Color getColor() { - return Color.values()[((Integer) getData(MetaIndex.HORSE_COLOR) & 0xFF)]; - } - - public ItemStack getHorseArmor() { - int horseValue = getHorseArmorAsInt(); - - switch (horseValue) { - case 1: - return new ItemStack(Material.IRON_HORSE_ARMOR); - case 2: - return new ItemStack(Material.GOLDEN_HORSE_ARMOR); - case 3: - return new ItemStack(Material.DIAMOND_HORSE_ARMOR); - default: - break; - } - - return null; + return Color.values()[(getData(MetaIndex.HORSE_COLOR) & 0xFF)]; } public Style getStyle() { @@ -47,38 +30,8 @@ public class HorseWatcher extends AbstractHorseWatcher { sendData(MetaIndex.HORSE_COLOR); } - protected int getHorseArmorAsInt() { - return getData(MetaIndex.HORSE_ARMOR); - } - - protected void setHorseArmor(int armor) { - setData(MetaIndex.HORSE_ARMOR, armor); - sendData(MetaIndex.HORSE_ARMOR); - } - public void setStyle(Style style) { setData(MetaIndex.HORSE_COLOR, getColor().ordinal() & 0xFF | style.ordinal() << 8); sendData(MetaIndex.HORSE_COLOR); } - - public void setHorseArmor(ItemStack item) { - int value = 0; - - if (item != null) { - Material mat = item.getType(); - - if (mat == Material.IRON_HORSE_ARMOR) { - value = 1; - } - else if (mat == Material.GOLDEN_HORSE_ARMOR) { - value = 2; - } - else if (mat == Material.DIAMOND_HORSE_ARMOR) { - value = 3; - } - } - - setHorseArmor(value); - } - } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/IllagerWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/IllagerWatcher.java index b1e530eb..ffbd48ec 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/IllagerWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/IllagerWatcher.java @@ -1,11 +1,12 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; +import net.minecraft.server.v1_14_R1.EntityRaider; /** * Created by libraryaddict on 9/06/2017. */ -public class IllagerWatcher extends InsentientWatcher { +public class IllagerWatcher extends RaiderWatcher { public IllagerWatcher(Disguise disguise) { super(disguise); } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/IllagerWizardWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/IllagerWizardWatcher.java index af486886..a49579db 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/IllagerWizardWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/IllagerWizardWatcher.java @@ -2,19 +2,19 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import org.bukkit.entity.Spellcaster; public class IllagerWizardWatcher extends IllagerWatcher { - public IllagerWizardWatcher(Disguise disguise) { super(disguise); } - public void setSpellTicks(int spellTicks) { - setData(MetaIndex.ILLAGER_SPELL_TICKS, (byte) spellTicks); - sendData(MetaIndex.ILLAGER_SPELL_TICKS); + public void setSpell(Spellcaster.Spell spell) { + setData(MetaIndex.ILLAGER_SPELL, (byte) spell.ordinal()); + sendData(MetaIndex.ILLAGER_SPELL); } - public int getSpellTicks() { - return getData(MetaIndex.ILLAGER_SPELL_TICKS); + public Spellcaster.Spell getSpell() { + return Spellcaster.Spell.values()[getData(MetaIndex.ILLAGER_SPELL)]; } } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/InsentientWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/InsentientWatcher.java index 7b905095..0b1cf986 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/InsentientWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/InsentientWatcher.java @@ -29,7 +29,7 @@ public class InsentientWatcher extends LivingWatcher { } private void setInsentientFlag(int i, boolean flag) { - byte b0 = (byte) getData(MetaIndex.INSENTIENT_META); + byte b0 = getData(MetaIndex.INSENTIENT_META); if (flag) { setData(MetaIndex.INSENTIENT_META, (byte) (b0 | 1 << i)); @@ -39,6 +39,6 @@ public class InsentientWatcher extends LivingWatcher { } private boolean getInsentientFlag(int i) { - return ((byte) getData(MetaIndex.INSENTIENT_META) & 1 << i) != 0; + return (getData(MetaIndex.INSENTIENT_META) & 1 << i) != 0; } } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ItemFrameWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ItemFrameWatcher.java index 1d7723fb..942fe55e 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ItemFrameWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ItemFrameWatcher.java @@ -17,7 +17,7 @@ public class ItemFrameWatcher extends FlagWatcher { return new ItemStack(Material.AIR); } - return (ItemStack) getData(MetaIndex.ITEMFRAME_ITEM); + return getData(MetaIndex.ITEMFRAME_ITEM); } public int getRotation() { diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/LivingWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/LivingWatcher.java index dfb50931..3aff5e87 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/LivingWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/LivingWatcher.java @@ -3,6 +3,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import com.comphenix.protocol.PacketType.Play.Server; import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.BlockPosition; import com.comphenix.protocol.wrappers.WrappedAttribute; import com.comphenix.protocol.wrappers.WrappedAttribute.Builder; import me.libraryaddict.disguise.DisguiseAPI; @@ -19,6 +20,7 @@ import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; +import java.util.Optional; public class LivingWatcher extends FlagWatcher { private double maxHealth; @@ -39,6 +41,23 @@ public class LivingWatcher extends FlagWatcher { return clone; } + public void setBedPosition(BlockPosition blockPosition) { + Optional optional; + + if (blockPosition != null) { + optional = Optional.of(blockPosition); + } else { + optional = Optional.empty(); + } + + setData(MetaIndex.LIVING_BED_POSITION, optional); + sendData(MetaIndex.LIVING_BED_POSITION); + } + + public BlockPosition getBedPosition() { + return getData(MetaIndex.LIVING_BED_POSITION).orElse(null); + } + public float getHealth() { return getData(MetaIndex.LIVING_HEALTH); } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/LlamaWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/LlamaWatcher.java index 0887d5fd..c03d6760 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/LlamaWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/LlamaWatcher.java @@ -26,6 +26,7 @@ public class LlamaWatcher extends ChestedHorseWatcher { sendData(MetaIndex.LLAMA_CARPET); } + @Deprecated public void setCarpet(AnimalColor color) { setCarpet(color.getDyeColor()); } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/MushroomCowWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/MushroomCowWatcher.java new file mode 100644 index 00000000..8ddcaf57 --- /dev/null +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/MushroomCowWatcher.java @@ -0,0 +1,23 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import org.bukkit.entity.MushroomCow; + +/** + * Created by libraryaddict on 6/05/2019. + */ +public class MushroomCowWatcher extends AgeableWatcher { + public MushroomCowWatcher(Disguise disguise) { + super(disguise); + } + + public MushroomCow.Variant getVariant() { + return MushroomCow.Variant.valueOf(getData(MetaIndex.MUSHROOM_COW_TYPE).toUpperCase()); + } + + public void setVariant(MushroomCow.Variant variant) { + setData(MetaIndex.MUSHROOM_COW_TYPE, variant.name().toLowerCase()); + sendData(MetaIndex.MUSHROOM_COW_TYPE); + } +} diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/OcelotWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/OcelotWatcher.java index db81accb..2ccd72e5 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/OcelotWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/OcelotWatcher.java @@ -6,22 +6,18 @@ import org.bukkit.entity.Ocelot.Type; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; -public class OcelotWatcher extends TameableWatcher -{ +public class OcelotWatcher extends AgeableWatcher { - public OcelotWatcher(Disguise disguise) - { + public OcelotWatcher(Disguise disguise) { super(disguise); } - public Type getType() - { - return Ocelot.Type.getType(getData(MetaIndex.OCELOT_TYPE)); + public boolean isTrusting() { + return getData(MetaIndex.OCELOT_TRUST); } - public void setType(Type newType) - { - setData(MetaIndex.OCELOT_TYPE, newType.getId()); - sendData(MetaIndex.OCELOT_TYPE); + public void setTrusting(boolean trusting) { + setData(MetaIndex.OCELOT_TRUST, trusting); + sendData(MetaIndex.OCELOT_TRUST); } } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PandaWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PandaWatcher.java new file mode 100644 index 00000000..bbfdb9c9 --- /dev/null +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PandaWatcher.java @@ -0,0 +1,115 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import org.bukkit.entity.Panda; + +import java.util.Random; + +/** + * Created by libraryaddict on 6/05/2019. + */ +public class PandaWatcher extends AgeableWatcher { + public PandaWatcher(Disguise disguise) { + super(disguise); + + setMainGene(Panda.Gene.values()[new Random().nextInt(Panda.Gene.values().length)]); + setHiddenGene(Panda.Gene.values()[new Random().nextInt(Panda.Gene.values().length)]); + } + + public Panda.Gene getMainGene() { + int id = getData(MetaIndex.PANDA_MAIN_GENE); + + for (Panda.Gene gene : Panda.Gene.values()) { + if (gene.ordinal() != id) { + continue; + } + + return gene; + } + + return Panda.Gene.NORMAL; + } + + public Panda.Gene getHiddenGene() { + int id = getData(MetaIndex.PANDA_HIDDEN_GENE); + + for (Panda.Gene gene : Panda.Gene.values()) { + if (gene.ordinal() != id) { + continue; + } + + return gene; + } + + return Panda.Gene.NORMAL; + } + + public void setMainGene(Panda.Gene gene) { + setData(MetaIndex.PANDA_MAIN_GENE, (byte) gene.ordinal()); + sendData(MetaIndex.PANDA_MAIN_GENE); + } + + public void setHiddenGene(Panda.Gene gene) { + setData(MetaIndex.PANDA_HIDDEN_GENE, (byte) gene.ordinal()); + sendData(MetaIndex.PANDA_HIDDEN_GENE); + } + + public void setSneeze(boolean value) { + setPandaFlag(2, value); + } + + public boolean isSneeze() { + return getPandaFlag(2); + } + + public void setTumble(boolean value) { + setPandaFlag(4, value); + } + + public boolean isTumble() { + return getPandaFlag(4); + } + + public void setSitting(boolean value) { + setPandaFlag(8, value); + } + + public boolean isSitting() { + return getPandaFlag(8); + } + + public void setUpsideDown(boolean value) { + setPandaFlag(16, value); + } + + public boolean isUpsideDown() { + return getPandaFlag(16); + } + + public void setHeadShaking(int timeInTicks) { + setData(MetaIndex.PANDA_HEAD_SHAKING, timeInTicks); + sendData(MetaIndex.PANDA_HEAD_SHAKING); + } + + public int getHeadShakingTicks() { + return getData(MetaIndex.PANDA_HEAD_SHAKING); + } + + private boolean getPandaFlag(int value) { + return (getData(MetaIndex.PANDA_META) & value) != 0; + } + + private void setPandaFlag(int no, boolean flag) { + byte b1 = getData(MetaIndex.PANDA_META); + + if (flag) { + b1 = (byte) (b1 | no); + } else { + b1 = (byte) (b1 & ~no); + } + + setData(MetaIndex.PANDA_META, b1); + sendData(MetaIndex.PANDA_META); + } +} diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PillagerWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PillagerWatcher.java new file mode 100644 index 00000000..d099b1d0 --- /dev/null +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PillagerWatcher.java @@ -0,0 +1,22 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.MetaIndex; + +/** + * Created by libraryaddict on 6/05/2019. + */ +public class PillagerWatcher extends IllagerWatcher { + public PillagerWatcher(Disguise disguise) { + super(disguise); + } + + public void setAimimgBow(boolean value) { + setData(MetaIndex.PILLAGER_AIMING_BOW, value); + sendData(MetaIndex.PILLAGER_AIMING_BOW); + } + + public boolean isAimingBow() { + return getData(MetaIndex.PILLAGER_AIMING_BOW); + } +} diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PlayerWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PlayerWatcher.java index 31f096ab..7c533c14 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PlayerWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/PlayerWatcher.java @@ -1,5 +1,6 @@ package me.libraryaddict.disguise.disguisetypes.watchers; +import me.libraryaddict.disguise.disguisetypes.EntityPose; import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; import org.bukkit.inventory.MainHand; @@ -18,8 +19,6 @@ import me.libraryaddict.disguise.disguisetypes.PlayerDisguise; import me.libraryaddict.disguise.utilities.DisguiseUtilities; public class PlayerWatcher extends LivingWatcher { - private boolean isInBed; - private BlockFace sleepingDirection; private boolean alwaysShowInTab = DisguiseConfig.isShowDisguisedPlayersInTab(); public PlayerWatcher(Disguise disguise) { @@ -42,8 +41,6 @@ public class PlayerWatcher extends LivingWatcher { @Override public PlayerWatcher clone(Disguise disguise) { PlayerWatcher watcher = (PlayerWatcher) super.clone(disguise); - watcher.isInBed = isInBed; - watcher.sleepingDirection = sleepingDirection; watcher.alwaysShowInTab = alwaysShowInTab; return watcher; } @@ -57,16 +54,9 @@ public class PlayerWatcher extends LivingWatcher { return MainHand.values()[getData(MetaIndex.PLAYER_HAND)]; } + @Deprecated 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 { - return BlockFace.EAST; - } - } - return sleepingDirection; + return BlockFace.SELF; } // Bit 0 (0x01): Cape enabled @@ -78,7 +68,7 @@ public class PlayerWatcher extends LivingWatcher { // Bit 6 (0x40): Hat enabled private boolean isSkinFlag(int i) { - return ((byte) getData(MetaIndex.PLAYER_SKIN) & 1 << i) != 0; + return (getData(MetaIndex.PLAYER_SKIN) & 1 << i) != 0; } public boolean isCapeEnabled() { @@ -151,8 +141,9 @@ public class PlayerWatcher extends LivingWatcher { sendData(MetaIndex.PLAYER_SKIN); } + @Deprecated public boolean isSleeping() { - return isInBed; + return getEntityPose() == EntityPose.SLEEPING; } public void setSkin(String playerName) { @@ -163,10 +154,12 @@ public class PlayerWatcher extends LivingWatcher { ((PlayerDisguise) getDisguise()).setSkin(profile); } + @Deprecated public void setSleeping(BlockFace sleepingDirection) { setSleeping(true, sleepingDirection); } + @Deprecated public void setSleeping(boolean sleep) { setSleeping(sleep, null); } @@ -177,56 +170,18 @@ public class PlayerWatcher extends LivingWatcher { * @param sleeping * @param sleepingDirection */ + + @Deprecated public void setSleeping(boolean sleeping, BlockFace sleepingDirection) { - if (sleepingDirection != null) { - this.sleepingDirection = BlockFace.values()[sleepingDirection.ordinal() % 4]; + if (sleeping == isSleeping()) { + return; } - isInBed = sleeping; - - if (DisguiseConfig.isBedPacketsEnabled() && DisguiseUtilities.isDisguiseInUse(getDisguise())) { - try { - if (isSleeping()) { - for (Player player : DisguiseUtilities.getPerverts(getDisguise())) { - PacketContainer[] packets = DisguiseUtilities - .getBedPackets(getDisguise().getEntity().getLocation(), player.getLocation(), - (PlayerDisguise) getDisguise()); - - if (getDisguise().getEntity() == player) { - for (PacketContainer packet : packets) { - packet = packet.shallowClone(); - - packet.getIntegers().write(0, DisguiseAPI.getSelfDisguiseId()); - - ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet); - } - } else { - for (PacketContainer packet : packets) { - ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet); - } - } - } - } else { - PacketContainer packet = new PacketContainer(Server.ANIMATION); - - StructureModifier mods = packet.getIntegers(); - - mods.write(0, getDisguise().getEntity().getEntityId()); - mods.write(1, 3); - - for (Player player : DisguiseUtilities.getPerverts(getDisguise())) { - ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet); - } - } - } - catch (Exception ex) { - ex.printStackTrace(); - } - } + setEntityPose(sleeping ? EntityPose.SLEEPING : EntityPose.STANDING); } private void setSkinFlags(int i, boolean flag) { - byte b0 = (byte) getData(MetaIndex.PLAYER_SKIN); + byte b0 = getData(MetaIndex.PLAYER_SKIN); if (flag) { setData(MetaIndex.PLAYER_SKIN, (byte) (b0 | 1 << i)); diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/RabbitWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/RabbitWatcher.java index 9e349611..ff0ff036 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/RabbitWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/RabbitWatcher.java @@ -16,7 +16,7 @@ public class RabbitWatcher extends AgeableWatcher public RabbitType getType() { - return RabbitType.getType((int) getData(MetaIndex.RABBIT_TYPE)); + return RabbitType.getType(getData(MetaIndex.RABBIT_TYPE)); } public void setType(RabbitType type) diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/RaiderWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/RaiderWatcher.java new file mode 100644 index 00000000..7dc1ff68 --- /dev/null +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/RaiderWatcher.java @@ -0,0 +1,22 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.MetaIndex; + +/** + * Created by libraryaddict on 6/05/2019. + */ +public class RaiderWatcher extends InsentientWatcher { + public RaiderWatcher(Disguise disguise) { + super(disguise); + } + + public void setCastingSpell(boolean value) { + setData(MetaIndex.RAIDER_CASTING_SPELL, value); + sendData(MetaIndex.RAIDER_CASTING_SPELL); + } + + public boolean isCastingSpell() { + return getData(MetaIndex.RAIDER_CASTING_SPELL); + } +} diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/RavagerWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/RavagerWatcher.java new file mode 100644 index 00000000..d453fbe9 --- /dev/null +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/RavagerWatcher.java @@ -0,0 +1,12 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.Disguise; + +/** + * Created by libraryaddict on 6/05/2019. + */ +public class RavagerWatcher extends RaiderWatcher { + public RavagerWatcher(Disguise disguise) { + super(disguise); + } +} diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SheepWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SheepWatcher.java index 09b1f563..83652e13 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SheepWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SheepWatcher.java @@ -19,6 +19,7 @@ public class SheepWatcher extends AgeableWatcher { return (getData(MetaIndex.SHEEP_WOOL) & 16) != 0; } + @Deprecated public void setColor(AnimalColor color) { setColor(color.getDyeColor()); } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ShulkerWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ShulkerWatcher.java index 71dd234d..ef25a993 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ShulkerWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ShulkerWatcher.java @@ -5,6 +5,7 @@ import com.comphenix.protocol.wrappers.EnumWrappers.Direction; import me.libraryaddict.disguise.disguisetypes.AnimalColor; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import org.bukkit.DyeColor; import org.bukkit.block.BlockFace; import java.util.Optional; @@ -51,11 +52,21 @@ public class ShulkerWatcher extends InsentientWatcher { sendData(MetaIndex.SHULKER_PEEKING); } + @Deprecated public void setColor(AnimalColor color) { setData(MetaIndex.SHULKER_COLOR, color.getDyeColor().getWoolData()); sendData(MetaIndex.SHULKER_COLOR); } + public void setColor(DyeColor newColor) { + if (newColor == getColor().getDyeColor()) { + return; + } + + setData(MetaIndex.SHULKER_COLOR, newColor.getWoolData()); + sendData(MetaIndex.SHULKER_COLOR); + } + public AnimalColor getColor() { return AnimalColor.getColorByWool(getData(MetaIndex.SHULKER_COLOR)); } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SkeletonWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SkeletonWatcher.java index 3f4eef62..e3ee938f 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SkeletonWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SkeletonWatcher.java @@ -10,13 +10,4 @@ public class SkeletonWatcher extends InsentientWatcher { public SkeletonWatcher(Disguise disguise) { super(disguise); } - - public void setSwingArms(boolean swingingArms) { - setData(MetaIndex.SKELETON_SWING_ARMS, swingingArms); - sendData(MetaIndex.SKELETON_SWING_ARMS); - } - - public boolean isSwingArms() { - return getData(MetaIndex.SKELETON_SWING_ARMS); - } } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SlimeWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SlimeWatcher.java index 25c216db..a57caf0b 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SlimeWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SlimeWatcher.java @@ -12,7 +12,7 @@ public class SlimeWatcher extends InsentientWatcher { } public int getSize() { - return (int) getData(MetaIndex.SLIME_SIZE); + return getData(MetaIndex.SLIME_SIZE); } public void setSize(int size) { diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SmallFireballWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SmallFireballWatcher.java new file mode 100644 index 00000000..a1612588 --- /dev/null +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SmallFireballWatcher.java @@ -0,0 +1,12 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.Disguise; + +/** + * Created by libraryaddict on 6/05/2019. + */ +public class SmallFireballWatcher extends FireballWatcher { + public SmallFireballWatcher(Disguise disguise) { + super(disguise); + } +} diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SnowballWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SnowballWatcher.java new file mode 100644 index 00000000..2faa4ad8 --- /dev/null +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/SnowballWatcher.java @@ -0,0 +1,19 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.Disguise; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +/** + * Created by libraryaddict on 6/05/2019. + */ +public class SnowballWatcher extends ThrowableWatcher { + public SnowballWatcher(Disguise disguise) { + super(disguise); + } + + @Override + protected ItemStack getDefaultItemStack() { + return new ItemStack(Material.SNOWBALL); + } +} diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TameableWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TameableWatcher.java index dc4593b5..842e8dfd 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TameableWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TameableWatcher.java @@ -30,12 +30,12 @@ public class TameableWatcher extends AgeableWatcher protected boolean isTameableFlag(int no) { - return ((byte) getData(MetaIndex.TAMEABLE_META) & no) != 0; + return (getData(MetaIndex.TAMEABLE_META) & no) != 0; } protected void setTameableFlag(int no, boolean flag) { - byte value = (byte) getData(MetaIndex.TAMEABLE_META); + byte value = getData(MetaIndex.TAMEABLE_META); if (flag) { diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ThrowableWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ThrowableWatcher.java new file mode 100644 index 00000000..2764c3b2 --- /dev/null +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ThrowableWatcher.java @@ -0,0 +1,28 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.Disguise; +import me.libraryaddict.disguise.disguisetypes.FlagWatcher; +import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import org.bukkit.inventory.ItemStack; + +/** + * Created by libraryaddict on 6/05/2019. + */ +public abstract class ThrowableWatcher extends FlagWatcher { + public ThrowableWatcher(Disguise disguise) { + super(disguise); + + setItemStack(getDefaultItemStack()); + } + + protected abstract ItemStack getDefaultItemStack(); + + public ItemStack getItemStack() { + return getData(MetaIndex.THROWABLE_ITEM); + } + + public void setItemStack(ItemStack item) { + setData(MetaIndex.THROWABLE_ITEM, item); + sendData(MetaIndex.THROWABLE_ITEM); + } +} diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ThrownExpBottleWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ThrownExpBottleWatcher.java new file mode 100644 index 00000000..9eba9af9 --- /dev/null +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ThrownExpBottleWatcher.java @@ -0,0 +1,19 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.Disguise; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +/** + * Created by libraryaddict on 6/05/2019. + */ +public class ThrownExpBottleWatcher extends ThrowableWatcher { + public ThrownExpBottleWatcher(Disguise disguise) { + super(disguise); + } + + @Override + protected ItemStack getDefaultItemStack() { + return new ItemStack(Material.EXPERIENCE_BOTTLE); + } +} diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TraderLlamaWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TraderLlamaWatcher.java new file mode 100644 index 00000000..d66f668d --- /dev/null +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/TraderLlamaWatcher.java @@ -0,0 +1,12 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.Disguise; + +/** + * Created by libraryaddict on 6/05/2019. + */ +public class TraderLlamaWatcher extends LlamaWatcher { + public TraderLlamaWatcher(Disguise disguise) { + super(disguise); + } +} diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/VillagerWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/VillagerWatcher.java index 8c61f755..d5d6132d 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/VillagerWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/VillagerWatcher.java @@ -2,27 +2,49 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import me.libraryaddict.disguise.disguisetypes.VillagerData; import me.libraryaddict.disguise.utilities.DisguiseUtilities; +import org.bukkit.entity.Villager; import org.bukkit.entity.Villager.Profession; -public class VillagerWatcher extends AgeableWatcher { +public class VillagerWatcher extends AbstractVillagerWatcher { public VillagerWatcher(Disguise disguise) { super(disguise); + setProfession(Profession.values()[DisguiseUtilities.random.nextInt(Profession.values().length)]); } + public VillagerData getVillagerData() { + return getData(MetaIndex.VILLAGER_DATA); + } + + public void setVillagerData(VillagerData villagerData) { + setData(MetaIndex.VILLAGER_DATA, villagerData); + sendData(MetaIndex.VILLAGER_DATA); + } + public Profession getProfession() { - return Profession.values()[getData(MetaIndex.VILLAGER_PROFESSION) + 1]; + return getVillagerData().getProfession(); } - @Deprecated - public void setProfession(int professionId) { - setData(MetaIndex.VILLAGER_PROFESSION, professionId); - sendData(MetaIndex.VILLAGER_PROFESSION); + public Villager.Type getType() { + return getVillagerData().getType(); } - public void setProfession(Profession newProfession) { - setProfession(newProfession.ordinal() - 1); + public int getLevel() { + return getVillagerData().getLevel(); + } + + public void setProfession(Profession profession) { + setVillagerData(new VillagerData(getType(), profession, getLevel())); + } + + public void setType(Villager.Type type) { + setVillagerData(new VillagerData(type, getProfession(), getLevel())); + } + + public void setLevel(int level) { + setVillagerData(new VillagerData(getType(), getProfession(), getLevel())); } } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/VindicatorWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/VindicatorWatcher.java index a5cf3548..6985be1c 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/VindicatorWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/VindicatorWatcher.java @@ -8,10 +8,4 @@ public class VindicatorWatcher extends IllagerWatcher { public VindicatorWatcher(Disguise disguise) { super(disguise); } - - public void setJohnny(boolean isJohnny) { - setData(MetaIndex.ILLAGER_META, (byte) (isJohnny ? 1 : 0)); - sendData(MetaIndex.ILLAGER_META); - } - } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WanderingTraderWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WanderingTraderWatcher.java new file mode 100644 index 00000000..acba08bf --- /dev/null +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WanderingTraderWatcher.java @@ -0,0 +1,12 @@ +package me.libraryaddict.disguise.disguisetypes.watchers; + +import me.libraryaddict.disguise.disguisetypes.Disguise; + +/** + * Created by libraryaddict on 6/05/2019. + */ +public class WanderingTraderWatcher extends AbstractVillagerWatcher { + public WanderingTraderWatcher(Disguise disguise) { + super(disguise); + } +} diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WitchWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WitchWatcher.java index a36d06a1..c68d506f 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WitchWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WitchWatcher.java @@ -6,23 +6,18 @@ import me.libraryaddict.disguise.disguisetypes.MetaIndex; /** * @author Navid */ -public class WitchWatcher extends InsentientWatcher -{ +public class WitchWatcher extends RaiderWatcher { - public WitchWatcher(Disguise disguise) - { + public WitchWatcher(Disguise disguise) { super(disguise); } - public boolean isAggressive() - { - return (boolean) getData(MetaIndex.WITCH_AGGRESSIVE); + public boolean isAggressive() { + return getData(MetaIndex.WITCH_AGGRESSIVE); } - public void setAggressive(boolean aggressive) - { + public void setAggressive(boolean aggressive) { setData(MetaIndex.WITCH_AGGRESSIVE, aggressive); sendData(MetaIndex.WITCH_AGGRESSIVE); } - } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WitherSkullWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WitherSkullWatcher.java index 4bedec8c..614c7cbd 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WitherSkullWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WitherSkullWatcher.java @@ -14,7 +14,7 @@ public class WitherSkullWatcher extends FlagWatcher public boolean isBlue() { - return (boolean) getData(MetaIndex.WITHER_SKULL_BLUE); + return getData(MetaIndex.WITHER_SKULL_BLUE); } public void setBlue(boolean blue) diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WitherWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WitherWatcher.java index 8529c7af..8c1c9460 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WitherWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WitherWatcher.java @@ -17,12 +17,12 @@ public class WitherWatcher extends InsentientWatcher /** * Returns the amount of time this Wither is invulnerable for - * + * * @return */ public int getInvulnerability() { - return (int) getData(MetaIndex.WITHER_INVUL); + return getData(MetaIndex.WITHER_INVUL); } public int[] getTargets() diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WolfWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WolfWatcher.java index 9db9aee0..a040035c 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WolfWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/WolfWatcher.java @@ -51,6 +51,7 @@ public class WolfWatcher extends TameableWatcher { setTameableFlag(2, angry); } + @Deprecated public void setCollarColor(AnimalColor color) { setCollarColor(color.getDyeColor()); } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ZombieVillagerWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ZombieVillagerWatcher.java index c8653d39..f47eb9ef 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ZombieVillagerWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ZombieVillagerWatcher.java @@ -2,12 +2,18 @@ package me.libraryaddict.disguise.disguisetypes.watchers; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import me.libraryaddict.disguise.disguisetypes.VillagerData; +import org.bukkit.entity.Villager; import org.bukkit.entity.Villager.Profession; +import java.util.Random; + public class ZombieVillagerWatcher extends ZombieWatcher { public ZombieVillagerWatcher(Disguise disguise) { super(disguise); + + setProfession(Profession.values()[new Random().nextInt(Profession.values().length)]); } public boolean isShaking() { @@ -20,7 +26,7 @@ public class ZombieVillagerWatcher extends ZombieWatcher { * @return */ public boolean isVillager() { - return ((int) getData(MetaIndex.ZOMBIE_VILLAGER_PROFESSION)) != 0; + return getData(MetaIndex.ZOMBIE_VILLAGER_PROFESSION).getProfession() != Profession.NONE; } public void setShaking(boolean shaking) { @@ -28,32 +34,36 @@ public class ZombieVillagerWatcher extends ZombieWatcher { sendData(MetaIndex.ZOMBIE_VILLAGER_SHAKING); } - /** - * Only returns a valid value if this zombie is a villager. - * - * @return - */ + public VillagerData getVillagerData() { + return getData(MetaIndex.VILLAGER_DATA); + } + + public void setVillagerData(VillagerData villagerData) { + setData(MetaIndex.VILLAGER_DATA, villagerData); + sendData(MetaIndex.VILLAGER_DATA); + } + public Profession getProfession() { - return Profession.values()[getData(MetaIndex.ZOMBIE_VILLAGER_PROFESSION) + 1]; + return getVillagerData().getProfession(); } - /** - * Sets the profession of this zombie, in turn turning it into a Zombie Villager - * - * @param id - */ - @Deprecated - public void setProfession(int id) { - setData(MetaIndex.ZOMBIE_VILLAGER_PROFESSION, id); - sendData(MetaIndex.ZOMBIE_VILLAGER_PROFESSION); + public Villager.Type getType() { + return getVillagerData().getType(); + } + + public int getLevel() { + return getVillagerData().getLevel(); } - /** - * Sets the profession of this zombie, in turn turning it into a Zombie Villager - * - * @param profession - */ public void setProfession(Profession profession) { - setProfession(profession.ordinal() - 1); + setVillagerData(new VillagerData(getType(), profession, getLevel())); + } + + public void setType(Villager.Type type) { + setVillagerData(new VillagerData(type, getProfession(), getLevel())); + } + + public void setLevel(int level) { + setVillagerData(new VillagerData(getType(), getProfession(), getLevel())); } } diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ZombieWatcher.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ZombieWatcher.java index 4cb41fc7..4434d809 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ZombieWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/watchers/ZombieWatcher.java @@ -17,10 +17,6 @@ public class ZombieWatcher extends InsentientWatcher { return getData(MetaIndex.ZOMBIE_BABY); } - public boolean isAggressive() { - return (boolean) getData(MetaIndex.ZOMBIE_AGGRESSIVE); - } - public void setAdult() { setBaby(false); } @@ -34,11 +30,6 @@ public class ZombieWatcher extends InsentientWatcher { sendData(MetaIndex.ZOMBIE_BABY); } - public void setAggressive(boolean handsup) { - setData(MetaIndex.ZOMBIE_AGGRESSIVE, handsup); - sendData(MetaIndex.ZOMBIE_AGGRESSIVE); - } - public boolean isConverting() { return getData(MetaIndex.ZOMBIE_CONVERTING_DROWNED); } diff --git a/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java b/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java index 8214a505..cc2b677d 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java @@ -27,13 +27,13 @@ import me.libraryaddict.disguise.utilities.reflection.FakeBoundingBox; import me.libraryaddict.disguise.utilities.reflection.LibsProfileLookup; import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; import me.libraryaddict.disguise.utilities.translations.LibsMsg; -import org.apache.commons.io.FileUtils; import org.apache.logging.log4j.util.Strings; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.BlockFace; +import org.bukkit.craftbukkit.libs.org.apache.commons.io.FileUtils; import org.bukkit.entity.*; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; @@ -559,13 +559,13 @@ public class DisguiseUtilities { int entity = disguise.getEntity().getEntityId(); PlayerWatcher watcher = disguise.getWatcher(); - PacketContainer setBed = new PacketContainer(Server.BED); + //PacketContainer setBed = new PacketContainer(Server.BED); int bX = (getChunkCord(playerLocation.getBlockX()) * 16) + 1 + watcher.getSleepingDirection().getModX(); int bZ = (getChunkCord(playerLocation.getBlockZ()) * 16) + 1 + watcher.getSleepingDirection().getModZ(); - setBed.getIntegers().write(0, entity); - setBed.getBlockPositionModifier().write(0, new BlockPosition(bX, 0, bZ)); + // setBed.getIntegers().write(0, entity); + // setBed.getBlockPositionModifier().write(0, new BlockPosition(bX, 0, bZ)); PacketContainer teleport = new PacketContainer(Server.ENTITY_TELEPORT); @@ -577,7 +577,7 @@ public class DisguiseUtilities { doubles.write(1, DisguiseUtilities.getYModifier(disguise.getEntity(), disguise) + sleepingLocation.getY()); doubles.write(2, sleepingLocation.getZ()); - return new PacketContainer[]{setBed, teleport}; + return new PacketContainer[]{teleport}; } public static Disguise getClonedDisguise(String key) { @@ -903,10 +903,13 @@ public class DisguiseUtilities { } for (Constructor constructor : chunkClass.getConstructors()) { - if (constructor.getParameterTypes().length != 8) + if (constructor.getParameterTypes().length != 9) continue; - bedChunk = constructor.newInstance(world, 0, 0, biomes, null, null, null, 0L); + Object cords = ReflectionManager.getNmsConstructor("ChunkCoordIntPair", int.class, int.class) + .newInstance(0, 0); + + bedChunk = constructor.newInstance(world, cords, biomes, null, null, null, 0L, null, null); break; } @@ -917,8 +920,8 @@ public class DisguiseUtilities { Field cSection = chunkClass.getDeclaredField("sections"); cSection.setAccessible(true); - Object chunkSection = ReflectionManager.getNmsClass("ChunkSection").getConstructor(int.class, boolean.class) - .newInstance(0, true); + Object chunkSection = ReflectionManager.getNmsClass("ChunkSection").getConstructor(int.class) + .newInstance(0); Class blockClass = ReflectionManager.getNmsClass("Block"); Object REGISTRY = ReflectionManager.getNmsField("IRegistry", "BLOCK").get(null); @@ -938,8 +941,6 @@ public class DisguiseUtilities { Method setType = chunkSection.getClass() .getMethod("setType", int.class, int.class, int.class, ReflectionManager.getNmsClass("IBlockData")); - Method setSky = chunkSection.getClass().getMethod("a", int.class, int.class, int.class, int.class); - Method setEmitted = chunkSection.getClass().getMethod("b", int.class, int.class, int.class, int.class); for (BlockFace face : new BlockFace[]{BlockFace.EAST, BlockFace.WEST, BlockFace.NORTH, BlockFace.SOUTH}) { int x = 1 + face.getModX(); @@ -961,7 +962,7 @@ public class DisguiseUtilities { .createPacketConstructor(PacketType.Play.Server.MAP_CHUNK, bedChunk, 65535) .createPacket(bedChunk, 65535); - Field threadField = ReflectionManager.getNmsField("MinecraftServer", "primaryThread"); + Field threadField = ReflectionManager.getNmsField("MinecraftServer", "serverThread"); threadField.setAccessible(true); mainThread = (Thread) threadField.get(ReflectionManager.getMinecraftServer()); @@ -1036,10 +1037,10 @@ public class DisguiseUtilities { .get(entityTrackerEntry); Method clear = ReflectionManager - .getNmsMethod("EntityTrackerEntry", "clear", ReflectionManager.getNmsClass("EntityPlayer")); + .getNmsMethod("EntityTrackerEntry", "a", ReflectionManager.getNmsClass("EntityPlayer")); - final Method updatePlayer = ReflectionManager.getNmsMethod("EntityTrackerEntry", "updatePlayer", - ReflectionManager.getNmsClass("EntityPlayer")); + final Method updatePlayer = ReflectionManager + .getNmsMethod("EntityTrackerEntry", "b", ReflectionManager.getNmsClass("EntityPlayer")); trackedPlayers = (Set) new HashSet(trackedPlayers).clone(); // Copy before iterating to prevent // ConcurrentModificationException @@ -1090,10 +1091,10 @@ public class DisguiseUtilities { .get(entityTrackerEntry); Method clear = ReflectionManager - .getNmsMethod("EntityTrackerEntry", "clear", ReflectionManager.getNmsClass("EntityPlayer")); + .getNmsMethod("EntityTrackerEntry", "a", ReflectionManager.getNmsClass("EntityPlayer")); - final Method updatePlayer = ReflectionManager.getNmsMethod("EntityTrackerEntry", "updatePlayer", - ReflectionManager.getNmsClass("EntityPlayer")); + final Method updatePlayer = ReflectionManager + .getNmsMethod("EntityTrackerEntry", "b", ReflectionManager.getNmsClass("EntityPlayer")); trackedPlayers = (Set) new HashSet(trackedPlayers).clone(); // Copy before iterating to prevent // ConcurrentModificationException @@ -1161,10 +1162,10 @@ public class DisguiseUtilities { .get(entityTrackerEntry); final Method clear = ReflectionManager - .getNmsMethod("EntityTrackerEntry", "clear", ReflectionManager.getNmsClass("EntityPlayer")); + .getNmsMethod("EntityTrackerEntry", "a", ReflectionManager.getNmsClass("EntityPlayer")); - final Method updatePlayer = ReflectionManager.getNmsMethod("EntityTrackerEntry", "updatePlayer", - ReflectionManager.getNmsClass("EntityPlayer")); + final Method updatePlayer = ReflectionManager + .getNmsMethod("EntityTrackerEntry", "b", ReflectionManager.getNmsClass("EntityPlayer")); trackedPlayers = (Set) new HashSet(trackedPlayers).clone(); @@ -1567,7 +1568,7 @@ public class DisguiseUtilities { boolean isMoving = false; try { - Field field = ReflectionManager.getNmsClass("EntityTrackerEntry").getDeclaredField("isMoving"); + Field field = ReflectionManager.getNmsClass("EntityTrackerEntry").getDeclaredField("q"); field.setAccessible(true); isMoving = field.getBoolean(entityTrackerEntry); } @@ -1630,10 +1631,10 @@ public class DisguiseUtilities { // If the disguised is sleeping for w/e reason if (player.isSleeping()) { - sendSelfPacket(player, + /* sendSelfPacket(player, manager.createPacketConstructor(Server.BED, player, ReflectionManager.getBlockPosition(0, 0, 0)) .createPacket(player, ReflectionManager - .getBlockPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()))); + .getBlockPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())));*/ } // Resend any active potion effects @@ -1811,7 +1812,6 @@ public class DisguiseUtilities { case WITHER_SKULL: return (byte) (value - 128); case ARROW: - case TIPPED_ARROW: case SPECTRAL_ARROW: return (byte) -value; case PAINTING: @@ -1832,8 +1832,7 @@ public class DisguiseUtilities { public static double getYModifier(Entity entity, Disguise disguise) { double yMod = 0; - if ((disguise.getType() != DisguiseType.PLAYER || !((PlayerWatcher) disguise.getWatcher()).isSleeping()) && - entity.getType() == EntityType.DROPPED_ITEM) { + if (disguise.getType() != DisguiseType.PLAYER && entity.getType() == EntityType.DROPPED_ITEM) { yMod -= 0.13; } @@ -1859,7 +1858,7 @@ public class DisguiseUtilities { default: return yMod + 0.4; } - case TIPPED_ARROW: + case ARROW: case SPECTRAL_ARROW: case BOAT: case EGG: @@ -1873,12 +1872,6 @@ public class DisguiseUtilities { case THROWN_EXP_BOTTLE: case WITHER_SKULL: return yMod + 0.7; - case PLAYER: - if (DisguiseConfig.isBedPacketsEnabled() && ((PlayerWatcher) disguise.getWatcher()).isSleeping()) { - return yMod + 0.35; - } - - break; case DROPPED_ITEM: return yMod + 0.13; default: diff --git a/src/main/java/me/libraryaddict/disguise/utilities/LibsPremium.java b/src/main/java/me/libraryaddict/disguise/utilities/LibsPremium.java index 267f61c1..1bfa5280 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/LibsPremium.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/LibsPremium.java @@ -1,6 +1,7 @@ package me.libraryaddict.disguise.utilities; import com.comphenix.protocol.PacketType; +import me.libraryaddict.disguise.LibsDisguises; import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; import org.bukkit.configuration.file.YamlConfiguration; @@ -235,9 +236,6 @@ public class LibsPremium { } } - /** - * Add a naughty message for the invalid user ids - */ private static String getSanitizedUser(String userID) { if (userID == null) { return "N/A"; @@ -247,13 +245,19 @@ public class LibsPremium { return String.format("... %s? Am I reading this right?", userID); } - return userID; + int total = 0; + + for (char c : userID.toCharArray()) { + total += Character.getNumericValue(c); + } + + return String.format("%s(%s)", userID, total); } public static void check(String version) { thisPluginIsPaidFor = isPremium(); - if (!isPremium()) { + if (!isPremium() || !LibsDisguises.getInstance().isReleaseBuild()) { doSecondaryCheck(version); } else { DisguiseUtilities.getLogger().info("Registered to: " + getSanitizedUser(getUserID())); diff --git a/src/main/java/me/libraryaddict/disguise/utilities/UpdateChecker.java b/src/main/java/me/libraryaddict/disguise/utilities/UpdateChecker.java index 01740244..25c2b71a 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/UpdateChecker.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/UpdateChecker.java @@ -1,7 +1,7 @@ package me.libraryaddict.disguise.utilities; import com.google.gson.Gson; -import org.apache.commons.io.IOUtils; +import org.bukkit.craftbukkit.libs.org.apache.commons.io.IOUtils; import java.io.InputStream; import java.io.OutputStream; diff --git a/src/main/java/me/libraryaddict/disguise/utilities/json/SerializerFlagWatcher.java b/src/main/java/me/libraryaddict/disguise/utilities/json/SerializerFlagWatcher.java index 924c567e..ec6ad1dd 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/json/SerializerFlagWatcher.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/json/SerializerFlagWatcher.java @@ -6,13 +6,9 @@ import com.comphenix.protocol.wrappers.WrappedGameProfile; import com.google.gson.*; import com.google.gson.reflect.TypeToken; import com.mojang.authlib.properties.PropertyMap; -import me.libraryaddict.disguise.disguisetypes.Disguise; -import me.libraryaddict.disguise.disguisetypes.DisguiseType; -import me.libraryaddict.disguise.disguisetypes.FlagWatcher; -import me.libraryaddict.disguise.disguisetypes.MetaIndex; +import me.libraryaddict.disguise.disguisetypes.*; import me.libraryaddict.disguise.disguisetypes.watchers.ArrowWatcher; import org.bukkit.inventory.ItemStack; -import sun.reflect.generics.tree.BaseType; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -67,23 +63,30 @@ public class SerializerFlagWatcher implements JsonDeserializer, Jso HashMap map = (HashMap) field.get(watcher); for (Map.Entry entry : map.entrySet()) { - if (!(entry.getValue() instanceof Double)) - continue; + if (entry.getValue() instanceof Double) { + MetaIndex index = MetaIndex.getMetaIndex(flagWatcher, entry.getKey()); - MetaIndex index = MetaIndex.getMetaIndex(flagWatcher, entry.getKey()); + Object def = index.getDefault(); - Object def = index.getDefault(); + if (def instanceof Long) + entry.setValue(((Double) entry.getValue()).longValue()); + else if (def instanceof Float) + entry.setValue(((Double) entry.getValue()).floatValue()); + else if (def instanceof Integer) + entry.setValue(((Double) entry.getValue()).intValue()); + else if (def instanceof Short) + entry.setValue(((Double) entry.getValue()).shortValue()); + else if (def instanceof Byte) + entry.setValue(((Double) entry.getValue()).byteValue()); + } else if (entry.getValue() instanceof Map) { + MetaIndex index = MetaIndex.getMetaIndex(flagWatcher, entry.getKey()); - if (def instanceof Long) - entry.setValue(((Double) entry.getValue()).longValue()); - else if (def instanceof Float) - entry.setValue(((Double) entry.getValue()).floatValue()); - else if (def instanceof Integer) - entry.setValue(((Double) entry.getValue()).intValue()); - else if (def instanceof Short) - entry.setValue(((Double) entry.getValue()).shortValue()); - else if (def instanceof Byte) - entry.setValue(((Double) entry.getValue()).byteValue()); + if (!(index.getDefault() instanceof VillagerData)) { + continue; + } + + entry.setValue(new Gson().fromJson(new Gson().toJson(entry.getValue()),VillagerData.class)); + } } } diff --git a/src/main/java/me/libraryaddict/disguise/utilities/json/SerializerItemStack.java b/src/main/java/me/libraryaddict/disguise/utilities/json/SerializerItemStack.java index 84a32831..c6297c9a 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/json/SerializerItemStack.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/json/SerializerItemStack.java @@ -23,6 +23,6 @@ public class SerializerItemStack implements JsonSerializer, JsonDeser @Override public ItemStack deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - return ItemStack.deserialize((Map) context.deserialize(json, HashMap.class)); + return ItemStack.deserialize(context.deserialize(json, HashMap.class)); } } diff --git a/src/main/java/me/libraryaddict/disguise/utilities/metrics/Metrics.java b/src/main/java/me/libraryaddict/disguise/utilities/metrics/Metrics.java index bcd4ad5f..c5aabb28 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/metrics/Metrics.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/metrics/Metrics.java @@ -14,6 +14,7 @@ import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.logging.Level; import java.util.zip.GZIPOutputStream; @@ -321,7 +322,7 @@ public class Metrics { } ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); GZIPOutputStream gzip = new GZIPOutputStream(outputStream); - gzip.write(str.getBytes("UTF-8")); + gzip.write(str.getBytes(StandardCharsets.UTF_8)); gzip.close(); return outputStream.toByteArray(); } diff --git a/src/main/java/me/libraryaddict/disguise/utilities/packets/PacketsManager.java b/src/main/java/me/libraryaddict/disguise/utilities/packets/PacketsManager.java index e5ab2179..9b85b00a 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/packets/PacketsManager.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/packets/PacketsManager.java @@ -136,11 +136,6 @@ public class PacketsManager { packetsToListen.add(Server.UPDATE_ATTRIBUTES); } - // The bed packet. - if (DisguiseConfig.isBedPacketsEnabled()) { - packetsToListen.add(Server.BED); - } - // Add movement packets if (DisguiseConfig.isMovementPacketsEnabled()) { packetsToListen.add(Server.ENTITY_LOOK); diff --git a/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerAnimation.java b/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerAnimation.java index d6a5128c..5744252b 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerAnimation.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerAnimation.java @@ -23,8 +23,7 @@ public class PacketHandlerAnimation implements IPacketHandler { public void handle(Disguise disguise, PacketContainer sentPacket, LibsPackets packets, Player observer, Entity entity) { // Else if the disguise is attempting to send players a forbidden packet - if (disguise.getType().isMisc() || (sentPacket.getIntegers().read(1) == 2 && (!disguise.getType().isPlayer() || - (DisguiseConfig.isBedPacketsEnabled() && ((PlayerWatcher) disguise.getWatcher()).isSleeping())))) { + if (disguise.getType().isMisc()) { packets.clear(); } } diff --git a/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerBed.java b/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerBed.java index 3b19b4b2..a009dd6c 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerBed.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerBed.java @@ -14,7 +14,7 @@ import org.bukkit.entity.Player; public class PacketHandlerBed implements IPacketHandler { @Override public PacketType[] getHandledPackets() { - return new PacketType[]{PacketType.Play.Server.BED}; + return new PacketType[]{}; } @Override diff --git a/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerCollect.java b/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerCollect.java index a8380391..0586b5d5 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerCollect.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerCollect.java @@ -25,18 +25,6 @@ public class PacketHandlerCollect implements IPacketHandler { Entity entity) { if (disguise.getType().isMisc()) { packets.clear(); - } else if (DisguiseConfig.isBedPacketsEnabled() && disguise.getType().isPlayer() && - ((PlayerWatcher) disguise.getWatcher()).isSleeping()) { - PacketContainer newPacket = new PacketContainer(PacketType.Play.Server.ANIMATION); - - StructureModifier mods = newPacket.getIntegers(); - mods.write(0, disguise.getEntity().getEntityId()); - mods.write(1, 3); - - packets.clear(); - - packets.addPacket(newPacket); - packets.addPacket(sentPacket); } } } diff --git a/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerSpawn.java b/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerSpawn.java index bc41f93b..ffa2be47 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerSpawn.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerSpawn.java @@ -240,15 +240,7 @@ public class PacketHandlerSpawn implements IPacketHandler { packets.addPacket(spawnPlayer); - if (DisguiseConfig.isBedPacketsEnabled() && ((PlayerWatcher) disguise.getWatcher()).isSleeping()) { - PacketContainer[] bedPackets = DisguiseUtilities.getBedPackets( - loc.clone().subtract(0, DisguiseUtilities.getYModifier(disguisedEntity, disguise), 0), - observer.getLocation(), ((PlayerDisguise) disguise)); - - for (PacketContainer packet : bedPackets) { - packets.addPacket(packet); - } - } else if (!selfDisguise) { + if (!selfDisguise) { // Teleport the player back to where he's supposed to be PacketContainer teleportPacket = new PacketContainer(PacketType.Play.Server.ENTITY_TELEPORT); @@ -336,7 +328,6 @@ public class PacketHandlerSpawn implements IPacketHandler { .createSanitizedDataWatcher(WrappedDataWatcher.getEntityWatcher(disguisedEntity), disguise.getWatcher())); } else if (disguise.getType().isMisc()) { - int objectId = disguise.getType().getObjectId(); int data = ((MiscDisguise) disguise).getData(); if (disguise.getType() == DisguiseType.FALLING_BLOCK) { @@ -351,11 +342,14 @@ public class PacketHandlerSpawn implements IPacketHandler { data = ((((int) loc.getYaw() % 360) + 720 + 45) / 90) % 4; } - Object nmsEntity = ReflectionManager.getNmsEntity(disguisedEntity); + Object entityType = ReflectionManager.getEntityType(disguise.getType().getEntityType()); + + Object[] params = new Object[]{disguisedEntity.getEntityId(), disguisedEntity.getUniqueId(), loc.getX(), + loc.getY(), loc.getZ(), loc.getPitch(), loc.getYaw(), entityType, data, + ReflectionManager.getVec3D(disguisedEntity.getVelocity())}; PacketContainer spawnEntity = ProtocolLibrary.getProtocolManager() - .createPacketConstructor(PacketType.Play.Server.SPAWN_ENTITY, nmsEntity, objectId, data) - .createPacket(nmsEntity, objectId, data); + .createPacketConstructor(PacketType.Play.Server.SPAWN_ENTITY, params).createPacket(params); packets.addPacket(spawnEntity); // If it's not the same type, then highly likely they have different velocity settings which we'd want to diff --git a/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerViewSelfDisguise.java b/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerViewSelfDisguise.java index 430666f2..42a7c197 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerViewSelfDisguise.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerViewSelfDisguise.java @@ -26,7 +26,7 @@ public class PacketListenerViewSelfDisguise extends PacketAdapter { public PacketListenerViewSelfDisguise(LibsDisguises plugin) { super(plugin, ListenerPriority.HIGH, Server.NAMED_ENTITY_SPAWN, Server.ATTACH_ENTITY, Server.REL_ENTITY_MOVE, Server.REL_ENTITY_MOVE_LOOK, Server.ENTITY_LOOK, Server.ENTITY_TELEPORT, Server.ENTITY_HEAD_ROTATION, - Server.ENTITY_METADATA, Server.ENTITY_EQUIPMENT, Server.ANIMATION, Server.BED, Server.ENTITY_EFFECT, + Server.ENTITY_METADATA, Server.ENTITY_EQUIPMENT, Server.ANIMATION, Server.ENTITY_EFFECT, Server.ENTITY_VELOCITY, Server.UPDATE_ATTRIBUTES, Server.ENTITY_STATUS); } diff --git a/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguiseParser.java b/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguiseParser.java index cbc60664..528aab16 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguiseParser.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguiseParser.java @@ -5,6 +5,7 @@ import me.libraryaddict.disguise.DisguiseConfig; import me.libraryaddict.disguise.disguisetypes.*; import me.libraryaddict.disguise.utilities.DisguiseUtilities; import me.libraryaddict.disguise.utilities.parser.params.ParamInfo; +import me.libraryaddict.disguise.utilities.parser.params.ParamInfoManager; import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; import me.libraryaddict.disguise.utilities.translations.LibsMsg; import me.libraryaddict.disguise.utilities.translations.TranslateType; diff --git a/src/main/java/me/libraryaddict/disguise/utilities/parser/ParamInfoManager.java b/src/main/java/me/libraryaddict/disguise/utilities/parser/params/ParamInfoManager.java similarity index 97% rename from src/main/java/me/libraryaddict/disguise/utilities/parser/ParamInfoManager.java rename to src/main/java/me/libraryaddict/disguise/utilities/parser/params/ParamInfoManager.java index 52fafd55..ca5cd5a4 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/parser/ParamInfoManager.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/parser/params/ParamInfoManager.java @@ -1,9 +1,10 @@ -package me.libraryaddict.disguise.utilities.parser; +package me.libraryaddict.disguise.utilities.parser.params; import me.libraryaddict.disguise.disguisetypes.Disguise; import me.libraryaddict.disguise.disguisetypes.DisguiseType; import me.libraryaddict.disguise.disguisetypes.FlagWatcher; import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher; +import me.libraryaddict.disguise.utilities.parser.DisguisePerm; import me.libraryaddict.disguise.utilities.parser.params.ParamInfo; import me.libraryaddict.disguise.utilities.parser.params.ParamInfoTypes; import org.bukkit.ChatColor; diff --git a/src/main/java/me/libraryaddict/disguise/utilities/parser/params/ParamInfoTypes.java b/src/main/java/me/libraryaddict/disguise/utilities/parser/params/ParamInfoTypes.java index 4fb4f28a..8ba18259 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/parser/params/ParamInfoTypes.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/parser/params/ParamInfoTypes.java @@ -4,6 +4,7 @@ import com.comphenix.protocol.wrappers.BlockPosition; import com.comphenix.protocol.wrappers.WrappedGameProfile; import com.comphenix.protocol.wrappers.WrappedParticle; import me.libraryaddict.disguise.disguisetypes.AnimalColor; +import me.libraryaddict.disguise.disguisetypes.EntityPose; import me.libraryaddict.disguise.disguisetypes.RabbitType; import me.libraryaddict.disguise.utilities.parser.params.types.ParamInfoEnum; import me.libraryaddict.disguise.utilities.parser.params.types.base.*; @@ -31,15 +32,13 @@ public class ParamInfoTypes { List paramInfos = new ArrayList<>(); // Register enum types - paramInfos.add(new ParamInfoEnum(AnimalColor.class, "Animal Color", - "View all the colors you can use for an animal color")); + //paramInfos.add(new ParamInfoEnum(AnimalColor.class, "Animal Color", + // "View all the colors you can use for an animal color")); paramInfos .add(new ParamInfoEnum(Art.class, "Art", "View all the paintings you can use for a painting disguise")); paramInfos.add(new ParamInfoEnum(Horse.Color.class, "Horse Color", "View all the colors you can use for a horses color")); - paramInfos.add(new ParamInfoEnum(Ocelot.Type.class, "Ocelot Type", - "View all the ocelot types you can use for ocelots")); paramInfos.add(new ParamInfoEnum(Villager.Profession.class, "Villager Profession", "View all the professions you can set on a Zombie and Normal Villager")); paramInfos.add(new ParamInfoEnum(BlockFace.class, "Direction", "Direction (North, East, South, West, Up, Down)", @@ -61,6 +60,12 @@ public class ParamInfoTypes { paramInfos.add(new ParamInfoEnum(DyeColor.class, "DyeColor", "Dye colors of many different colors")); paramInfos.add(new ParamInfoEnum(Horse.Style.class, "Horse Style", "Horse style which is the patterns on the horse")); + paramInfos.add(new ParamInfoEnum(EntityPose.class, "EntityPose", "The pose the entity should strike")); + paramInfos.add(new ParamInfoEnum(Cat.Type.class, "Cat Type", "The type of cat")); + paramInfos.add(new ParamInfoEnum(Fox.Type.class, "Fox Type", "The type of fox")); + paramInfos.add(new ParamInfoEnum(Panda.Gene.class, "Panda Gene", "The panda gene type")); + paramInfos.add(new ParamInfoEnum(MushroomCow.Variant.class, "Mushroom Cow Variant", + "The different variants for mushroom cows")); // Register custom types paramInfos.add(new ParamInfoEulerAngle(EulerAngle.class, "Euler Angle", "Euler Angle (X,Y,Z)", diff --git a/src/main/java/me/libraryaddict/disguise/utilities/parser/params/types/custom/ParamInfoParticle.java b/src/main/java/me/libraryaddict/disguise/utilities/parser/params/types/custom/ParamInfoParticle.java index 680331fb..70658ae4 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/parser/params/types/custom/ParamInfoParticle.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/parser/params/types/custom/ParamInfoParticle.java @@ -5,7 +5,7 @@ import com.comphenix.protocol.wrappers.WrappedParticle; import me.libraryaddict.disguise.utilities.translations.LibsMsg; import me.libraryaddict.disguise.utilities.parser.DisguiseParseException; import me.libraryaddict.disguise.utilities.parser.params.types.ParamInfoEnum; -import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang.StringUtils; import org.bukkit.Color; import org.bukkit.Material; import org.bukkit.Particle; diff --git a/src/main/java/me/libraryaddict/disguise/utilities/reflection/DisguiseValues.java b/src/main/java/me/libraryaddict/disguise/utilities/reflection/DisguiseValues.java index 76541706..a0775dce 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/reflection/DisguiseValues.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/reflection/DisguiseValues.java @@ -36,10 +36,6 @@ public class DisguiseValues { return babyBox; } - public float[] getEntitySize() { - return entitySize; - } - public double getMaxHealth() { return maxHealth; } @@ -55,8 +51,4 @@ public class DisguiseValues { public void setBabyBox(FakeBoundingBox newBox) { babyBox = newBox; } - - public void setEntitySize(float[] size) { - this.entitySize = size; - } } diff --git a/src/main/java/me/libraryaddict/disguise/utilities/reflection/ReflectionManager.java b/src/main/java/me/libraryaddict/disguise/utilities/reflection/ReflectionManager.java index 16518c29..f93e00f9 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/reflection/ReflectionManager.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/reflection/ReflectionManager.java @@ -1,21 +1,32 @@ package me.libraryaddict.disguise.utilities.reflection; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.reflect.cloning.AggregateCloner; import com.comphenix.protocol.wrappers.*; 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.NbtWrapper; +import com.mojang.datafixers.Dynamic; import me.libraryaddict.disguise.DisguiseConfig; import me.libraryaddict.disguise.disguisetypes.DisguiseType; -import org.apache.commons.io.IOUtils; +import me.libraryaddict.disguise.disguisetypes.EntityPose; +import me.libraryaddict.disguise.disguisetypes.VillagerData; +import me.libraryaddict.disguise.utilities.DisguiseUtilities; +import net.minecraft.server.v1_14_R1.IRegistry; import org.bukkit.*; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.craftbukkit.libs.it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import org.bukkit.craftbukkit.libs.org.apache.commons.io.IOUtils; +import org.bukkit.craftbukkit.v1_14_R1.util.CraftNamespacedKey; import org.bukkit.entity.*; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; +import org.bukkit.util.Vector; import java.io.IOException; import java.io.InputStream; @@ -23,22 +34,24 @@ import java.lang.reflect.*; import java.nio.ByteBuffer; import java.util.Optional; import java.util.UUID; +import java.util.concurrent.atomic.AtomicInteger; public class ReflectionManager { private static final String bukkitVersion = Bukkit.getServer().getClass().getName().split("\\.")[3]; private static final Class craftItemClass; private static Method damageAndIdleSoundMethod; - private static final Field entitiesField; private static final Constructor boundingBoxConstructor; private static final Method setBoundingBoxMethod; - private static final Method ihmGet; private static final Field pingField; - private static final Field trackerField; public static final Field entityCountField; + private static final Field chunkMapField; + private static final Field chunkProviderField; + private static final Field entityTrackerField; + private static final Field trackedEntitiesField; static { try { - Object entity = createEntityInstance("Cow"); + Object entity = createEntityInstance(DisguiseType.COW, "Cow"); for (Method method : getNmsClass("EntityLiving").getDeclaredMethods()) { if (method.getReturnType() != float.class) @@ -69,11 +82,10 @@ public class ReflectionManager { pingField = getNmsField("EntityPlayer", "ping"); - trackerField = getNmsField("WorldServer", "tracker"); - - entitiesField = getNmsField("EntityTracker", "trackedEntities"); - - ihmGet = getNmsMethod("IntHashMap", "get", int.class); + chunkProviderField = getNmsField("World", "chunkProvider"); + chunkMapField = getNmsField("ChunkProviderServer", "playerChunkMap"); + trackedEntitiesField = getNmsField("PlayerChunkMap", "trackedEntities"); + entityTrackerField = getNmsField("PlayerChunkMap$EntityTracker", "trackerEntry"); boundingBoxConstructor = getNmsConstructor("AxisAlignedBB", double.class, double.class, double.class, double.class, double.class, double.class); @@ -105,10 +117,14 @@ public class ReflectionManager { public static int getNewEntityId(boolean increment) { try { - int id = entityCountField.getInt(null); + AtomicInteger entityCount = (AtomicInteger) entityCountField.get(null); + + int id; if (increment) { - entityCountField.set(null, id + 1); + id = entityCount.getAndIncrement(); + } else { + id = entityCount.get(); } return id; @@ -120,7 +136,7 @@ public class ReflectionManager { return -1; } - public static Object createEntityInstance(String entityName) { + public static Object createEntityInstance(DisguiseType disguiseType, String entityName) { try { Class entityClass = getNmsClass("Entity" + entityName); Object entityObject; @@ -131,7 +147,7 @@ public class ReflectionManager { Object minecraftServer = getNmsMethod("MinecraftServer", "getServer").invoke(null); Object playerinteractmanager = getNmsClass("PlayerInteractManager") - .getDeclaredConstructor(getNmsClass("World")).newInstance(world); + .getDeclaredConstructor(getNmsClass("WorldServer")).newInstance(world); WrappedGameProfile gameProfile = getGameProfile(new UUID(0, 0), "Steve"); @@ -142,26 +158,25 @@ public class ReflectionManager { break; case "EnderPearl": 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))); + .newInstance(world, createEntityInstance(DisguiseType.COW, "Cow")); break; case "FishingHook": - entityObject = entityClass.getDeclaredConstructor(getNmsClass("World"), getNmsClass("EntityHuman")) - .newInstance(world, createEntityInstance("Player")); + entityObject = entityClass + .getDeclaredConstructor(getNmsClass("EntityHuman"), getNmsClass("World"), int.class, + int.class) + .newInstance(createEntityInstance(DisguiseType.PLAYER, "Player"), world, 0, 0); break; default: - entityObject = entityClass.getDeclaredConstructor(getNmsClass("World")).newInstance(world); + entityObject = entityClass.getDeclaredConstructor(getNmsClass("EntityTypes"), getNmsClass("World")) + .newInstance(getEntityType(disguiseType.getEntityType()), world); break; } return entityObject; } catch (Exception e) { + DisguiseUtilities.getLogger() + .warning("Error while attempting to create entity instance for " + disguiseType.name()); e.printStackTrace(); } @@ -315,10 +330,17 @@ public class ReflectionManager { public static Object getEntityTrackerEntry(Entity target) throws Exception { Object world = getWorldServer(target.getWorld()); - Object tracker = trackerField.get(world); - Object trackedEntities = entitiesField.get(tracker); + Object chunkProvider = chunkProviderField.get(world); + Object chunkMap = chunkMapField.get(chunkProvider); + Int2ObjectMap trackedEntities = (Int2ObjectMap) trackedEntitiesField.get(chunkMap); - return ihmGet.invoke(trackedEntities, target.getEntityId()); + Object entityTracker = trackedEntities.get(target.getEntityId()); + + if (entityTracker == null) { + return null; + } + + return entityTrackerField.get(entityTracker); } public static Object getMinecraftServer() { @@ -588,11 +610,13 @@ public class ReflectionManager { public static float[] getSize(Entity entity) { try { - float length = getNmsField("Entity", "length").getFloat(getNmsEntity(entity)); - float width = getNmsField("Entity", "width").getFloat(getNmsEntity(entity)); + Object size = getNmsField("Entity", "size").get(getNmsEntity(entity)); - float height = (Float) getNmsMethod("Entity", "getHeadHeight").invoke(getNmsEntity(entity)); - return new float[]{length, width, height}; + //float length = getNmsField("EntitySize", "length").getFloat(size); + float width = getNmsField("EntitySize", "width").getFloat(size); + float height = getNmsField("Entity", "headHeight").getFloat(getNmsEntity(entity)); + + return new float[]{width, height}; } catch (Exception ex) { ex.printStackTrace(); @@ -884,11 +908,64 @@ public class ReflectionManager { return ((NbtWrapper) value).getHandle(); } else if (value instanceof WrappedParticle) { return ((WrappedParticle) value).getHandle(); + } else if (value instanceof EntityPose) { + return getNmsEntityPose((EntityPose) value); + } else if (value instanceof VillagerData) { + return getNmsVillagerData((VillagerData) value); } return value; } + public static Object getNmsVillagerData(VillagerData data) { + Object type = getVillagerType(data.getType()); + Object profession = getVillagerProfession(data.getProfession()); + + try { + return getNmsConstructor("VillagerData", getNmsClass("VillagerType"), profession.getClass(), int.class) + .newInstance(type, profession, data.getLevel()); + } + catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + public static Object getVillagerType(Villager.Type type) { + try { + Object villagerType = getNmsField("IRegistry", "VILLAGER_TYPE").get(null); + + Method toMinecraft = getCraftMethod("util.CraftNamespacedKey", "toMinecraft", NamespacedKey.class); + Object mcKey = toMinecraft.invoke(null, type.getKey()); + Method getField = getNmsMethod("RegistryBlocks", "get", mcKey.getClass()); + + return getField.invoke(villagerType, mcKey); + } + catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + public static Object getVillagerProfession(Villager.Profession profession) { + try { + Object villagerProfession = getNmsField("IRegistry", "VILLAGER_PROFESSION").get(null); + + Method toMinecraft = getCraftMethod("util.CraftNamespacedKey", "toMinecraft", NamespacedKey.class); + Object mcKey = toMinecraft.invoke(null, profession.getKey()); + Method getField = getNmsMethod("RegistryBlocks", "get", mcKey.getClass()); + + return getField.invoke(villagerProfession, mcKey); + } + catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + public static String getMinecraftVersion() { String version = Bukkit.getVersion(); version = version.substring(version.lastIndexOf(" ") + 1, version.length() - 1); @@ -976,27 +1053,57 @@ public class ReflectionManager { return null; } - public static int getEntityType(Object nmsEntity) { + public static Object getVec3D(Vector vector) { try { - Field entityTypesField = null; + Constructor c = getNmsConstructor("Vec3D", double.class, double.class, double.class); - for (Method method : getNmsClass("Entity").getMethods()) { - if (!method.getReturnType().getSimpleName().equals("EntityTypes")) - continue; - - Object entityType = method.invoke(nmsEntity); - Class typesClass = getNmsClass("IRegistry"); - - Object registry = typesClass.getField("ENTITY_TYPE").get(null); - - return (int) registry.getClass().getMethod("a", Object.class).invoke(registry, entityType); - } + return c.newInstance(vector.getX(), vector.getY(), vector.getZ()); } catch (Exception ex) { ex.printStackTrace(); } - throw new IllegalStateException("Failed to find EntityType for " + nmsEntity.getClass().getSimpleName()); + return null; + } + + public static Object getEntityType(EntityType entityType) { + try { + Method entityTypes = getNmsMethod("EntityTypes", "a", String.class); + + Optional entityObj = (Optional) entityTypes.invoke(null, entityType.getName()); + + return entityObj.orElse(null); + } + catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + public static int getEntityTypeId(EntityType entityType) { + try { + Object entityTypes = getEntityType(entityType); + + Class typesClass = getNmsClass("IRegistry"); + + Object registry = typesClass.getField("ENTITY_TYPE").get(null); + + return (int) registry.getClass().getMethod("a", Object.class).invoke(registry, entityTypes); + } + catch (Exception ex) { + ex.printStackTrace(); + } + + throw new IllegalStateException("Failed to find EntityType id for " + entityType); + } + + public static Object getNmsEntityPose(EntityPose entityPose) { + return Enum.valueOf(getNmsClass("EntityPose"), entityPose.name()); + } + + public static EntityPose getEntityPose(Object nmsEntityPose) { + return EntityPose.valueOf(((Enum) nmsEntityPose).name()); } public static WrappedWatchableObject createWatchable(int index, Object obj) { diff --git a/src/main/java/me/libraryaddict/disguise/utilities/translations/LibsMsg.java b/src/main/java/me/libraryaddict/disguise/utilities/translations/LibsMsg.java index 5128881c..411c5914 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/translations/LibsMsg.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/translations/LibsMsg.java @@ -1,7 +1,7 @@ package me.libraryaddict.disguise.utilities.translations; import me.libraryaddict.disguise.utilities.DisguiseUtilities; -import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang.StringUtils; import org.bukkit.ChatColor; /** diff --git a/src/main/java/me/libraryaddict/disguise/utilities/translations/TranslateFiller.java b/src/main/java/me/libraryaddict/disguise/utilities/translations/TranslateFiller.java index dfd297d4..674d6466 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/translations/TranslateFiller.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/translations/TranslateFiller.java @@ -2,7 +2,7 @@ package me.libraryaddict.disguise.utilities.translations; import me.libraryaddict.disguise.disguisetypes.DisguiseType; import me.libraryaddict.disguise.utilities.reflection.ClassGetter; -import me.libraryaddict.disguise.utilities.parser.ParamInfoManager; +import me.libraryaddict.disguise.utilities.parser.params.ParamInfoManager; import me.libraryaddict.disguise.utilities.parser.params.ParamInfo; import org.apache.commons.lang.StringUtils; import org.bukkit.entity.Entity; diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 967dc123..e3411b3f 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -214,9 +214,6 @@ PacketsEnabled: # This disables the animation packet. If a disguised entity sends a animation packet and they are using a non-living disguise. People will crash. # Disabling this also means that if a player disguised as a non-player leaves a bug. People will crash Animation: true - # Disabling this means that you can't use the setSleeping option on a player disguise. Also you will crash anyone watching when you try to sleep in a bed if disguised as a non-player - # This also sends a chunk packet at key positions - Bed: true # This disguises the collect packet. If a living entity disguised as a non-living entity picks up a item. People will crash. This fixes it # This also fixes people crashing if a item disguised as a sleeping player is picked up - Only true if Bed is enabled as well Collect: true diff --git a/src/test/java/me/libraryaddict/disguise/utilities/DisguiseTypesTest.java b/src/test/java/me/libraryaddict/disguise/utilities/DisguiseTypesTest.java new file mode 100644 index 00000000..ca896e0c --- /dev/null +++ b/src/test/java/me/libraryaddict/disguise/utilities/DisguiseTypesTest.java @@ -0,0 +1,25 @@ +package me.libraryaddict.disguise.utilities; + +import me.libraryaddict.disguise.disguisetypes.DisguiseType; +import org.bukkit.entity.EntityType; +import org.junit.Assert; +import org.junit.Test; + +/** + * Created by libraryaddict on 4/05/2019. + */ +public class DisguiseTypesTest { + @Test + public void testDisguiseTypes() { + for (EntityType entityType : EntityType.values()) { + if (entityType == EntityType.LIGHTNING) { + continue; + } + + DisguiseType disguiseType = DisguiseType.getType(entityType); + + Assert.assertSame(entityType.name() + " has no DisguiseType registered!", disguiseType.name(), + entityType.name()); + } + } +}