public boolean dispatch(CommandSender sender, org.bukkit.command.Command cmd, String[] args) {
		boolean result = false;

		if (!this.isRegistered(cmd.getName())) {
			log("dispatched non-registered command: " + cmd.getName());
			return false;
		}

		Method method = this.aliases.get(cmd.getName());
		Object instance = this.commands.get(method);
		Command command = method.getAnnotation(Command.class);

		Object[] methodArgs = {sender, args};

		if (command.player() && !(sender instanceof Player)) {
			sender.sendMessage("Only a player can use this command");
			return true;
		}

		if (!sender.hasPermission(command.permission())) {
			sender.sendMessage("\u00A7cI'm sorry, you don't have permission to use this command.");
			return true;
		}

		try {
			method.invoke(instance, methodArgs);
			result = true;
		} catch (IllegalAccessException e) {
			error("Exception invoking method.");
			e.printStackTrace();
		} catch (InvocationTargetException ex) {
			if (ex.getCause() instanceof CommandArgumentException) {
				sender.sendMessage("\u00A7c" + ex.getCause().getMessage());
			}
			if (ex.getCause() instanceof CommandException) {
				error("General CommandException: " + ex.getCause().getMessage());
				sender.sendMessage("\u00A7cError resolving command quantum physics equations");
			}
		}
		return result;
	}