@Override
	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
		// I don't believe that the current command API would allow anything else, but I might as well check for it.
		if (!command.getName().equalsIgnoreCase("ihd")) {
			// Do nothing, but don't show command help either.
			return true;
		}

		// All commands are usable from console and by players (assuming proper permissions).

		if (args.length == 0) {
			// Show main command help.
			return false;
		}

		String primaryArg = args[0].toLowerCase();
		if (primaryArg.equals("help")) {
			return processHelpCommand(sender, args);
		} else if (primaryArg.equals("list")) {
			if (sender.hasPermission("ihd.list")) {
				return processListCommand(sender, args);
			} else {
				displayNoPermissionsMessage(sender);
			}
		} else if (primaryArg.equals("view")) {
			if (sender.hasPermission("ihd.view")) {
				return processViewCommand(sender, args);
			} else {
				displayNoPermissionsMessage(sender);
			}
		} else if (primaryArg.equals("publish")) {
			if (sender.hasPermission("ihd.publish")) {
				return processPublishCommand(sender, args);
			} else {
				displayNoPermissionsMessage(sender);
			}
		}

		// Improper initial argument was supplied so display the main command help.
		return false;
	}