public boolean onCommand(CommandSender sender, Command cmd,	String commandLabel, String[] args) {
		this.sender = sender;
		player = (sender instanceof Player) ? (Player) sender : null;
		
		if (player == null) {
			error("/gate cannot be used from the console");
			return true;
		}
		
		if (!isPermitted("gate", (args.length > 0 ? permNodes.get(args[0]) : null))) {
			error("You don't have permission to use this command");
			return true;
		}
		
		if (args.length == 0) {
			printUsage();
			return true;
		}
		
		if (subcommands.get(args[0].toLowerCase()) == null) {
			printUsage();
			error("Unkown gate command: " + args[0].toLowerCase());
		} else {
			List<String> largs = Arrays.asList(args);
			largs = largs.subList(1, largs.size());
			String gateName = (largs.size() > 0 ? largs.get(0) : null);
			
			subcommands.get(args[0].toLowerCase()).execute(sender, gateName, (largs.size() > 1 ? largs.subList(1, largs.size()) : new ArrayList<String>()));
		}
		
		return true;
	}