@Override
	public boolean onCommand(CommandSender sender, Command command, String commandLabel, String[] split) throws NullPointerException, ArrayIndexOutOfBoundsException {
		// get basic info needed
		Player player;
		Boolean isPlayer;
		if (sender instanceof Player) {// If it's a player, we respond differently than if it's the console.
			player = (Player) sender;// Cast it when we can
			isPlayer = true;
		} else {
			player = null;
			isPlayer = false;
		}
		// No arguments supplied to command, lets help them out a bit
		if (split.length == 0) {
			if (isPlayer) {
				sendHelp(player);
			} else { // not a player (console)
				sendHelp(sender);
			}// command handled
			return true;
		}// length was at least 1.

		// Lets see what they want to do...
		String cmd = TimeShift.command_aliases.get(split[0].toLowerCase());
		if (cmd == null) {// no command found!
			if (isPlayer) {
				sendHelp(player);
			} else {
				sendHelp(sender);
			}
			return true;
		}

		if (cmd == "TS STARTUP") {// Startup Command
			setPersist(player, sender, isPlayer, split);
		} else if (cmd == "TS STOP") {// is it a stop command?
			stopShift(player, sender, isPlayer, split);
		} else if (cmd == "TS ERR") {// We got as far as trying to read it... just couldn't quite do it.
			sender.sendMessage("There was an error parsing the command '" + split[0] + "' but someone tried to define it. The server's server.log file will have more information at startup.");
		} else {// Not a stop command, therefore it's a loop command
			startShift(player, sender, isPlayer, split);
		}
		// escaped the if! All success and error cases handled.
		return true;
	}// end of onCommand