Change the use of the disguiseclone command to use references instead
This commit is contained in:
		@@ -19,6 +19,7 @@ public class DisguiseConfig {
 | 
			
		||||
    private static boolean keepDisguiseEntityDespawn;
 | 
			
		||||
    private static boolean keepDisguisePlayerDeath;
 | 
			
		||||
    private static boolean keepDisguisePlayerLogout;
 | 
			
		||||
    private static int maxClonedDisguises;
 | 
			
		||||
    private static boolean maxHealthIsDisguisedEntity;
 | 
			
		||||
    private static boolean miscDisguisesForLivingEnabled;
 | 
			
		||||
    private static boolean modifyBoundingBox;
 | 
			
		||||
@@ -44,6 +45,10 @@ public class DisguiseConfig {
 | 
			
		||||
        return disguiseEntityExpire;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static int getMaxClonedDisguises() {
 | 
			
		||||
        return maxClonedDisguises;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static boolean isAnimationPacketsEnabled() {
 | 
			
		||||
        return animationEnabled;
 | 
			
		||||
    }
 | 
			
		||||
@@ -263,6 +268,10 @@ public class DisguiseConfig {
 | 
			
		||||
        keepDisguisePlayerLogout = keepDisguise;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void setMaxClonedDisguises(int newMax) {
 | 
			
		||||
        maxClonedDisguises = newMax;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void setMaxHealthDeterminedByDisguisedEntity(boolean isDetermined) {
 | 
			
		||||
        maxHealthIsDisguisedEntity = isDetermined;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
package me.libraryaddict.disguise;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Random;
 | 
			
		||||
 | 
			
		||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
 | 
			
		||||
import me.libraryaddict.disguise.disguisetypes.PlayerDisguise;
 | 
			
		||||
@@ -127,7 +128,7 @@ public class DisguiseListener implements Listener {
 | 
			
		||||
            disguiseRunnable.remove(p.getName()).cancel();
 | 
			
		||||
            Entity entity = event.getRightClicked();
 | 
			
		||||
            String entityName = "";
 | 
			
		||||
            if (entity instanceof Player) {
 | 
			
		||||
            if (entity instanceof Player && !disguiseClone.containsKey(p.getName())) {
 | 
			
		||||
                entityName = ((Player) entity).getName();
 | 
			
		||||
            } else {
 | 
			
		||||
                String[] split = entity.getType().name().split("_");
 | 
			
		||||
@@ -138,62 +139,73 @@ public class DisguiseListener implements Listener {
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            Disguise disguise = null;
 | 
			
		||||
            Entity disguiseTarget = null;
 | 
			
		||||
            if (disguiseClone.containsKey(p.getName())) {
 | 
			
		||||
                Boolean[] options = disguiseClone.remove(p.getName());
 | 
			
		||||
                disguiseTarget = p;
 | 
			
		||||
                disguise = DisguiseAPI.getDisguise(p, entity);
 | 
			
		||||
                Disguise disguise = DisguiseAPI.getDisguise(p, entity);
 | 
			
		||||
                if (disguise == null) {
 | 
			
		||||
                    disguise = DisguiseAPI.constructDisguise(entity, options[0], options[1], options[2]);
 | 
			
		||||
                } else {
 | 
			
		||||
                    disguise = disguise.clone();
 | 
			
		||||
                }
 | 
			
		||||
            } else if (disguiseEntity.containsKey(p.getName())) {
 | 
			
		||||
                disguiseTarget = entity;
 | 
			
		||||
                disguise = disguiseEntity.remove(p.getName());
 | 
			
		||||
            }
 | 
			
		||||
            if (disguise != null) {
 | 
			
		||||
                if (disguise.isMiscDisguise() && !DisguiseConfig.isMiscDisguisesForLivingEnabled()
 | 
			
		||||
                        && disguiseTarget instanceof LivingEntity) {
 | 
			
		||||
                    p.sendMessage(ChatColor.RED
 | 
			
		||||
                            + "Can't disguise a living entity as a misc disguise. This has been disabled in the config!");
 | 
			
		||||
                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[new 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 {
 | 
			
		||||
                    if (disguiseTarget instanceof Player && DisguiseConfig.isNameOfPlayerShownAboveDisguise()) {
 | 
			
		||||
                        if (disguise.getWatcher() instanceof LivingWatcher) {
 | 
			
		||||
                            ((LivingWatcher) disguise.getWatcher()).setCustomName(((Player) disguiseTarget).getDisplayName());
 | 
			
		||||
                            if (DisguiseConfig.isNameAboveHeadAlwaysVisible()) {
 | 
			
		||||
                                ((LivingWatcher) disguise.getWatcher()).setCustomNameVisible(true);
 | 
			
		||||
                    p.sendMessage(ChatColor.RED
 | 
			
		||||
                            + "Failed to store the reference due to lack of size. Please set this in the config");
 | 
			
		||||
                }
 | 
			
		||||
            } else if (disguiseEntity.containsKey(p.getName())) {
 | 
			
		||||
                Disguise disguise = disguiseEntity.remove(p.getName());
 | 
			
		||||
                if (disguise != null) {
 | 
			
		||||
                    if (disguise.isMiscDisguise() && !DisguiseConfig.isMiscDisguisesForLivingEnabled()
 | 
			
		||||
                            && entity instanceof LivingEntity) {
 | 
			
		||||
                        p.sendMessage(ChatColor.RED
 | 
			
		||||
                                + "Can't disguise a living entity as a misc disguise. This has been disabled in the config!");
 | 
			
		||||
                    } else {
 | 
			
		||||
                        if (entity instanceof Player && DisguiseConfig.isNameOfPlayerShownAboveDisguise()) {
 | 
			
		||||
                            if (disguise.getWatcher() instanceof LivingWatcher) {
 | 
			
		||||
                                ((LivingWatcher) disguise.getWatcher()).setCustomName(((Player) entity).getDisplayName());
 | 
			
		||||
                                if (DisguiseConfig.isNameAboveHeadAlwaysVisible()) {
 | 
			
		||||
                                    ((LivingWatcher) disguise.getWatcher()).setCustomNameVisible(true);
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    DisguiseAPI.disguiseToAll(disguiseTarget, disguise);
 | 
			
		||||
                    String disguiseName = "a ";
 | 
			
		||||
                    if (disguise instanceof PlayerDisguise) {
 | 
			
		||||
                        disguiseName = "the player " + ((PlayerDisguise) disguise).getName();
 | 
			
		||||
                    } else {
 | 
			
		||||
                        String[] split = disguise.getType().name().split("_");
 | 
			
		||||
                        for (int i = 0; i < split.length; i++) {
 | 
			
		||||
                            disguiseName += split[0].substring(0, 1) + split[0].substring(1).toLowerCase();
 | 
			
		||||
                            if (i + 1 < split.length) {
 | 
			
		||||
                                disguiseName += " ";
 | 
			
		||||
                        DisguiseAPI.disguiseToAll(entity, disguise);
 | 
			
		||||
                        String disguiseName = "a ";
 | 
			
		||||
                        if (disguise instanceof PlayerDisguise) {
 | 
			
		||||
                            disguiseName = "the player " + ((PlayerDisguise) disguise).getName();
 | 
			
		||||
                        } else {
 | 
			
		||||
                            String[] split = disguise.getType().name().split("_");
 | 
			
		||||
                            for (int i = 0; i < split.length; i++) {
 | 
			
		||||
                                disguiseName += split[0].substring(0, 1) + split[0].substring(1).toLowerCase();
 | 
			
		||||
                                if (i + 1 < split.length) {
 | 
			
		||||
                                    disguiseName += " ";
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    if (disguiseTarget == p) {
 | 
			
		||||
                        p.sendMessage(ChatColor.RED + "Disguised yourself" + " as " + (entity instanceof Player ? "" : "a ")
 | 
			
		||||
                                + entityName + "!");
 | 
			
		||||
                    } else {
 | 
			
		||||
                        p.sendMessage(ChatColor.RED + "Disguised " + (entity instanceof Player ? "" : "the ") + entityName
 | 
			
		||||
                                + " as " + disguiseName + "!");
 | 
			
		||||
                    }
 | 
			
		||||
                } else {
 | 
			
		||||
                    if (DisguiseAPI.isDisguised(entity)) {
 | 
			
		||||
                        DisguiseAPI.undisguiseToAll(entity);
 | 
			
		||||
                        p.sendMessage(ChatColor.RED + "Undisguised " + (entity instanceof Player ? "" : "the ") + entityName);
 | 
			
		||||
                    } else
 | 
			
		||||
                        p.sendMessage(ChatColor.RED + (entity instanceof Player ? "" : "the") + entityName + " isn't disguised!");
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                if (DisguiseAPI.isDisguised(entity)) {
 | 
			
		||||
                    DisguiseAPI.undisguiseToAll(entity);
 | 
			
		||||
                    p.sendMessage(ChatColor.RED + "Undisguised " + (entity instanceof Player ? "" : "the ") + entityName);
 | 
			
		||||
                } else
 | 
			
		||||
                    p.sendMessage(ChatColor.RED + (entity instanceof Player ? "" : "the") + entityName + " isn't disguised!");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -119,6 +119,7 @@ public class LibsDisguises extends JavaPlugin {
 | 
			
		||||
        DisguiseConfig.setMaxHealthDeterminedByDisguisedEntity(getConfig().getBoolean("MaxHealthDeterminedByEntity"));
 | 
			
		||||
        DisguiseConfig.setDisguiseEntityExpire(getConfig().getInt("DisguiseEntityExpire"));
 | 
			
		||||
        DisguiseConfig.setDisguiseCloneExpire(getConfig().getInt("DisguiseCloneExpire"));
 | 
			
		||||
        DisguiseConfig.setMaxClonedDisguises(getConfig().getInt("DisguiseCloneSize"));
 | 
			
		||||
        try {
 | 
			
		||||
            // Here I use reflection to set the plugin for Disguise..
 | 
			
		||||
            // Kind of stupid but I don't want open API calls for a commonly used object.
 | 
			
		||||
 
 | 
			
		||||
@@ -45,7 +45,7 @@ public class DisguiseCloneCommand extends BaseDisguiseCommand {
 | 
			
		||||
            }
 | 
			
		||||
            listener.setDisguiseClone(sender.getName(), new Boolean[] { doEnquipment, doSneak, doSprint });
 | 
			
		||||
            sender.sendMessage(ChatColor.RED + "Right click a entity in the next " + DisguiseConfig.getDisguiseCloneExpire()
 | 
			
		||||
                    + " seconds to disguise as it!");
 | 
			
		||||
                    + " seconds to grab the disguise reference!");
 | 
			
		||||
        } else {
 | 
			
		||||
            sender.sendMessage(ChatColor.RED + "You are forbidden to use this command.");
 | 
			
		||||
        }
 | 
			
		||||
@@ -56,7 +56,9 @@ public class DisguiseCloneCommand extends BaseDisguiseCommand {
 | 
			
		||||
     * Send the player the information
 | 
			
		||||
     */
 | 
			
		||||
    protected void sendCommandUsage(CommandSender sender) {
 | 
			
		||||
        sender.sendMessage(ChatColor.DARK_GREEN + "Disguise as the entity you right click! Or as their disguise!");
 | 
			
		||||
        sender.sendMessage(ChatColor.DARK_GREEN
 | 
			
		||||
                + "Right click a entity to get a disguise reference you can pass to other disguise commands!");
 | 
			
		||||
        sender.sendMessage(ChatColor.DARK_GREEN + "Beware however, the reference bypasses all permissions checks");
 | 
			
		||||
        sender.sendMessage(ChatColor.DARK_GREEN + "/disguiseclone IgnoreEnquipment" + ChatColor.DARK_GREEN + "("
 | 
			
		||||
                + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + ")");
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -166,89 +166,101 @@ public abstract class BaseDisguiseCommand implements CommandExecutor {
 | 
			
		||||
            sendCommandUsage(sender);
 | 
			
		||||
            throw new Exception();
 | 
			
		||||
        }
 | 
			
		||||
        DisguiseType disguiseType = null;
 | 
			
		||||
        if (args[0].equalsIgnoreCase("p")) {
 | 
			
		||||
            disguiseType = DisguiseType.PLAYER;
 | 
			
		||||
        } else {
 | 
			
		||||
            for (DisguiseType type : DisguiseType.values()) {
 | 
			
		||||
                if (type.getEntityType() == null) {
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                if (args[0].equalsIgnoreCase(type.name()) || args[0].equalsIgnoreCase(type.name().replace("_", ""))) {
 | 
			
		||||
                    disguiseType = type;
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (disguiseType == null) {
 | 
			
		||||
            throw new Exception(ChatColor.RED + "Error! The disguise " + ChatColor.GREEN + args[0] + ChatColor.RED
 | 
			
		||||
                    + " doesn't exist!");
 | 
			
		||||
        }
 | 
			
		||||
        if (!allowedDisguises.contains(disguiseType.name().toLowerCase())) {
 | 
			
		||||
            throw new Exception(ChatColor.RED + "You are forbidden to use this disguise.");
 | 
			
		||||
        }
 | 
			
		||||
        ArrayList<String> usedOptions = new ArrayList<String>();
 | 
			
		||||
        Disguise disguise = null;
 | 
			
		||||
        // How many args to skip due to the disugise being constructed
 | 
			
		||||
        int toSkip = 1;
 | 
			
		||||
        // Time to start constructing the disguise.
 | 
			
		||||
        // We will need to check between all 3 kinds of disguises
 | 
			
		||||
 | 
			
		||||
        HashSet<HashSet<String>> optionPermissions = this.getPermissions(sender, disguiseType.name().toLowerCase());
 | 
			
		||||
        if (disguiseType.isPlayer()) {// If he is doing a player disguise
 | 
			
		||||
            if (args.length == 1) {
 | 
			
		||||
                // He needs to give the player name
 | 
			
		||||
                throw new Exception(ChatColor.RED + "Error! You need to give a player name!");
 | 
			
		||||
        int toSkip = 1;
 | 
			
		||||
        ArrayList<String> usedOptions = new ArrayList<String>();
 | 
			
		||||
        Disguise disguise = null;
 | 
			
		||||
        HashSet<HashSet<String>> optionPermissions;
 | 
			
		||||
        if (args[0].startsWith("@")) {
 | 
			
		||||
            if (sender.hasPermission("libsdisguises.disguise.disguiseclone")) {
 | 
			
		||||
                disguise = DisguiseUtilities.getClonedDisguise(args[0].toLowerCase());
 | 
			
		||||
                if (disguise == null) {
 | 
			
		||||
                    throw new Exception(ChatColor.RED + "Cannot find a disguise under the reference " + args[0]);
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                // Construct the player disguise
 | 
			
		||||
                disguise = new PlayerDisguise(ChatColor.translateAlternateColorCodes('&', args[1]));
 | 
			
		||||
                toSkip++;
 | 
			
		||||
                throw new Exception(ChatColor.RED + "You do not have perimssion to use disguise references!");
 | 
			
		||||
            }
 | 
			
		||||
            optionPermissions = this.getPermissions(sender, disguise.getType().name().toLowerCase());
 | 
			
		||||
        } else {
 | 
			
		||||
            if (disguiseType.isMob()) { // Its a mob, use the mob constructor
 | 
			
		||||
                boolean adult = true;
 | 
			
		||||
                if (args.length > 1) {
 | 
			
		||||
                    if (args[1].equalsIgnoreCase("baby") || args[1].equalsIgnoreCase("adult")) {
 | 
			
		||||
                        usedOptions.add("setbaby");
 | 
			
		||||
                        doCheck(optionPermissions, usedOptions);
 | 
			
		||||
                        adult = args[1].equalsIgnoreCase("adult");
 | 
			
		||||
                        toSkip++;
 | 
			
		||||
            DisguiseType disguiseType = null;
 | 
			
		||||
            if (args[0].equalsIgnoreCase("p")) {
 | 
			
		||||
                disguiseType = DisguiseType.PLAYER;
 | 
			
		||||
            } else {
 | 
			
		||||
                for (DisguiseType type : DisguiseType.values()) {
 | 
			
		||||
                    if (type.getEntityType() == null) {
 | 
			
		||||
                        continue;
 | 
			
		||||
                    }
 | 
			
		||||
                    if (args[0].equalsIgnoreCase(type.name()) || args[0].equalsIgnoreCase(type.name().replace("_", ""))) {
 | 
			
		||||
                        disguiseType = type;
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                disguise = new MobDisguise(disguiseType, adult);
 | 
			
		||||
            } else if (disguiseType.isMisc()) {
 | 
			
		||||
                // Its a misc, we are going to use the MiscDisguise constructor.
 | 
			
		||||
                int miscId = -1;
 | 
			
		||||
                int miscData = -1;
 | 
			
		||||
                if (args.length > 1) {
 | 
			
		||||
                    // They have defined more arguements!
 | 
			
		||||
                    // If the first arg is a number
 | 
			
		||||
                    if (isNumeric(args[1])) {
 | 
			
		||||
                        miscId = Integer.parseInt(args[1]);
 | 
			
		||||
                        toSkip++;
 | 
			
		||||
                        // If they also defined a data value
 | 
			
		||||
                        if (args.length > 2) {
 | 
			
		||||
                            if (isNumeric(args[2])) {
 | 
			
		||||
                                miscData = Integer.parseInt(args[2]);
 | 
			
		||||
                                toSkip++;
 | 
			
		||||
            }
 | 
			
		||||
            if (disguiseType == null) {
 | 
			
		||||
                throw new Exception(ChatColor.RED + "Error! The disguise " + ChatColor.GREEN + args[0] + ChatColor.RED
 | 
			
		||||
                        + " doesn't exist!");
 | 
			
		||||
            }
 | 
			
		||||
            if (!allowedDisguises.contains(disguiseType.name().toLowerCase())) {
 | 
			
		||||
                throw new Exception(ChatColor.RED + "You are forbidden to use this disguise.");
 | 
			
		||||
            }
 | 
			
		||||
            optionPermissions = this.getPermissions(sender, disguiseType.name().toLowerCase());
 | 
			
		||||
            if (disguiseType.isPlayer()) {// If he is doing a player disguise
 | 
			
		||||
                if (args.length == 1) {
 | 
			
		||||
                    // He needs to give the player name
 | 
			
		||||
                    throw new Exception(ChatColor.RED + "Error! You need to give a player name!");
 | 
			
		||||
                } else {
 | 
			
		||||
                    // Construct the player disguise
 | 
			
		||||
                    disguise = new PlayerDisguise(ChatColor.translateAlternateColorCodes('&', args[1]));
 | 
			
		||||
                    toSkip++;
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                if (disguiseType.isMob()) { // Its a mob, use the mob constructor
 | 
			
		||||
                    boolean adult = true;
 | 
			
		||||
                    if (args.length > 1) {
 | 
			
		||||
                        if (args[1].equalsIgnoreCase("baby") || args[1].equalsIgnoreCase("adult")) {
 | 
			
		||||
                            usedOptions.add("setbaby");
 | 
			
		||||
                            doCheck(optionPermissions, usedOptions);
 | 
			
		||||
                            adult = args[1].equalsIgnoreCase("adult");
 | 
			
		||||
                            toSkip++;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    disguise = new MobDisguise(disguiseType, adult);
 | 
			
		||||
                } else if (disguiseType.isMisc()) {
 | 
			
		||||
                    // Its a misc, we are going to use the MiscDisguise constructor.
 | 
			
		||||
                    int miscId = -1;
 | 
			
		||||
                    int miscData = -1;
 | 
			
		||||
                    if (args.length > 1) {
 | 
			
		||||
                        // They have defined more arguements!
 | 
			
		||||
                        // If the first arg is a number
 | 
			
		||||
                        if (isNumeric(args[1])) {
 | 
			
		||||
                            miscId = Integer.parseInt(args[1]);
 | 
			
		||||
                            toSkip++;
 | 
			
		||||
                            // If they also defined a data value
 | 
			
		||||
                            if (args.length > 2) {
 | 
			
		||||
                                if (isNumeric(args[2])) {
 | 
			
		||||
                                    miscData = Integer.parseInt(args[2]);
 | 
			
		||||
                                    toSkip++;
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (miscId != -1) {
 | 
			
		||||
                    if (disguiseType == DisguiseType.FALLING_BLOCK) {
 | 
			
		||||
                        usedOptions.add("setblock");
 | 
			
		||||
                        doCheck(optionPermissions, usedOptions);
 | 
			
		||||
                    } else if (disguiseType == DisguiseType.PAINTING) {
 | 
			
		||||
                        usedOptions.add("setpainting");
 | 
			
		||||
                        doCheck(optionPermissions, usedOptions);
 | 
			
		||||
                    } else if (disguiseType == DisguiseType.SPLASH_POTION) {
 | 
			
		||||
                        usedOptions.add("setpotionid");
 | 
			
		||||
                        doCheck(optionPermissions, usedOptions);
 | 
			
		||||
                    if (miscId != -1) {
 | 
			
		||||
                        if (disguiseType == DisguiseType.FALLING_BLOCK) {
 | 
			
		||||
                            usedOptions.add("setblock");
 | 
			
		||||
                            doCheck(optionPermissions, usedOptions);
 | 
			
		||||
                        } else if (disguiseType == DisguiseType.PAINTING) {
 | 
			
		||||
                            usedOptions.add("setpainting");
 | 
			
		||||
                            doCheck(optionPermissions, usedOptions);
 | 
			
		||||
                        } else if (disguiseType == DisguiseType.SPLASH_POTION) {
 | 
			
		||||
                            usedOptions.add("setpotionid");
 | 
			
		||||
                            doCheck(optionPermissions, usedOptions);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    // Construct the disguise
 | 
			
		||||
                    disguise = new MiscDisguise(disguiseType, miscId, miscData);
 | 
			
		||||
                }
 | 
			
		||||
                // Construct the disguise
 | 
			
		||||
                disguise = new MiscDisguise(disguiseType, miscId, miscData);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        // Copy strings to their new range
 | 
			
		||||
 
 | 
			
		||||
@@ -7,10 +7,12 @@ import java.util.ArrayList;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.Iterator;
 | 
			
		||||
import java.util.LinkedHashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseAPI;
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseConfig;
 | 
			
		||||
import me.libraryaddict.disguise.LibsDisguises;
 | 
			
		||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
 | 
			
		||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
 | 
			
		||||
@@ -19,6 +21,7 @@ import me.libraryaddict.disguise.disguisetypes.TargetedDisguise;
 | 
			
		||||
import me.libraryaddict.disguise.disguisetypes.watchers.AgeableWatcher;
 | 
			
		||||
import me.libraryaddict.disguise.disguisetypes.watchers.ZombieWatcher;
 | 
			
		||||
import me.libraryaddict.disguise.disguisetypes.TargetedDisguise.TargetType;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.Location;
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
@@ -42,6 +45,7 @@ public class DisguiseUtilities {
 | 
			
		||||
     * the plugin to do that.
 | 
			
		||||
     */
 | 
			
		||||
    private static HashSet<String> addedByPlugins = new HashSet<String>();
 | 
			
		||||
    private static LinkedHashMap<String, Disguise> clonedDisguises = new LinkedHashMap<String, Disguise>();
 | 
			
		||||
    /**
 | 
			
		||||
     * A hashmap of the uuid's of entitys, alive and dead. And their disguises in use
 | 
			
		||||
     **/
 | 
			
		||||
@@ -63,6 +67,21 @@ public class DisguiseUtilities {
 | 
			
		||||
     **/
 | 
			
		||||
    private static HashMap<UUID, Integer> selfDisguisesIds = new HashMap<UUID, Integer>();
 | 
			
		||||
 | 
			
		||||
    public static boolean addClonedDisguise(String key, Disguise disguise) {
 | 
			
		||||
        if (DisguiseConfig.getMaxClonedDisguises() > 0) {
 | 
			
		||||
            if (clonedDisguises.containsKey(key)) {
 | 
			
		||||
                clonedDisguises.remove(key);
 | 
			
		||||
            } else if (DisguiseConfig.getMaxClonedDisguises() == clonedDisguises.size()) {
 | 
			
		||||
                clonedDisguises.remove(clonedDisguises.keySet().iterator().next());
 | 
			
		||||
            }
 | 
			
		||||
            if (DisguiseConfig.getMaxClonedDisguises() > clonedDisguises.size()) {
 | 
			
		||||
                clonedDisguises.put(key, disguise);
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void addDisguise(UUID entityId, TargetedDisguise disguise) {
 | 
			
		||||
        if (!getDisguises().containsKey(entityId)) {
 | 
			
		||||
            getDisguises().put(entityId, new HashSet<TargetedDisguise>());
 | 
			
		||||
@@ -217,6 +236,13 @@ public class DisguiseUtilities {
 | 
			
		||||
        return addedByPlugins;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static Disguise getClonedDisguise(String key) {
 | 
			
		||||
        if (clonedDisguises.containsKey(key)) {
 | 
			
		||||
            return clonedDisguises.get(key);
 | 
			
		||||
        }
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static TargetedDisguise getDisguise(Player observer, Entity entity) {
 | 
			
		||||
        UUID entityId = entity.getUniqueId();
 | 
			
		||||
        if (futureDisguises.containsKey(entity.getEntityId())) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user