/**
   * TODO: This method requires better explanation.
   *
   * <p>Set the normal group of a player.
   *
   * @param player The player.
   * @param group The normal group.
   * @return True on success, false on failure.
   */
  public boolean addNormal(Player player, String group) {
    // Check whether the permissions check is enabled
    if (!settings.getProperty(PluginSettings.ENABLE_PERMISSION_CHECK)) {
      return false;
    }

    // Remove old groups
    permissionsManager.removeGroups(
        player, Arrays.asList(unregisteredGroup, registeredGroup, unloggedInGroup));

    // Add the normal group, return the result
    return permissionsManager.addGroup(player, group);
  }
  /**
   * Set the group of a player, by its AuthMe group type.
   *
   * @param player The player.
   * @param group The group type.
   * @return True if succeeded, false otherwise. False is also returned if groups aren't supported
   *     with the current permissions system.
   */
  public boolean setGroup(Player player, AuthGroupType group) {
    // Check whether the permissions check is enabled
    if (!settings.getProperty(PluginSettings.ENABLE_PERMISSION_CHECK)) {
      return false;
    }

    // Make sure group support is available
    if (!permissionsManager.hasGroupSupport()) {
      ConsoleLogger.warning(
          "The current permissions system doesn't have group support, unable to set group!");
      return false;
    }

    switch (group) {
      case UNREGISTERED:
        // Remove the other group type groups, set the current group
        permissionsManager.removeGroups(player, Arrays.asList(registeredGroup, unloggedInGroup));
        return permissionsManager.addGroup(player, unregisteredGroup);

      case REGISTERED:
        // Remove the other group type groups, set the current group
        permissionsManager.removeGroups(player, Arrays.asList(unregisteredGroup, unloggedInGroup));
        return permissionsManager.addGroup(player, registeredGroup);

      case NOT_LOGGED_IN:
        // Remove the other group type groups, set the current group
        permissionsManager.removeGroups(player, Arrays.asList(unregisteredGroup, registeredGroup));
        return permissionsManager.addGroup(player, unloggedInGroup);

      case LOGGED_IN:
        // Get the player data
        LimboPlayer data = limboCache.getPlayerData(player.getName().toLowerCase());
        if (data == null) {
          return false;
        }

        // Get the players group
        String realGroup = data.getGroup();

        // Remove the other group types groups, set the real group
        permissionsManager.removeGroups(
            player, Arrays.asList(unregisteredGroup, registeredGroup, unloggedInGroup));
        return permissionsManager.addGroup(player, realGroup);
      default:
        return false;
    }
  }