public static List<CommandProtectionEntry> protectCommands(final String permissionBase, final Collection<String> ignoredCommands, final boolean invertIgnored, final boolean ops, final String permissionMessage) {
    final Set<String> checked = new HashSet<String>();
    for (String label : ignoredCommands) {
      checked.add(CommandUtil.getCommandLabel(label, false));
    }
    final PluginManager pm = Bukkit.getPluginManager();
    Permission rootPerm = pm.getPermission(permissionBase);
    if (rootPerm == null) {
      rootPerm = new Permission(permissionBase);
      pm.addPermission(rootPerm);
    }
    final List<CommandProtectionEntry> changed = new LinkedList<CommandProtectionEntry>();
    // Apply protection based on white-list or black-list.
    for (final Command command : CommandUtil.getCommands()) {
      final String lcLabel = command.getLabel().trim().toLowerCase();
      if (checked.contains(lcLabel) || containsAnyAliases(checked, command)) {
        if (!invertIgnored) {
          continue;
        }
      }
      else if (invertIgnored) {
        continue;
      }
      // Set the permission for the command.
      String cmdPermName = command.getPermission();
      boolean cmdHadPerm;
      if (cmdPermName == null) {
        // Set a permission.
        cmdPermName = permissionBase + "." + lcLabel;
        command.setPermission(cmdPermName);
        cmdHadPerm = false;
      }
      else{
        cmdHadPerm = true;
      }
      // Set permission default behavior.
      Permission cmdPerm = pm.getPermission(cmdPermName);
      if (cmdPerm == null) {
        if (!cmdHadPerm) {
          cmdPerm = new Permission(cmdPermName);
          cmdPerm.addParent(rootPerm, true);
          pm.addPermission(cmdPerm);
        }
      }
      // Create change history entry.
      if (cmdHadPerm) {
          if (cmdPerm == null) {