Added perms for the command, added safety check
This commit is contained in:
		| @@ -18,26 +18,62 @@ import org.bukkit.entity.Player; | ||||
|  | ||||
| public class DisguiseCommand implements CommandExecutor { | ||||
|  | ||||
|     @Override | ||||
|     private ArrayList<String> allowedDisguises(CommandSender sender) { | ||||
|         ArrayList<String> names = new ArrayList<String>(); | ||||
|         for (DisguiseType type : DisguiseType.values()) { | ||||
|             String name = type.name().toLowerCase(); | ||||
|             if (sender.hasPermission("libsdisguises.disguise." + name)) | ||||
|                 names.add(name); | ||||
|         } | ||||
|         Collections.sort(names); | ||||
|         return names; | ||||
|     } | ||||
|  | ||||
|     private ArrayList<String> forbiddenDisguises(CommandSender sender) { | ||||
|         ArrayList<String> names = new ArrayList<String>(); | ||||
|         for (DisguiseType type : DisguiseType.values()) { | ||||
|             String name = type.name().toLowerCase(); | ||||
|             if (!sender.hasPermission("libsdisguises.disguise." + name)) | ||||
|                 names.add(name); | ||||
|         } | ||||
|         Collections.sort(names); | ||||
|         return names; | ||||
|     } | ||||
|  | ||||
|     private boolean isNumeric(String string) { | ||||
|         try { | ||||
|             Integer.parseInt(string); | ||||
|             return true; | ||||
|         } catch (Exception ex) { | ||||
|             return false; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { | ||||
|         if (sender.isOp()) { | ||||
|             Player p = (Player) sender; | ||||
|             if (args.length == 0) { | ||||
|                 ArrayList<String> names = new ArrayList<String>(); | ||||
|                 for (DisguiseType type : DisguiseType.values()) { | ||||
|                     names.add(type.name().toLowerCase()); | ||||
|                 } | ||||
|                 Collections.sort(names); | ||||
|         Player p = (Player) sender; | ||||
|         if (args.length == 0) { | ||||
|             ArrayList<String> names = allowedDisguises(sender); | ||||
|             ArrayList<String> otherNames = forbiddenDisguises(sender); | ||||
|             if (names.size() > 0) { | ||||
|                 sender.sendMessage(ChatColor.RED + "You can use the disguises: " + ChatColor.GREEN | ||||
|                         + StringUtils.join(names, ChatColor.RED + ", " + ChatColor.GREEN)); | ||||
|             } else if (args[0].equalsIgnoreCase("undiguise") || args[0].equalsIgnoreCase("undis") | ||||
|                     || args[0].equalsIgnoreCase("un")) { | ||||
|                 if (otherNames.size() > 0) { | ||||
|                     sender.sendMessage(ChatColor.RED + "Other disguises: " + ChatColor.GREEN | ||||
|                             + StringUtils.join(names, ChatColor.RED + ", " + ChatColor.GREEN)); | ||||
|                 } | ||||
|             } else | ||||
|                 sender.sendMessage(ChatColor.RED + "You do not have permission to use this command."); | ||||
|         } else if (args[0].equalsIgnoreCase("undiguise") || args[0].equalsIgnoreCase("undis") || args[0].equalsIgnoreCase("un")) { | ||||
|             if (sender.hasPermission("libsdisguises.disguise.undisguise")) { | ||||
|                 if (DisguiseAPI.isDisguised(p.getName())) { | ||||
|                     DisguiseAPI.undisguiseToAll(p); | ||||
|                     sender.sendMessage(ChatColor.RED + "You are no longer disguised"); | ||||
|                 } else | ||||
|                     sender.sendMessage(ChatColor.RED + "You are not disguised!"); | ||||
|             } else if (args[0].equalsIgnoreCase("player")) { | ||||
|             } else | ||||
|                 sender.sendMessage(ChatColor.RED + "You do not have permission to use this command."); | ||||
|         } else if (args[0].equalsIgnoreCase("player")) { | ||||
|             if (sender.hasPermission("libsdisguises.disguise.player")) { | ||||
|                 if (args.length > 1) { | ||||
|                     String name = ChatColor.translateAlternateColorCodes('&', | ||||
|                             StringUtils.join(args, " ").substring(args[0].length() + 1)); | ||||
| @@ -48,34 +84,62 @@ public class DisguiseCommand implements CommandExecutor { | ||||
|                 } else | ||||
|                     sender.sendMessage(ChatColor.RED + "You need to provide a player name"); | ||||
|             } else { | ||||
|                 DisguiseType type; | ||||
|                 try { | ||||
|                     type = DisguiseType.valueOf(args[0].toUpperCase()); | ||||
|                 } catch (Exception ex) { | ||||
|                     sender.sendMessage(ChatColor.RED + "Failed to find disguise: " + ChatColor.GREEN + args[0] | ||||
|                             + "\n/disguise player <Name>\n/disguise <Mob Name>\n/disguise undisguise/un/undis"); | ||||
|                     return true; | ||||
|                 } | ||||
|                 boolean adult = true; | ||||
|                 sender.sendMessage(ChatColor.RED + "You do not have permission to use this command"); | ||||
|             } | ||||
|  | ||||
|         } else { | ||||
|             if (allowedDisguises(sender).size() == 0) { | ||||
|                 sender.sendMessage(ChatColor.RED + "You do not have permission to use this command."); | ||||
|                 return true; | ||||
|             } | ||||
|             DisguiseType type; | ||||
|             try { | ||||
|                 type = DisguiseType.valueOf(args[0].toUpperCase()); | ||||
|             } catch (Exception ex) { | ||||
|                 sender.sendMessage(ChatColor.RED + "Failed to find disguise: " + ChatColor.GREEN + args[0] | ||||
|                         + "\n/disguise player <Name>\n/disguise <Mob Name>\n/disguise undisguise/un/undis"); | ||||
|                 return true; | ||||
|             } | ||||
|             if (sender.hasPermission("libsdisguises.disguise." + type.name().toLowerCase())) { | ||||
|                 Object args1 = true; | ||||
|                 if (type.isMisc()) | ||||
|                     args1 = -1; | ||||
|                 int args2 = -1; | ||||
|                 if (args.length > 1) { | ||||
|                     if (args[1].equalsIgnoreCase("true")) { | ||||
|                         adult = false; | ||||
|                     } else if (!args[1].equalsIgnoreCase("false")) { | ||||
|                         sender.sendMessage(ChatColor.RED + "Set baby: " + ChatColor.GREEN + args[1] + ChatColor.RED | ||||
|                                 + " - Thats not true or false.."); | ||||
|                         return true; | ||||
|                     if (type.isMob()) { | ||||
|                         if (args[1].equalsIgnoreCase("true")) { | ||||
|                             args1 = false; | ||||
|                         } else if (!args[1].equalsIgnoreCase("false")) { | ||||
|                             sender.sendMessage(ChatColor.RED + "Set baby: " + ChatColor.GREEN + args[1] + ChatColor.RED | ||||
|                                     + " - Thats not true or false.."); | ||||
|                             return true; | ||||
|                         } | ||||
|                     } else if (type.isMisc()) { | ||||
|                         if (isNumeric(args[1])) { | ||||
|                             args1 = Integer.parseInt(args[1]); | ||||
|                         } else { | ||||
|                             sender.sendMessage(ChatColor.RED + args[1] + " is not a number"); | ||||
|                             return true; | ||||
|                         } | ||||
|                         if (args.length > 2) | ||||
|                             if (isNumeric(args[2])) { | ||||
|                                 args2 = Integer.parseInt(args[2]); | ||||
|                             } else { | ||||
|                                 sender.sendMessage(ChatColor.RED + args[2] + " is not a number"); | ||||
|                                 return true; | ||||
|                             } | ||||
|                     } | ||||
|                 } | ||||
|                 Disguise disguise; | ||||
|                 if (type.isMob()) | ||||
|                     disguise = new MobDisguise(type, adult); | ||||
|                     disguise = new MobDisguise(type, (Boolean) args1); | ||||
|                 else | ||||
|                     disguise = new MiscDisguise(type); | ||||
|                     disguise = new MiscDisguise(type, (Integer) args1, args2); | ||||
|                 DisguiseAPI.disguiseToAll(p, disguise); | ||||
|                 sender.sendMessage(ChatColor.RED + "Now disguised as a " + type.name().toLowerCase() + "!"); | ||||
|             } | ||||
|         } else | ||||
|             sender.sendMessage(ChatColor.RED + "You do not have permission"); | ||||
|             } else | ||||
|                 sender.sendMessage(ChatColor.RED + "You do not have permission to use this disguise."); | ||||
|         } | ||||
|         return true; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -12,6 +12,10 @@ public class MiscDisguise extends Disguise { | ||||
|  | ||||
|     public MiscDisguise(DisguiseType disguiseType, int id, int data) { | ||||
|         super(disguiseType); | ||||
|         if (id == -1) | ||||
|             id = disguiseType.getDefaultId(); | ||||
|         if (data == -1) | ||||
|             data = disguiseType.getDefaultData(); | ||||
|         this.id = id; | ||||
|         this.data = data; | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user