package com.iBaby; import java.util.ArrayList; import java.util.HashMap; import java.util.Map.Entry; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.iBaby.commands.Param; import com.iBaby.commands.ParamMap; /** * A raw command * @author steffengy * */ public class Command { protected HashMap<String, String> arguments = new HashMap<String, String>(); private ParamMap<Integer, Param> Params = new ParamMap<Integer, Param>(); protected ArrayList<String> permissions = new ArrayList<String>(); protected boolean requiresPlayer = true; private int i = 0; private Base base; /** * Handle a command * @param args The arguments 2 give to the command */ public void handle(CommandSender sender) {} /** * Called before the command gets actually handeled * @param sender The CommandSender (excecutor) * @param args His params * @return */ public boolean preHandle(CommandSender sender, String[] args) { if(requiresPlayer) { if(!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "You need to be a player to execute tthis command!"); return false; } } if(permissions.size() > 0) { boolean hasPerm = false; for(String perm : permissions) { if(sender.hasPermission(perm)) { hasPerm = true; break; } } if(!hasPerm) { sender.sendMessage(ChatColor.RED + "You don't have permission to do this!"); return false; } } if(args.length < Params.countNeeded() || (Params.size()) < args.length ) { sender.sendMessage(ChatColor.RED + "Your arguments are invalid!"); return false; } // Match params int arg = 0; int c = 0; for(int i = 0; arg < args.length; i++) { if(Params.containsKey(i) && Params.get(i).isNeeded()) { //Its a needed one so just add it arguments.put(Params.get(i).getName(), args[arg]); arg++; }else{ if(Params.containsKey(i) && args.length >= (Params.countNeeded() + 1 + c)) { arguments.put(Params.get(i).getName(), args[arg]); c++; arg++; } } } return true; } /** * Adds a needed param * @param name The name, with which this entry shall got later */ public void addParam(String name) { Params.put(i, new Param(name, true)); i++; } /** * Adds a optional param * @param name The name, with which this entry shall got later */ public void addOptionalParam(String name) { Params.put(i, new Param(name, false)); i++; } /** * Lazy method for getting params * @param name The name of the param * @return value of param as String */ public String param(String name) { if(arguments.containsKey(name)) return arguments.get(name); return ""; } /** * Set what root command was used to call this * @param root The root command */ public void setRoot(Base root) { this.base = root; } /** * Gets what root command was used to call this * @param root The root command */ public Base getRoot() { return base; } /** * Returns the description of the Command * @return String */ public String getDescription() { return ""; } @SuppressWarnings("unchecked") public HashMap<String, String> getArgumentMap() { return (HashMap<String, String>) arguments.clone(); } /** * Gets a list of all params * @return List<Param> */ public ArrayList<Param> getParamList() { ArrayList<Param> ret = new ArrayList<Param>(); for(Entry<Integer, Param> a : Params.entrySet()) { ret.add(a.getValue()); } return ret; } }