Opps, forgot to commit the new commands
This commit is contained in:
		| @@ -0,0 +1,159 @@ | ||||
| package me.libraryaddict.disguise.commands; | ||||
|  | ||||
| import java.lang.reflect.Method; | ||||
| import java.util.ArrayList; | ||||
| 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.Entity; | ||||
| import org.bukkit.entity.Player; | ||||
|  | ||||
| import me.libraryaddict.disguise.DisguiseAPI; | ||||
| import me.libraryaddict.disguise.disguisetypes.Disguise; | ||||
| import me.libraryaddict.disguise.disguisetypes.DisguiseType; | ||||
| import me.libraryaddict.disguise.utilities.DisguiseParser; | ||||
| import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException; | ||||
| import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm; | ||||
| import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers; | ||||
| import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo; | ||||
|  | ||||
| public class DisguiseModifyCommand extends DisguiseBaseCommand implements TabCompleter { | ||||
|     @Override | ||||
|     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { | ||||
|         if (!(sender instanceof Entity)) { | ||||
|             sender.sendMessage(ChatColor.RED + "You may not use this command from the console!"); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map = getPermissions(sender); | ||||
|  | ||||
|         if (map.isEmpty()) { | ||||
|             sender.sendMessage(ChatColor.RED + "You are forbidden to use this command."); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         if (args.length == 0) { | ||||
|             sendCommandUsage(sender, getPermissions(sender)); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         Disguise disguise = DisguiseAPI.getDisguise((Player) sender, (Entity) sender); | ||||
|  | ||||
|         if (disguise == null) { | ||||
|             sender.sendMessage(ChatColor.RED + "You are not disguised!"); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         if (!map.containsKey(new DisguisePerm(disguise.getType()))) { | ||||
|             sender.sendMessage(ChatColor.RED + "No permission to modify your disguise!"); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         try { | ||||
|             DisguiseParser.callMethods(sender, disguise, getPermissions(sender).get(new DisguisePerm(disguise.getType())), | ||||
|                     new ArrayList<String>(), args); | ||||
|         } | ||||
|         catch (DisguiseParseException ex) { | ||||
|             if (ex.getMessage() != null) { | ||||
|                 sender.sendMessage(ex.getMessage()); | ||||
|             } | ||||
|  | ||||
|             return true; | ||||
|         } | ||||
|         catch (Exception ex) { | ||||
|             ex.printStackTrace(); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         sender.sendMessage(ChatColor.RED + "Your disguise has been modified!"); | ||||
|  | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) { | ||||
|         ArrayList<String> tabs = new ArrayList<String>(); | ||||
|  | ||||
|         if (!(sender instanceof Player)) | ||||
|             return tabs; | ||||
|  | ||||
|         Disguise disguise = DisguiseAPI.getDisguise((Player) sender, (Entity) sender); | ||||
|  | ||||
|         if (disguise == null) | ||||
|             return tabs; | ||||
|  | ||||
|         String[] args = getArgs(origArgs); | ||||
|  | ||||
|         HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> perms = getPermissions(sender); | ||||
|  | ||||
|         DisguisePerm disguiseType = new DisguisePerm(disguise.getType()); | ||||
|  | ||||
|         ArrayList<String> usedOptions = new ArrayList<String>(); | ||||
|  | ||||
|         for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) { | ||||
|             for (int i = disguiseType.getType() == DisguiseType.PLAYER ? 2 : 1; i < args.length; i++) { | ||||
|                 String arg = args[i]; | ||||
|  | ||||
|                 if (!method.getName().equalsIgnoreCase(arg)) | ||||
|                     continue; | ||||
|  | ||||
|                 usedOptions.add(arg); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         if (passesCheck(sender, perms.get(disguiseType), usedOptions)) { | ||||
|             boolean addMethods = true; | ||||
|  | ||||
|             if (args.length > 1) { | ||||
|                 String prevArg = args[args.length - 1]; | ||||
|  | ||||
|                 ParamInfo info = ReflectionFlagWatchers.getParamInfo(disguiseType, prevArg); | ||||
|  | ||||
|                 if (info != null) { | ||||
|                     if (info.getParamClass() != boolean.class) | ||||
|                         addMethods = false; | ||||
|  | ||||
|                     if (info.isEnums()) { | ||||
|                         for (String e : info.getEnums(origArgs[origArgs.length - 1])) { | ||||
|                             tabs.add(e); | ||||
|                         } | ||||
|                     } | ||||
|                     else { | ||||
|                         if (info.getParamClass() == String.class) { | ||||
|                             for (Player player : Bukkit.getOnlinePlayers()) { | ||||
|                                 tabs.add(player.getName()); | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             if (addMethods) { | ||||
|                 // If this is a method, add. Else if it can be a param of the previous argument, add. | ||||
|                 for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) { | ||||
|                     tabs.add(method.getName()); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return filterTabs(tabs, origArgs); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Send the player the information | ||||
|      */ | ||||
|     @Override | ||||
|     protected void sendCommandUsage(CommandSender sender, HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) { | ||||
|         ArrayList<String> allowedDisguises = getAllowedDisguises(map); | ||||
|         sender.sendMessage(ChatColor.DARK_GREEN + "Modify your own disguise as you wear it!"); | ||||
|         sender.sendMessage(ChatColor.DARK_GREEN + "/disguisemodify setBaby true setSprinting true"); | ||||
|         sender.sendMessage(ChatColor.DARK_GREEN + "You can modify the disguises: " + ChatColor.GREEN | ||||
|                 + StringUtils.join(allowedDisguises, ChatColor.RED + ", " + ChatColor.GREEN)); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,115 @@ | ||||
| package me.libraryaddict.disguise.commands; | ||||
|  | ||||
| import java.lang.reflect.Method; | ||||
| import java.util.ArrayList; | ||||
| 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.ReflectionFlagWatchers; | ||||
| import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo; | ||||
|  | ||||
| public class DisguiseModifyEntityCommand extends DisguiseBaseCommand implements TabCompleter { | ||||
|     @Override | ||||
|     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { | ||||
|         if (!(sender instanceof Player)) { | ||||
|             sender.sendMessage(ChatColor.RED + "You may not use this command from the console!"); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         if (getPermissions(sender).isEmpty()) { | ||||
|             sender.sendMessage(ChatColor.RED + "You are forbidden to use this command."); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         if (args.length == 0) { | ||||
|             sendCommandUsage(sender, getPermissions(sender)); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         LibsDisguises.getInstance().getListener().setDisguiseModify(sender.getName(), args); | ||||
|  | ||||
|         sender.sendMessage(ChatColor.RED + "Right click a disguised entity in the next " | ||||
|                 + DisguiseConfig.getDisguiseEntityExpire() + " seconds to modify their disguise!"); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) { | ||||
|         ArrayList<String> tabs = new ArrayList<String>(); | ||||
|  | ||||
|         if (!(sender instanceof Player)) { | ||||
|             return tabs; | ||||
|         } | ||||
|  | ||||
|         String[] args = getArgs(origArgs); | ||||
|  | ||||
|         HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> perms = getPermissions(sender); | ||||
|  | ||||
|         if (perms.isEmpty()) | ||||
|             return tabs; | ||||
|  | ||||
|         for (DisguisePerm perm : perms.keySet()) { | ||||
|             boolean addMethods = true; | ||||
|  | ||||
|             if (args.length > 1) { | ||||
|                 String prevArg = args[args.length - 1]; | ||||
|  | ||||
|                 ParamInfo info = ReflectionFlagWatchers.getParamInfo(perm.getType(), prevArg); | ||||
|  | ||||
|                 if (info != null) { | ||||
|                     if (info.getParamClass() != boolean.class) | ||||
|                         addMethods = false; | ||||
|  | ||||
|                     if (info.isEnums()) { | ||||
|                         for (String e : info.getEnums(origArgs[origArgs.length - 1])) { | ||||
|                             tabs.add(e); | ||||
|                         } | ||||
|                     } | ||||
|                     else { | ||||
|                         if (info.getParamClass() == String.class) { | ||||
|                             for (Player player : Bukkit.getOnlinePlayers()) { | ||||
|                                 tabs.add(player.getName()); | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             if (addMethods) { | ||||
|                 // If this is a method, add. Else if it can be a param of the previous argument, add. | ||||
|                 for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(perm.getType().getWatcherClass())) { | ||||
|                     tabs.add(method.getName()); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return filterTabs(tabs, origArgs); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Send the player the information | ||||
|      * | ||||
|      * @param sender | ||||
|      * @param map | ||||
|      */ | ||||
|     @Override | ||||
|     protected void sendCommandUsage(CommandSender sender, HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) { | ||||
|         ArrayList<String> allowedDisguises = getAllowedDisguises(map); | ||||
|  | ||||
|         sender.sendMessage(ChatColor.DARK_GREEN + "Choose the options for a disguise then right click a entity to modify it!"); | ||||
|         sender.sendMessage(ChatColor.DARK_GREEN + "You can modify the disguises: " + ChatColor.GREEN | ||||
|                 + StringUtils.join(allowedDisguises, ChatColor.RED + ", " + ChatColor.GREEN)); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,195 @@ | ||||
| package me.libraryaddict.disguise.commands; | ||||
|  | ||||
| import java.lang.reflect.Method; | ||||
| import java.util.ArrayList; | ||||
| 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.DisguiseAPI; | ||||
| import me.libraryaddict.disguise.disguisetypes.Disguise; | ||||
| import me.libraryaddict.disguise.utilities.DisguiseParser; | ||||
| import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException; | ||||
| import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm; | ||||
| import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers; | ||||
| import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo; | ||||
|  | ||||
| public class DisguiseModifyPlayerCommand extends DisguiseBaseCommand implements TabCompleter { | ||||
|  | ||||
|     @Override | ||||
|     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { | ||||
|         HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map = getPermissions(sender); | ||||
|  | ||||
|         if (map.isEmpty()) { | ||||
|             sender.sendMessage(ChatColor.RED + "You are forbidden to use this command."); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         if (args.length == 0) { | ||||
|             sendCommandUsage(sender, map); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         Player player = Bukkit.getPlayer(args[0]); | ||||
|  | ||||
|         if (player == null) { | ||||
|             sender.sendMessage(ChatColor.RED + "Cannot find the player '" + args[0] + "'"); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         String[] newArgs = new String[args.length - 1]; | ||||
|         System.arraycopy(args, 1, newArgs, 0, newArgs.length); | ||||
|  | ||||
|         if (newArgs.length == 0) { | ||||
|             sendCommandUsage(sender, map); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         Disguise disguise = null; | ||||
|  | ||||
|         if (sender instanceof Player) | ||||
|             disguise = DisguiseAPI.getDisguise((Player) sender, player); | ||||
|  | ||||
|         if (disguise == null) | ||||
|             disguise = DisguiseAPI.getDisguise(player); | ||||
|  | ||||
|         if (disguise == null) { | ||||
|             sender.sendMessage(ChatColor.RED + "The player '" + player.getName() + "' is not disguised"); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         if (!map.containsKey(new DisguisePerm(disguise.getType()))) { | ||||
|             sender.sendMessage(ChatColor.RED + "You do not have permission to modify this disguise"); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         try { | ||||
|             DisguiseParser.callMethods(sender, disguise, map.get(new DisguisePerm(disguise.getType())), new ArrayList<String>(), | ||||
|                     newArgs); | ||||
|         } | ||||
|         catch (DisguiseParseException ex) { | ||||
|             if (ex.getMessage() != null) { | ||||
|                 sender.sendMessage(ex.getMessage()); | ||||
|             } | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         catch (Exception ex) { | ||||
|             ex.printStackTrace(); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         sender.sendMessage(ChatColor.RED + "Modified the disguise of " + player.getName() + "!"); | ||||
|  | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) { | ||||
|         ArrayList<String> tabs = new ArrayList<String>(); | ||||
|         String[] args = getArgs(origArgs); | ||||
|  | ||||
|         HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> perms = getPermissions(sender); | ||||
|  | ||||
|         if (perms.isEmpty()) | ||||
|             return tabs; | ||||
|  | ||||
|         if (args.length == 0) { | ||||
|             for (Player player : Bukkit.getOnlinePlayers()) { | ||||
|                 tabs.add(player.getName()); | ||||
|             } | ||||
|         } | ||||
|         else { | ||||
|             Player player = Bukkit.getPlayer(args[0]); | ||||
|  | ||||
|             if (player == null) { | ||||
|                 sender.sendMessage(ChatColor.RED + "Cannot find the player '" + args[0] + "'"); | ||||
|                 return tabs; | ||||
|             } | ||||
|  | ||||
|             Disguise disguise = null; | ||||
|  | ||||
|             if (sender instanceof Player) | ||||
|                 disguise = DisguiseAPI.getDisguise((Player) sender, player); | ||||
|  | ||||
|             if (disguise == null) | ||||
|                 disguise = DisguiseAPI.getDisguise(player); | ||||
|  | ||||
|             if (disguise == null) { | ||||
|                 sender.sendMessage(ChatColor.RED + "The player '" + player.getName() + "' is not disguised"); | ||||
|                 return tabs; | ||||
|             } | ||||
|  | ||||
|             DisguisePerm disguiseType = new DisguisePerm(disguise.getType()); | ||||
|  | ||||
|             ArrayList<String> usedOptions = new ArrayList<String>(); | ||||
|  | ||||
|             for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) { | ||||
|                 for (int i = 1; i < args.length; i++) { | ||||
|                     String arg = args[i]; | ||||
|  | ||||
|                     if (!method.getName().equalsIgnoreCase(arg)) | ||||
|                         continue; | ||||
|  | ||||
|                     usedOptions.add(arg); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             if (passesCheck(sender, perms.get(disguiseType), usedOptions)) { | ||||
|                 boolean addMethods = true; | ||||
|  | ||||
|                 if (args.length > 1) { | ||||
|                     String prevArg = args[args.length - 1]; | ||||
|  | ||||
|                     ParamInfo info = ReflectionFlagWatchers.getParamInfo(disguiseType, prevArg); | ||||
|  | ||||
|                     if (info != null) { | ||||
|                         if (info.getParamClass() != boolean.class) | ||||
|                             addMethods = false; | ||||
|  | ||||
|                         if (info.isEnums()) { | ||||
|                             for (String e : info.getEnums(origArgs[origArgs.length - 1])) { | ||||
|                                 tabs.add(e); | ||||
|                             } | ||||
|                         } | ||||
|                         else { | ||||
|                             if (info.getParamClass() == String.class) { | ||||
|                                 for (Player p : Bukkit.getOnlinePlayers()) { | ||||
|                                     tabs.add(p.getName()); | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                 if (addMethods) { | ||||
|                     // If this is a method, add. Else if it can be a param of the previous argument, add. | ||||
|                     for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) { | ||||
|                         tabs.add(method.getName()); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return filterTabs(tabs, origArgs); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Send the player the information | ||||
|      */ | ||||
|     @Override | ||||
|     protected void sendCommandUsage(CommandSender sender, HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) { | ||||
|         ArrayList<String> allowedDisguises = getAllowedDisguises(map); | ||||
|  | ||||
|         sender.sendMessage(ChatColor.DARK_GREEN + "Modify the disguise of another player!"); | ||||
|         sender.sendMessage(ChatColor.DARK_GREEN + "You can modify the disguises: " + ChatColor.GREEN | ||||
|                 + StringUtils.join(allowedDisguises, ChatColor.RED + ", " + ChatColor.GREEN)); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,334 @@ | ||||
| package me.libraryaddict.disguise.commands; | ||||
|  | ||||
| import java.lang.reflect.Method; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collection; | ||||
| import java.util.Collections; | ||||
| 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.Location; | ||||
| import org.bukkit.command.Command; | ||||
| import org.bukkit.command.CommandSender; | ||||
| import org.bukkit.command.TabCompleter; | ||||
| import org.bukkit.craftbukkit.v1_11_R1.command.CraftBlockCommandSender; | ||||
| import org.bukkit.entity.Entity; | ||||
| import org.bukkit.entity.EntityType; | ||||
| import org.bukkit.entity.Player; | ||||
|  | ||||
| import me.libraryaddict.disguise.DisguiseAPI; | ||||
| import me.libraryaddict.disguise.disguisetypes.Disguise; | ||||
| import me.libraryaddict.disguise.disguisetypes.DisguiseType; | ||||
| import me.libraryaddict.disguise.utilities.ClassGetter; | ||||
| import me.libraryaddict.disguise.utilities.DisguiseParser; | ||||
| import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException; | ||||
| import me.libraryaddict.disguise.utilities.DisguiseParser.DisguisePerm; | ||||
| import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers; | ||||
| import me.libraryaddict.disguise.utilities.ReflectionFlagWatchers.ParamInfo; | ||||
|  | ||||
| public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements TabCompleter { | ||||
|     private int maxRadius = 30; | ||||
|     private ArrayList<Class<? extends Entity>> validClasses = new ArrayList<>(); | ||||
|  | ||||
|     public DisguiseModifyRadiusCommand(int maxRadius) { | ||||
|         this.maxRadius = maxRadius; | ||||
|         for (Class c : ClassGetter.getClassesForPackage("org.bukkit.entity")) { | ||||
|             if (c != Entity.class && Entity.class.isAssignableFrom(c) && c.getAnnotation(Deprecated.class) == null) { | ||||
|                 validClasses.add(c); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private Collection<Entity> getNearbyEntities(CommandSender sender, int radius) { | ||||
|         Location center; | ||||
|  | ||||
|         if (sender instanceof Player) { | ||||
|             center = ((Player) sender).getLocation(); | ||||
|         } | ||||
|         else { | ||||
|             center = ((CraftBlockCommandSender) sender).getBlock().getLocation().add(0.5, 0, 0.5); | ||||
|         } | ||||
|  | ||||
|         return center.getWorld().getNearbyEntities(center, radius, radius, radius); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { | ||||
|         if (sender.getName().equals("CONSOLE")) { | ||||
|             sender.sendMessage(ChatColor.RED + "You may not use this command from the console!"); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map = getPermissions(sender); | ||||
|  | ||||
|         if (map.isEmpty()) { | ||||
|             sender.sendMessage(ChatColor.RED + "You are forbidden to use this command."); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         if (args.length == 0) { | ||||
|             sendCommandUsage(sender, map); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         if (args[0].equalsIgnoreCase("entitytype") || args[0].equalsIgnoreCase("entitytypes")) { | ||||
|             ArrayList<String> classes = new ArrayList<>(); | ||||
|  | ||||
|             for (Class c : validClasses) { | ||||
|                 classes.add(c.getSimpleName()); | ||||
|             } | ||||
|  | ||||
|             Collections.sort(classes); | ||||
|  | ||||
|             sender.sendMessage(ChatColor.DARK_GREEN + "EntityTypes usable are: " + ChatColor.GREEN | ||||
|                     + StringUtils.join(classes, ChatColor.DARK_GREEN + ", " + ChatColor.GREEN) + ChatColor.DARK_GREEN + "."); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         Class entityClass = Entity.class; | ||||
|         EntityType type = null; | ||||
|         int starting = 0; | ||||
|  | ||||
|         if (!isNumeric(args[0])) { | ||||
|             for (Class c : validClasses) { | ||||
|                 if (c.getSimpleName().equalsIgnoreCase(args[0])) { | ||||
|                     entityClass = c; | ||||
|                     starting = 1; | ||||
|                     break; | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             if (starting == 0) { | ||||
|                 try { | ||||
|                     type = EntityType.valueOf(args[0].toUpperCase()); | ||||
|                 } | ||||
|                 catch (Exception ex) { | ||||
|                 } | ||||
|  | ||||
|                 if (type == null) { | ||||
|                     sender.sendMessage(ChatColor.RED + "Unrecognised EntityType " + args[0]); | ||||
|                     return true; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         if (args.length == starting + 1) { | ||||
|             sender.sendMessage(ChatColor.RED + "You need to supply the disguise options as well as the radius" | ||||
|                     + (starting != 0 ? " and EntityType" : "")); | ||||
|             return true; | ||||
|         } | ||||
|         else if (args.length < 2) { | ||||
|             sender.sendMessage(ChatColor.RED + "You need to supply a radius as well as the disguise options"); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         if (!isNumeric(args[starting])) { | ||||
|             sender.sendMessage(ChatColor.RED + args[starting] + " is not a number"); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         int radius = Integer.parseInt(args[starting]); | ||||
|  | ||||
|         if (radius > maxRadius) { | ||||
|             sender.sendMessage(ChatColor.RED + "Limited radius to " + maxRadius + "! Don't want to make too much lag right?"); | ||||
|             radius = maxRadius; | ||||
|         } | ||||
|  | ||||
|         String[] newArgs = new String[args.length - (starting + 1)]; | ||||
|         System.arraycopy(args, starting + 1, newArgs, 0, newArgs.length); | ||||
|  | ||||
|         if (newArgs.length == 0) { | ||||
|             sendCommandUsage(sender, map); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         // Time to use it! | ||||
|         int modifiedDisguises = 0; | ||||
|         int noPermission = 0; | ||||
|  | ||||
|         for (Entity entity : getNearbyEntities(sender, radius)) { | ||||
|             if (entity == sender) { | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
|             if (type != null ? entity.getType() != type : !entityClass.isAssignableFrom(entity.getClass())) { | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
|             Disguise disguise; | ||||
|  | ||||
|             if (sender instanceof Player) | ||||
|                 disguise = DisguiseAPI.getDisguise((Player) sender, entity); | ||||
|             else | ||||
|                 disguise = DisguiseAPI.getDisguise(entity); | ||||
|  | ||||
|             if (!map.containsKey(new DisguisePerm(disguise.getType()))) { | ||||
|                 noPermission++; | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
|             try { | ||||
|                 DisguiseParser.callMethods(sender, disguise, map.get(new DisguisePerm(disguise.getType())), | ||||
|                         new ArrayList<String>(), newArgs); | ||||
|                 modifiedDisguises++; | ||||
|             } | ||||
|             catch (DisguiseParseException ex) { | ||||
|                 if (ex.getMessage() != null) { | ||||
|                     sender.sendMessage(ex.getMessage()); | ||||
|                 } | ||||
|  | ||||
|                 return true; | ||||
|             } | ||||
|             catch (Exception ex) { | ||||
|                 ex.printStackTrace(); | ||||
|                 return true; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         if (noPermission > 0) { | ||||
|             sender.sendMessage(ChatColor.RED + "No permission to modify " + noPermission + " disguises!"); | ||||
|         } | ||||
|  | ||||
|         if (modifiedDisguises > 0) { | ||||
|             sender.sendMessage(ChatColor.RED + "Successfully modified the disguises of " + modifiedDisguises + " entities!"); | ||||
|         } | ||||
|         else { | ||||
|             sender.sendMessage(ChatColor.RED + "Couldn't find any disguised entities!"); | ||||
|         } | ||||
|  | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) { | ||||
|         ArrayList<String> tabs = new ArrayList<String>(); | ||||
|         String[] args = getArgs(origArgs); | ||||
|  | ||||
|         HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> perms = getPermissions(sender); | ||||
|  | ||||
|         if (args.length == 0) { | ||||
|             for (Class<? extends Entity> entityClass : validClasses) { | ||||
|                 tabs.add(entityClass.getSimpleName()); | ||||
|             } | ||||
|  | ||||
|             return filterTabs(tabs, origArgs); | ||||
|         } | ||||
|  | ||||
|         int starting = 1; | ||||
|  | ||||
|         if (!isNumeric(args[0])) { | ||||
|             for (Class c : validClasses) { | ||||
|                 if (!c.getSimpleName().equalsIgnoreCase(args[0])) | ||||
|                     continue; | ||||
|  | ||||
|                 starting = 2; | ||||
|                 break; | ||||
|             } | ||||
|  | ||||
|             // Not a valid radius | ||||
|             if (starting == 1 || args.length == 1 || !isNumeric(args[1])) | ||||
|                 return filterTabs(tabs, origArgs); | ||||
|         } | ||||
|  | ||||
|         int radius = Integer.parseInt(args[starting]); | ||||
|  | ||||
|         if (radius > maxRadius) { | ||||
|             sender.sendMessage(ChatColor.RED + "Limited radius to " + maxRadius + "! Don't want to make too much lag right?"); | ||||
|             radius = maxRadius; | ||||
|         } | ||||
|  | ||||
|         ArrayList<String> usedOptions = new ArrayList<String>(); | ||||
|  | ||||
|         for (Entity entity : getNearbyEntities(sender, radius)) { | ||||
|             Disguise disguise = DisguiseAPI.getDisguise(entity); | ||||
|  | ||||
|             if (disguise == null) | ||||
|                 continue; | ||||
|  | ||||
|             DisguiseType disguiseType = disguise.getType(); | ||||
|  | ||||
|             for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) { | ||||
|                 for (int i = 0; i < args.length; i++) { | ||||
|                     String arg = args[i]; | ||||
|  | ||||
|                     if (!method.getName().equalsIgnoreCase(arg)) | ||||
|                         continue; | ||||
|  | ||||
|                     usedOptions.add(arg); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             if (passesCheck(sender, perms.get(disguiseType), usedOptions)) { | ||||
|                 boolean addMethods = true; | ||||
|  | ||||
|                 if (args.length > 1 + starting) { | ||||
|                     String prevArg = args[args.length - 1]; | ||||
|  | ||||
|                     ParamInfo info = ReflectionFlagWatchers.getParamInfo(disguiseType, prevArg); | ||||
|  | ||||
|                     if (info != null) { | ||||
|                         if (info.getParamClass() != boolean.class) | ||||
|                             addMethods = false; | ||||
|  | ||||
|                         if (info.isEnums()) { | ||||
|                             for (String e : info.getEnums(origArgs[origArgs.length - 1])) { | ||||
|                                 tabs.add(e); | ||||
|                             } | ||||
|                         } | ||||
|                         else { | ||||
|                             if (info.getParamClass() == String.class) { | ||||
|                                 for (Player player : Bukkit.getOnlinePlayers()) { | ||||
|                                     tabs.add(player.getName()); | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                 if (addMethods) { | ||||
|                     // If this is a method, add. Else if it can be a param of the previous argument, add. | ||||
|                     for (Method method : ReflectionFlagWatchers.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) { | ||||
|                         tabs.add(method.getName()); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return filterTabs(tabs, origArgs); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Send the player the information | ||||
|      */ | ||||
|     @Override | ||||
|     protected void sendCommandUsage(CommandSender sender, HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> map) { | ||||
|         ArrayList<String> allowedDisguises = getAllowedDisguises(map); | ||||
|  | ||||
|         sender.sendMessage(ChatColor.DARK_GREEN + "Modify the disguises in a radius! Caps at " + maxRadius + " blocks!"); | ||||
|         sender.sendMessage(ChatColor.DARK_GREEN + "You can modify the disguises: " + ChatColor.GREEN | ||||
|                 + StringUtils.join(allowedDisguises, ChatColor.RED + ", " + ChatColor.GREEN)); | ||||
|  | ||||
|         String optional = ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + ")"; | ||||
|  | ||||
|         if (allowedDisguises.contains("player")) { | ||||
|             sender.sendMessage((ChatColor.DARK_GREEN + "/disguiseradius <EntityType" + optional + "> <Radius> player <Name>") | ||||
|                     .replace("<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">")); | ||||
|         } | ||||
|  | ||||
|         sender.sendMessage((ChatColor.DARK_GREEN + "/disguiseradius <EntityType" + optional + "> <Radius> <DisguiseType> <Baby" | ||||
|                 + optional + ">").replace("<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">")); | ||||
|  | ||||
|         if (allowedDisguises.contains("dropped_item") || allowedDisguises.contains("falling_block")) { | ||||
|             sender.sendMessage((ChatColor.DARK_GREEN + "/disguiseradius <EntityType" + optional | ||||
|                     + "> <Radius> <Dropped_Item/Falling_Block> <Id> <Durability" + optional + ">") | ||||
|                             .replace("<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">")); | ||||
|         } | ||||
|  | ||||
|         sender.sendMessage( | ||||
|                 ChatColor.DARK_GREEN + "See the EntityType's usable by " + ChatColor.GREEN + "/disguiseradius EntityTypes"); | ||||
|     } | ||||
|  | ||||
| } | ||||
		Reference in New Issue
	
	Block a user