diff --git a/pom.xml b/pom.xml
index eb83b3fe..336bc5f3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
LibsDisguises
LibsDisguises
- 9.2.4
+ 9.2.4-SNAPSHOT
src
diff --git a/src/me/libraryaddict/disguise/DisguiseAPI.java b/src/me/libraryaddict/disguise/DisguiseAPI.java
index 5c46bb1b..7f6023e8 100644
--- a/src/me/libraryaddict/disguise/DisguiseAPI.java
+++ b/src/me/libraryaddict/disguise/DisguiseAPI.java
@@ -1,434 +1,435 @@
-package me.libraryaddict.disguise;
-
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
-import org.bukkit.DyeColor;
-import org.bukkit.Material;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.EntityType;
-import org.bukkit.entity.Horse;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.entity.Player;
-import org.bukkit.inventory.EntityEquipment;
-import org.bukkit.inventory.HorseInventory;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.potion.PotionEffect;
-import org.bukkit.potion.PotionEffectType;
-
-import me.libraryaddict.disguise.disguisetypes.AnimalColor;
-import me.libraryaddict.disguise.disguisetypes.Disguise;
-import me.libraryaddict.disguise.disguisetypes.DisguiseType;
-import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
-import me.libraryaddict.disguise.disguisetypes.MiscDisguise;
-import me.libraryaddict.disguise.disguisetypes.MobDisguise;
-import me.libraryaddict.disguise.disguisetypes.PlayerDisguise;
-import me.libraryaddict.disguise.disguisetypes.TargetedDisguise;
-import me.libraryaddict.disguise.disguisetypes.TargetedDisguise.TargetType;
-import me.libraryaddict.disguise.disguisetypes.watchers.AbstractHorseWatcher;
-import me.libraryaddict.disguise.disguisetypes.watchers.HorseWatcher;
-import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher;
-import me.libraryaddict.disguise.utilities.DisguiseUtilities;
-import me.libraryaddict.disguise.utilities.ReflectionManager;
-
-public class DisguiseAPI {
- public static Disguise constructDisguise(Entity entity) {
- return constructDisguise(entity, true, true, true);
- }
-
- public static Disguise constructDisguise(Entity entity, boolean doEquipment, boolean doSneak, boolean doSprint) {
- DisguiseType disguiseType = DisguiseType.getType(entity);
- Disguise disguise;
-
- if (disguiseType.isMisc()) {
- disguise = new MiscDisguise(disguiseType);
- }
- else if (disguiseType.isMob()) {
- disguise = new MobDisguise(disguiseType);
- }
- else {
- disguise = new PlayerDisguise(entity.getName());
- }
-
- FlagWatcher watcher = disguise.getWatcher();
-
- if (entity instanceof LivingEntity) {
- for (PotionEffect effect : ((LivingEntity) entity).getActivePotionEffects()) {
- ((LivingWatcher) watcher).addPotionEffect(effect.getType());
-
- if (effect.getType() == PotionEffectType.INVISIBILITY) {
- watcher.setInvisible(true);
- }
- else if (effect.getType() == PotionEffectType.GLOWING) {
- watcher.setGlowing(true);
- }
- }
- }
-
- if (entity.getFireTicks() > 0) {
- watcher.setBurning(true);
- }
-
- if (doEquipment && entity instanceof LivingEntity) {
- EntityEquipment equip = ((LivingEntity) entity).getEquipment();
-
- watcher.setArmor(equip.getArmorContents());
- watcher.setItemInMainHand(equip.getItemInMainHand());
-
- if (disguiseType.getEntityType() == EntityType.HORSE) {
- Horse horse = (Horse) entity;
- HorseInventory horseInventory = horse.getInventory();
- ItemStack saddle = horseInventory.getSaddle();
-
- 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()) {
- if ((doSneak || !method.getName().equals("setSneaking")) && (doSprint || !method.getName().equals("setSprinting"))
- && method.getParameterTypes().length == 0 && method.getReturnType() != void.class) {
- Class methodReturn = method.getReturnType();
-
- if (methodReturn == float.class || methodReturn == Float.class || methodReturn == Double.class) {
- methodReturn = double.class;
- }
-
- int firstCapitalMethod = firstCapital(method.getName());
-
- if (firstCapitalMethod > 0) {
- for (Method watcherMethod : watcher.getClass().getMethods()) {
- if (!watcherMethod.getName().startsWith("get") && watcherMethod.getReturnType() == void.class
- && watcherMethod.getParameterTypes().length == 1) {
- int firstCapitalWatcher = firstCapital(watcherMethod.getName());
-
- if (firstCapitalWatcher > 0 && method.getName().substring(firstCapitalMethod)
- .equalsIgnoreCase(watcherMethod.getName().substring(firstCapitalWatcher))) {
- Class methodParam = watcherMethod.getParameterTypes()[0];
-
- if (methodParam == float.class || methodParam == Float.class || methodParam == Double.class) {
- methodParam = double.class;
- }
- else if (methodParam == AnimalColor.class) {
- methodParam = DyeColor.class;
- }
- if (methodReturn == methodParam) {
- try {
- Object value = method.invoke(entity);
- if (value != null) {
- Class toCast = watcherMethod.getParameterTypes()[0];
- if (!(toCast.isInstance(value))) {
- if (toCast == float.class) {
- if (!(value instanceof Float)) {
- double d = (Double) value;
- value = (float) d;
- }
- }
- else if (toCast == double.class) {
- if (!(value instanceof Double)) {
- float d = (Float) value;
- value = (double) d;
- }
- }
- else if (toCast == AnimalColor.class) {
- value = AnimalColor.valueOf(((DyeColor) value).name());
- }
- }
- if (value instanceof Boolean && !(Boolean) value
- && watcherMethod.getDeclaringClass() == FlagWatcher.class) {
- continue;
- }
- }
- watcherMethod.invoke(watcher, value);
- }
- catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- }
- }
- }
- }
- }
- }
- return disguise;
- }
-
- public static void disguiseEntity(Entity entity, Disguise disguise) {
- // If they are trying to disguise a null entity or use a null disguise
- // Just return.
- if (entity == null || disguise == null) {
- return;
- }
- // The event wasn't cancelled.
- // If the disguise entity isn't the same as the one we are disguising
- if (disguise.getEntity() != entity) {
- // If the disguise entity actually exists
- if (disguise.getEntity() != null) {
- // Clone the disguise
- disguise = disguise.clone();
- }
- // Set the disguise's entity
- disguise.setEntity(entity);
- }
-
- if (Disguise.getViewSelf().contains(disguise.getEntity().getUniqueId())) {
- disguise.setViewSelfDisguise(true);
- }
-
- disguise.startDisguise();
- }
-
- public static void disguiseIgnorePlayers(Entity entity, Disguise disguise, Collection playersToNotSeeDisguise) {
- if (disguise.getEntity() != null) {
- disguise = disguise.clone();
- }
-
- ((TargetedDisguise) disguise).setDisguiseTarget(TargetType.SHOW_TO_EVERYONE_BUT_THESE_PLAYERS);
-
- for (Object obj : playersToNotSeeDisguise) {
- if (obj instanceof String) {
- ((TargetedDisguise) disguise).addPlayer((String) obj);
- }
- else if (obj instanceof Player) {
- ((TargetedDisguise) disguise).addPlayer(((Player) obj).getName());
- }
- }
-
- disguiseEntity(entity, disguise);
- }
-
- @Deprecated
- public static void disguiseIgnorePlayers(Entity entity, Disguise disguise, List playersToNotSeeDisguise) {
- disguiseIgnorePlayers(entity, disguise, (Collection) playersToNotSeeDisguise);
- }
-
- public static void disguiseIgnorePlayers(Entity entity, Disguise disguise, Player... playersToNotSeeDisguise) {
- disguiseIgnorePlayers(entity, disguise, (Collection) Arrays.asList(playersToNotSeeDisguise));
- }
-
- public static void disguiseIgnorePlayers(Entity entity, Disguise disguise, String... playersToNotSeeDisguise) {
- disguiseIgnorePlayers(entity, disguise, (Collection) Arrays.asList(playersToNotSeeDisguise));
- }
-
- /**
- * Disguise the next entity to spawn, this means you need to spawn an entity immediately after calling this.
- *
- * @param disguise
- * @return
- */
- public static int disguiseNextEntity(Disguise disguise) {
- if (disguise == null) {
- return -1;
- }
-
- if (disguise.getEntity() != null || DisguiseUtilities.getDisguises().containsValue(disguise)) {
- disguise = disguise.clone();
- }
-
- try {
- int id = ReflectionManager.getNmsField("Entity", "entityCount").getInt(null);
- DisguiseUtilities.addFutureDisguise(id, (TargetedDisguise) disguise);
-
- return id;
- }
- catch (IllegalAccessException e) {
- e.printStackTrace();
- }
-
- return -1;
- }
-
- /**
- * Disguise this entity with this disguise
- *
- * @param entity
- * @param disguise
- */
- public static void disguiseToAll(Entity entity, Disguise disguise) {
- if (disguise.getEntity() != null) {
- disguise = disguise.clone();
- }
-
- // You called the disguiseToAll method foolish mortal! Prepare to have your custom settings wiped!!!
- ((TargetedDisguise) disguise).setDisguiseTarget(TargetType.SHOW_TO_EVERYONE_BUT_THESE_PLAYERS);
-
- for (String observer : ((TargetedDisguise) disguise).getObservers()) {
- ((TargetedDisguise) disguise).removePlayer(observer);
- }
- disguiseEntity(entity, disguise);
- }
-
- public static void disguiseToPlayers(Entity entity, Disguise disguise, Collection playersToViewDisguise) {
- if (disguise.getEntity() != null) {
- disguise = disguise.clone();
- }
-
- ((TargetedDisguise) disguise).setDisguiseTarget(TargetType.HIDE_DISGUISE_TO_EVERYONE_BUT_THESE_PLAYERS);
-
- for (Object obj : playersToViewDisguise) {
- if (obj instanceof String) {
- ((TargetedDisguise) disguise).addPlayer((String) obj);
- }
- else if (obj instanceof Player) {
- ((TargetedDisguise) disguise).addPlayer(((Player) obj).getName());
- }
- }
-
- disguiseEntity(entity, disguise);
- }
-
- @Deprecated
- public static void disguiseToPlayers(Entity entity, Disguise disguise, List playersToViewDisguise) {
- disguiseToPlayers(entity, disguise, (Collection) playersToViewDisguise);
- }
-
- public static void disguiseToPlayers(Entity entity, Disguise disguise, Player... playersToViewDisguise) {
- disguiseToPlayers(entity, disguise, (Collection) Arrays.asList(playersToViewDisguise));
- }
-
- public static void disguiseToPlayers(Entity entity, Disguise disguise, String... playersToViewDisguise) {
- disguiseToPlayers(entity, disguise, (Collection) Arrays.asList(playersToViewDisguise));
- }
-
- private static int firstCapital(String str) {
- for (int i = 0; i < str.length(); i++) {
- if (Character.isUpperCase(str.charAt(i))) {
- return i;
- }
- }
-
- return -1;
- }
-
- /**
- * Get the disguise of a entity
- *
- * @param disguised
- * @return
- */
- public static Disguise getDisguise(Entity disguised) {
- if (disguised == null) {
- return null;
- }
-
- return DisguiseUtilities.getMainDisguise(disguised.getUniqueId());
- }
-
- /**
- * Get the disguise of a entity
- *
- * @param observer
- * @param disguised
- * @return
- */
- public static Disguise getDisguise(Player observer, Entity disguised) {
- if (disguised == null || observer == null) {
- return null;
- }
-
- return DisguiseUtilities.getDisguise(observer, disguised);
- }
-
- /**
- * Get the disguises of a entity
- *
- * @param disguised
- * @return
- */
- public static Disguise[] getDisguises(Entity disguised) {
- if (disguised == null) {
- return null;
- }
-
- return DisguiseUtilities.getDisguises(disguised.getUniqueId());
- }
-
- public static int getSelfDisguiseId() {
- return -10;
- }
-
- /**
- * Is this entity disguised
- *
- * @param disguised
- * @return
- */
- public static boolean isDisguised(Entity disguised) {
- return getDisguise(disguised) != null;
- }
-
- /**
- * Is this entity disguised
- *
- * @param observer
- * @param disguised
- * @return
- */
- public static boolean isDisguised(Player observer, Entity disguised) {
- return getDisguise(observer, disguised) != null;
- }
-
- public static boolean isDisguiseInUse(Disguise disguise) {
- return disguise.isDisguiseInUse();
- }
-
- public static boolean isSelfDisguised(Player player) {
- return DisguiseUtilities.getSelfDisguised().contains(player.getUniqueId());
- }
-
- /**
- * Returns true if the entitiy has /disguiseviewself toggled on.
- *
- * @param entity
- * @return
- */
- public static boolean isViewSelfToggled(Entity entity) {
- return isDisguised(entity) ? getDisguise(entity).isSelfDisguiseVisible()
- : Disguise.getViewSelf().contains(entity.getUniqueId());
- }
-
- /**
- * Undisguise the entity. This doesn't let you cancel the UndisguiseEvent if the entity is no longer valid. Aka removed from
- * the world.
- *
- * @param entity
- */
- public static void undisguiseToAll(Entity entity) {
- Disguise[] disguises = getDisguises(entity);
-
- for (Disguise disguise : disguises) {
- disguise.removeDisguise();
- }
- }
-
- /**
- * Set whether this player can see his own disguise or not.
- *
- * @param entity
- * @param toggled
- */
- public static void setViewDisguiseToggled(Entity entity, boolean toggled) {
- if (isDisguised(entity)) {
- Disguise disguise = getDisguise(entity);
- disguise.setViewSelfDisguise(toggled);
- }
-
- if (toggled) {
- if (!Disguise.getViewSelf().contains(entity.getUniqueId())) {
- Disguise.getViewSelf().add(entity.getUniqueId());
- }
- }
- else {
- Disguise.getViewSelf().remove(entity.getUniqueId());
- }
- }
-
- private DisguiseAPI() {
- }
-}
+package me.libraryaddict.disguise;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+import org.bukkit.DyeColor;
+import org.bukkit.Material;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.EntityType;
+import org.bukkit.entity.Horse;
+import org.bukkit.entity.LivingEntity;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.EntityEquipment;
+import org.bukkit.inventory.HorseInventory;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.potion.PotionEffect;
+import org.bukkit.potion.PotionEffectType;
+
+import me.libraryaddict.disguise.disguisetypes.AnimalColor;
+import me.libraryaddict.disguise.disguisetypes.Disguise;
+import me.libraryaddict.disguise.disguisetypes.DisguiseType;
+import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
+import me.libraryaddict.disguise.disguisetypes.MiscDisguise;
+import me.libraryaddict.disguise.disguisetypes.MobDisguise;
+import me.libraryaddict.disguise.disguisetypes.PlayerDisguise;
+import me.libraryaddict.disguise.disguisetypes.TargetedDisguise;
+import me.libraryaddict.disguise.disguisetypes.TargetedDisguise.TargetType;
+import me.libraryaddict.disguise.disguisetypes.watchers.AbstractHorseWatcher;
+import me.libraryaddict.disguise.disguisetypes.watchers.HorseWatcher;
+import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher;
+import me.libraryaddict.disguise.utilities.DisguiseUtilities;
+import me.libraryaddict.disguise.utilities.ReflectionManager;
+
+public class DisguiseAPI {
+ public static Disguise constructDisguise(Entity entity) {
+ return constructDisguise(entity, true, true, true);
+ }
+
+ public static Disguise constructDisguise(Entity entity, boolean doEquipment, boolean doSneak, boolean doSprint) {
+ DisguiseType disguiseType = DisguiseType.getType(entity);
+ Disguise disguise;
+
+ if (disguiseType.isMisc()) {
+ disguise = new MiscDisguise(disguiseType);
+ }
+ else if (disguiseType.isMob()) {
+ disguise = new MobDisguise(disguiseType);
+ }
+ else {
+ disguise = new PlayerDisguise(entity.getName());
+ }
+
+ FlagWatcher watcher = disguise.getWatcher();
+
+ if (entity instanceof LivingEntity) {
+ for (PotionEffect effect : ((LivingEntity) entity).getActivePotionEffects()) {
+ ((LivingWatcher) watcher).addPotionEffect(effect.getType());
+
+ if (effect.getType() == PotionEffectType.INVISIBILITY) {
+ watcher.setInvisible(true);
+ }
+ else if (effect.getType() == PotionEffectType.GLOWING) {
+ watcher.setGlowing(true);
+ }
+ }
+ }
+
+ if (entity.getFireTicks() > 0) {
+ watcher.setBurning(true);
+ }
+
+ if (doEquipment && entity instanceof LivingEntity) {
+ EntityEquipment equip = ((LivingEntity) entity).getEquipment();
+
+ watcher.setArmor(equip.getArmorContents());
+ watcher.setItemInMainHand(equip.getItemInMainHand());
+
+ if (disguiseType.getEntityType() == EntityType.HORSE) {
+ Horse horse = (Horse) entity;
+ HorseInventory horseInventory = horse.getInventory();
+ ItemStack saddle = horseInventory.getSaddle();
+
+ 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()) {
+ if ((doSneak || !method.getName().equals("setSneaking")) && (doSprint || !method.getName().equals("setSprinting"))
+ && method.getParameterTypes().length == 0 && method.getReturnType() != void.class) {
+ Class methodReturn = method.getReturnType();
+
+ if (methodReturn == float.class || methodReturn == Float.class || methodReturn == Double.class) {
+ methodReturn = double.class;
+ }
+
+ int firstCapitalMethod = firstCapital(method.getName());
+
+ if (firstCapitalMethod > 0) {
+ for (Method watcherMethod : watcher.getClass().getMethods()) {
+ if (!watcherMethod.getName().startsWith("get") && watcherMethod.getReturnType() == void.class
+ && watcherMethod.getParameterTypes().length == 1) {
+ int firstCapitalWatcher = firstCapital(watcherMethod.getName());
+
+ if (firstCapitalWatcher > 0 && method.getName().substring(firstCapitalMethod)
+ .equalsIgnoreCase(watcherMethod.getName().substring(firstCapitalWatcher))) {
+ Class methodParam = watcherMethod.getParameterTypes()[0];
+
+ if (methodParam == float.class || methodParam == Float.class || methodParam == Double.class) {
+ methodParam = double.class;
+ }
+ else if (methodParam == AnimalColor.class) {
+ methodParam = DyeColor.class;
+ }
+ if (methodReturn == methodParam) {
+ try {
+ Object value = method.invoke(entity);
+ if (value != null) {
+ Class toCast = watcherMethod.getParameterTypes()[0];
+ if (!(toCast.isInstance(value))) {
+ if (toCast == float.class) {
+ if (!(value instanceof Float)) {
+ double d = (Double) value;
+ value = (float) d;
+ }
+ }
+ else if (toCast == double.class) {
+ if (!(value instanceof Double)) {
+ float d = (Float) value;
+ value = (double) d;
+ }
+ }
+ else if (toCast == AnimalColor.class) {
+ value = AnimalColor.valueOf(((DyeColor) value).name());
+ }
+ }
+ if (value instanceof Boolean && !(Boolean) value
+ && watcherMethod.getDeclaringClass() == FlagWatcher.class) {
+ continue;
+ }
+ }
+ watcherMethod.invoke(watcher, value);
+ }
+ catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return disguise;
+ }
+
+ public static void disguiseEntity(Entity entity, Disguise disguise) {
+ // If they are trying to disguise a null entity or use a null disguise
+ // Just return.
+ if (entity == null || disguise == null) {
+ return;
+ }
+ // The event wasn't cancelled.
+ // If the disguise entity isn't the same as the one we are disguising
+ if (disguise.getEntity() != entity) {
+ // If the disguise entity actually exists
+ if (disguise.getEntity() != null) {
+ // Clone the disguise
+ disguise = disguise.clone();
+ }
+ // Set the disguise's entity
+ disguise.setEntity(entity);
+ }
+
+ if (Disguise.getViewSelf().contains(disguise.getEntity().getUniqueId())) {
+ disguise.setViewSelfDisguise(true);
+ }
+
+ disguise.startDisguise();
+ }
+
+ public static void disguiseIgnorePlayers(Entity entity, Disguise disguise, Collection playersToNotSeeDisguise) {
+ if (disguise.getEntity() != null) {
+ disguise = disguise.clone();
+ }
+
+ ((TargetedDisguise) disguise).setDisguiseTarget(TargetType.SHOW_TO_EVERYONE_BUT_THESE_PLAYERS);
+
+ for (Object obj : playersToNotSeeDisguise) {
+ if (obj instanceof String) {
+ ((TargetedDisguise) disguise).addPlayer((String) obj);
+ }
+ else if (obj instanceof Player) {
+ ((TargetedDisguise) disguise).addPlayer(((Player) obj).getName());
+ }
+ }
+
+ disguiseEntity(entity, disguise);
+ }
+
+ @Deprecated
+ public static void disguiseIgnorePlayers(Entity entity, Disguise disguise, List playersToNotSeeDisguise) {
+ disguiseIgnorePlayers(entity, disguise, (Collection) playersToNotSeeDisguise);
+ }
+
+ public static void disguiseIgnorePlayers(Entity entity, Disguise disguise, Player... playersToNotSeeDisguise) {
+ disguiseIgnorePlayers(entity, disguise, (Collection) Arrays.asList(playersToNotSeeDisguise));
+ }
+
+ public static void disguiseIgnorePlayers(Entity entity, Disguise disguise, String... playersToNotSeeDisguise) {
+ disguiseIgnorePlayers(entity, disguise, (Collection) Arrays.asList(playersToNotSeeDisguise));
+ }
+
+ /**
+ * Disguise the next entity to spawn, this means you need to spawn an entity immediately after calling this.
+ *
+ * @param disguise
+ * @return
+ */
+ public static int disguiseNextEntity(Disguise disguise) {
+ if (disguise == null) {
+ return -1;
+ }
+
+ if (disguise.getEntity() != null || DisguiseUtilities.getDisguises().containsValue(disguise)) {
+ disguise = disguise.clone();
+ }
+
+ try {
+ int id = ReflectionManager.getNmsField("Entity", "entityCount").getInt(null);
+ DisguiseUtilities.addFutureDisguise(id, (TargetedDisguise) disguise);
+
+ return id;
+ }
+ catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+
+ return -1;
+ }
+
+ /**
+ * Disguise this entity with this disguise
+ *
+ * @param entity
+ * @param disguise
+ */
+ public static void disguiseToAll(Entity entity, Disguise disguise) {
+ if (disguise.getEntity() != null) {
+ disguise = disguise.clone();
+ }
+
+ // You called the disguiseToAll method foolish mortal! Prepare to have your custom settings wiped!!!
+ ((TargetedDisguise) disguise).setDisguiseTarget(TargetType.SHOW_TO_EVERYONE_BUT_THESE_PLAYERS);
+
+ for (String observer : ((TargetedDisguise) disguise).getObservers()) {
+ ((TargetedDisguise) disguise).removePlayer(observer);
+ }
+ disguiseEntity(entity, disguise);
+ }
+
+ public static void disguiseToPlayers(Entity entity, Disguise disguise, Collection playersToViewDisguise) {
+ if (disguise.getEntity() != null) {
+ disguise = disguise.clone();
+ }
+
+ ((TargetedDisguise) disguise).setDisguiseTarget(TargetType.HIDE_DISGUISE_TO_EVERYONE_BUT_THESE_PLAYERS);
+
+ for (Object obj : playersToViewDisguise) {
+ if (obj instanceof String) {
+ ((TargetedDisguise) disguise).addPlayer((String) obj);
+ }
+ else if (obj instanceof Player) {
+ ((TargetedDisguise) disguise).addPlayer(((Player) obj).getName());
+ }
+ }
+
+ disguiseEntity(entity, disguise);
+ }
+
+ @Deprecated
+ public static void disguiseToPlayers(Entity entity, Disguise disguise, List playersToViewDisguise) {
+ disguiseToPlayers(entity, disguise, (Collection) playersToViewDisguise);
+ }
+
+ public static void disguiseToPlayers(Entity entity, Disguise disguise, Player... playersToViewDisguise) {
+ disguiseToPlayers(entity, disguise, (Collection) Arrays.asList(playersToViewDisguise));
+ }
+
+ public static void disguiseToPlayers(Entity entity, Disguise disguise, String... playersToViewDisguise) {
+ disguiseToPlayers(entity, disguise, (Collection) Arrays.asList(playersToViewDisguise));
+ }
+
+ private static int firstCapital(String str) {
+ for (int i = 0; i < str.length(); i++) {
+ if (Character.isUpperCase(str.charAt(i))) {
+ return i;
+ }
+ }
+
+ return -1;
+ }
+
+ /**
+ * Get the disguise of a entity
+ *
+ * @param disguised
+ * @return
+ */
+ public static Disguise getDisguise(Entity disguised) {
+ if (disguised == null) {
+ return null;
+ }
+
+ return DisguiseUtilities.getMainDisguise(disguised.getUniqueId());
+ }
+
+ /**
+ * Get the disguise of a entity
+ *
+ * @param observer
+ * @param disguised
+ * @return
+ */
+ public static Disguise getDisguise(Player observer, Entity disguised) {
+ if (disguised == null || observer == null) {
+ return null;
+ }
+
+ return DisguiseUtilities.getDisguise(observer, disguised);
+ }
+
+ /**
+ * Get the disguises of a entity
+ *
+ * @param disguised
+ * @return
+ */
+ public static Disguise[] getDisguises(Entity disguised) {
+ if (disguised == null) {
+ return null;
+ }
+
+ return DisguiseUtilities.getDisguises(disguised.getUniqueId());
+ }
+
+ public static int getSelfDisguiseId() {
+ return -10;
+ }
+
+ /**
+ * Is this entity disguised
+ *
+ * @param disguised
+ * @return
+ */
+ public static boolean isDisguised(Entity disguised) {
+ return getDisguise(disguised) != null;
+ }
+
+ /**
+ * Is this entity disguised
+ *
+ * @param observer
+ * @param disguised
+ * @return
+ */
+ public static boolean isDisguised(Player observer, Entity disguised) {
+ return getDisguise(observer, disguised) != null;
+ }
+
+ public static boolean isDisguiseInUse(Disguise disguise) {
+ return disguise.isDisguiseInUse();
+ }
+
+ public static boolean isSelfDisguised(Player player) {
+ return DisguiseUtilities.getSelfDisguised().contains(player.getUniqueId());
+ }
+
+ /**
+ * Returns true if the entitiy has /disguiseviewself toggled on.
+ *
+ * @param entity
+ * @return
+ */
+ public static boolean isViewSelfToggled(Entity entity) {
+ return isDisguised(entity) ? getDisguise(entity).isSelfDisguiseVisible()
+ : Disguise.getViewSelf().contains(entity.getUniqueId());
+ }
+
+ /**
+ * Undisguise the entity. This doesn't let you cancel the UndisguiseEvent if the entity is no longer valid. Aka removed from
+ * the world.
+ *
+ * @param entity
+ */
+ public static void undisguiseToAll(Entity entity) {
+ Disguise[] disguises = getDisguises(entity);
+
+ for (Disguise disguise : disguises) {
+ disguise.removeDisguise();
+ }
+ }
+
+ /**
+ * Set whether this player can see his own disguise or not.
+ *
+ * @param entity
+ * @param toggled
+ */
+ public static void setViewDisguiseToggled(Entity entity, boolean toggled) {
+ if (isDisguised(entity)) {
+ Disguise disguise = getDisguise(entity);
+ disguise.setViewSelfDisguise(toggled);
+ }
+
+ if (toggled) {
+ if (!Disguise.getViewSelf().contains(entity.getUniqueId())) {
+ Disguise.getViewSelf().add(entity.getUniqueId());
+ }
+ }
+ else {
+ Disguise.getViewSelf().remove(entity.getUniqueId());
+ }
+ }
+
+ private DisguiseAPI() {
+ }
+}
diff --git a/src/me/libraryaddict/disguise/DisguiseListener.java b/src/me/libraryaddict/disguise/DisguiseListener.java
index c77a0a65..4e06493c 100644
--- a/src/me/libraryaddict/disguise/DisguiseListener.java
+++ b/src/me/libraryaddict/disguise/DisguiseListener.java
@@ -329,41 +329,7 @@ public class DisguiseListener implements Listener {
if (disguiseClone.containsKey(p.getName())) {
Boolean[] options = disguiseClone.remove(p.getName());
- Disguise disguise = DisguiseAPI.getDisguise(p, entity);
-
- if (disguise == null) {
- disguise = DisguiseAPI.constructDisguise(entity, options[0], options[1], options[2]);
- }
- else {
- disguise = disguise.clone();
- }
-
- char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray();
-
- String reference = null;
- int referenceLength = Math.max(2, (int) Math.ceil((0.1D + DisguiseConfig.getMaxClonedDisguises()) / 26D));
- int attempts = 0;
-
- while (reference == null && attempts++ < 1000) {
- reference = "@";
-
- for (int i = 0; i < referenceLength; i++) {
- reference += alphabet[DisguiseUtilities.random.nextInt(alphabet.length)];
- }
-
- if (DisguiseUtilities.getClonedDisguise(reference) != null) {
- reference = null;
- }
- }
-
- if (reference != null && DisguiseUtilities.addClonedDisguise(reference, disguise)) {
- p.sendMessage(ChatColor.RED + "Constructed a " + entityName + " disguise! Your reference is " + reference);
- p.sendMessage(ChatColor.RED + "Example usage: /disguise " + reference);
- }
- else {
- p.sendMessage(
- ChatColor.RED + "Failed to store the reference due to lack of size. Please set this in the config");
- }
+ DisguiseUtilities.createClonedDisguise(p, entity, options);
}
else if (disguiseEntity.containsKey(p.getName())) {
Disguise disguise = disguiseEntity.remove(p.getName());
diff --git a/src/me/libraryaddict/disguise/commands/DisguiseCloneCommand.java b/src/me/libraryaddict/disguise/commands/DisguiseCloneCommand.java
index 7fcb7f1e..dd91f4b0 100644
--- a/src/me/libraryaddict/disguise/commands/DisguiseCloneCommand.java
+++ b/src/me/libraryaddict/disguise/commands/DisguiseCloneCommand.java
@@ -5,14 +5,17 @@ import java.util.HashMap;
import java.util.List;
import org.apache.commons.lang.StringUtils;
+import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
+import org.bukkit.entity.Player;
import me.libraryaddict.disguise.DisguiseConfig;
import me.libraryaddict.disguise.LibsDisguises;
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm;
+import me.libraryaddict.disguise.utilities.DisguiseUtilities;
public class DisguiseCloneCommand extends DisguiseBaseCommand implements TabCompleter {
@Override
@@ -26,8 +29,14 @@ public class DisguiseCloneCommand extends DisguiseBaseCommand implements TabComp
boolean doEquipment = true;
boolean doSneak = false;
boolean doSprint = false;
+ Player player = null;
- for (String option : args) {
+ if (args.length > 0) {
+ player = Bukkit.getPlayerExact(args[0]);
+ }
+
+ for (int i = player == null ? 0 : 1; i < args.length; i++) {
+ String option = args[i];
if (StringUtils.startsWithIgnoreCase(option, "ignoreEquip")
|| StringUtils.startsWithIgnoreCase(option, "ignoreEnquip")) {
doEquipment = false;
@@ -49,12 +58,19 @@ public class DisguiseCloneCommand extends DisguiseBaseCommand implements TabComp
}
}
- LibsDisguises.getInstance().getListener().setDisguiseClone(sender.getName(), new Boolean[] {
+ Boolean[] options = new Boolean[] {
doEquipment, doSneak, doSprint
- });
+ };
- sender.sendMessage(ChatColor.RED + "Right click a entity in the next " + DisguiseConfig.getDisguiseCloneExpire()
- + " seconds to grab the disguise reference!");
+ if (player != null) {
+ DisguiseUtilities.createClonedDisguise((Player) sender, player, options);
+ }
+ else {
+ LibsDisguises.getInstance().getListener().setDisguiseClone(sender.getName(), options);
+
+ sender.sendMessage(ChatColor.RED + "Right click a entity in the next " + DisguiseConfig.getDisguiseCloneExpire()
+ + " seconds to grab the disguise reference!");
+ }
}
else {
sender.sendMessage(ChatColor.RED + "You are forbidden to use this command.");
@@ -67,6 +83,14 @@ public class DisguiseCloneCommand extends DisguiseBaseCommand implements TabComp
public List onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) {
ArrayList tabs = new ArrayList();
+ String[] args = getArgs(origArgs);
+
+ if (args.length == 0) {
+ for (Player player : Bukkit.getOnlinePlayers()) {
+ tabs.add(player.getName());
+ }
+ }
+
tabs.add("ignoreEquip");
tabs.add("doSneakSprint");
tabs.add("doSneak");
diff --git a/src/me/libraryaddict/disguise/utilities/DisguiseUtilities.java b/src/me/libraryaddict/disguise/utilities/DisguiseUtilities.java
index bc8af5ac..c59a3b15 100644
--- a/src/me/libraryaddict/disguise/utilities/DisguiseUtilities.java
+++ b/src/me/libraryaddict/disguise/utilities/DisguiseUtilities.java
@@ -17,6 +17,7 @@ import java.util.UUID;
import java.util.regex.Pattern;
import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
@@ -58,6 +59,9 @@ import me.libraryaddict.disguise.disguisetypes.watchers.AgeableWatcher;
import me.libraryaddict.disguise.disguisetypes.watchers.PlayerWatcher;
import me.libraryaddict.disguise.disguisetypes.watchers.ZombieWatcher;
import me.libraryaddict.disguise.utilities.PacketsManager.LibsPackets;
+import net.md_5.bungee.api.chat.ClickEvent;
+import net.md_5.bungee.api.chat.ClickEvent.Action;
+import net.md_5.bungee.api.chat.ComponentBuilder;
public class DisguiseUtilities {
public static final Random random = new Random();
@@ -143,6 +147,50 @@ public class DisguiseUtilities {
}
}
+ public static void createClonedDisguise(Player player, Entity toClone, Boolean[] options) {
+ Disguise disguise = DisguiseAPI.getDisguise(player, toClone);
+
+ if (disguise == null) {
+ disguise = DisguiseAPI.constructDisguise(toClone, options[0], options[1], options[2]);
+ }
+ else {
+ disguise = disguise.clone();
+ }
+
+ char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray();
+
+ String reference = null;
+ int referenceLength = Math.max(2, (int) Math.ceil((0.1D + DisguiseConfig.getMaxClonedDisguises()) / 26D));
+ int attempts = 0;
+
+ while (reference == null && attempts++ < 1000) {
+ reference = "@";
+
+ for (int i = 0; i < referenceLength; i++) {
+ reference += alphabet[DisguiseUtilities.random.nextInt(alphabet.length)];
+ }
+
+ if (DisguiseUtilities.getClonedDisguise(reference) != null) {
+ reference = null;
+ }
+ }
+
+ if (reference != null && DisguiseUtilities.addClonedDisguise(reference, disguise)) {
+ String entityName = DisguiseType.getType(toClone).toReadable();
+
+ ComponentBuilder text = new ComponentBuilder(
+ ChatColor.RED + "Constructed a " + entityName + " disguise! Your reference is ");
+ text.append(reference).event(new ClickEvent(Action.SUGGEST_COMMAND, reference));
+
+ player.sendRawMessage(text.toString());
+ player.sendMessage(ChatColor.RED + "Example usage: /disguise " + reference);
+ }
+ else {
+ player.sendMessage(
+ ChatColor.RED + "Failed to store the reference, too many cloned disguises. Please set this in the config");
+ }
+ }
+
public static boolean addClonedDisguise(String key, Disguise disguise) {
if (DisguiseConfig.getMaxClonedDisguises() > 0) {
if (clonedDisguises.containsKey(key)) {