Skip to content

Commit

Permalink
limit region owners and members by new semi generic perm:
Browse files Browse the repository at this point in the history
protectionstones.members-amount.<integer>
protectionstones.owners-amount.<integer>

perm is necessary to add any member/owner #1
  • Loading branch information
Galajus committed Jun 18, 2024
1 parent 03a3e85 commit 05715e1
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 3 deletions.
2 changes: 2 additions & 0 deletions src/main/java/dev/espi/protectionstones/PSL.java
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,8 @@ public enum PSL {
REMOVED_FROM_REGION("psregion.removed_from_region", ChatColor.AQUA + "%player%" + ChatColor.GRAY + " has been removed from region."),
REMOVED_FROM_REGION_SPECIFIC("psregion.removed_from_region_specific", ChatColor.AQUA + "%player%" + ChatColor.GRAY + " has been removed from region %region%."),
NOT_IN_REGION("psregion.not_in_region", ChatColor.RED + "You are not in a protection stones region!"),
MEMBERS_LIMIT("psregion.members_limit_reached", ChatColor.RED + "Members limit reached (%limit%) for region: %region%"),
OWNERS_LIMIT("psregion.owners_limit_reached", ChatColor.RED + "Owners limit reached (%limit%) for region: %region%"),
PLAYER_NOT_FOUND("psregion.player_not_found", ChatColor.RED + "Player not found."),
NOT_PS_REGION("psregion.not_ps_region", ChatColor.RED + "Not a protection stones region."),
REGION_DOES_NOT_EXIST("psregion.region_does_not_exist", ChatColor.RED + "Region does not exist."),
Expand Down
26 changes: 23 additions & 3 deletions src/main/java/dev/espi/protectionstones/commands/ArgAddRemove.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,14 @@
import dev.espi.protectionstones.PSRegion;
import dev.espi.protectionstones.ProtectionStones;
import dev.espi.protectionstones.utils.LimitUtil;
import dev.espi.protectionstones.utils.PermUtil;
import dev.espi.protectionstones.utils.UUIDCache;
import dev.espi.protectionstones.utils.WGUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionAttachmentInfo;
import org.bukkit.util.StringUtil;

import java.util.ArrayList;
Expand All @@ -35,6 +38,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;
import java.util.stream.Stream;
Expand Down Expand Up @@ -115,7 +119,6 @@ public boolean executeArgument(CommandSender s, String[] args, HashMap<String, S
PSL.msg(p, PSL.CANNOT_REMOVE_YOURSELF_LAST_OWNER.msg());
return;
}

regions = Collections.singletonList(r);
}

Expand All @@ -129,11 +132,28 @@ public boolean executeArgument(CommandSender s, String[] args, HashMap<String, S
// apply operation to regions
for (PSRegion r : regions) {

String regionName = r.getName() == null ? r.getId() : r.getName() + " (" + r.getId() + ")";
if (operationType.equals("add") || operationType.equals("addowner")) {
int membersLimit = PermUtil.getLimitOwnersFromPermission(p, "protectionstones.members-amount.");
int ownersLimit = PermUtil.getLimitOwnersFromPermission(p, "protectionstones.owners-amount.");
p.sendMessage("MEMBER LIMIT: " + membersLimit + " | OWNER LIMIT: " + ownersLimit + " | REGION MEMBERS: " + r.getMembers().size());
if (operationType.equals("add") && r.getMembers().size() >= membersLimit) {
PSL.msg(p, PSL.MEMBERS_LIMIT.msg()
.replace("%limit%", String.valueOf(membersLimit))
.replace("%region%", regionName));
continue;
}
if (operationType.equals("addowner") && r.getOwners().size() >= ownersLimit) {
PSL.msg(p, PSL.OWNERS_LIMIT.msg()
.replace("%limit%", String.valueOf(membersLimit))
.replace("%region%", regionName));
continue;
}

if (flags.containsKey("-a")) {
PSL.msg(p, PSL.ADDED_TO_REGION_SPECIFIC.msg()
.replace("%player%", addPlayerName)
.replace("%region%", r.getName() == null ? r.getId() : r.getName() + " (" + r.getId() + ")"));
.replace("%region%", regionName));
} else {

PSL.msg(p, PSL.ADDED_TO_REGION.msg().replace("%player%", addPlayerName));
Expand All @@ -148,7 +168,7 @@ public boolean executeArgument(CommandSender s, String[] args, HashMap<String, S
if (flags.containsKey("-a")) {
PSL.msg(p, PSL.REMOVED_FROM_REGION_SPECIFIC.msg()
.replace("%player%", addPlayerName)
.replace("%region%", r.getName() == null ? r.getId() : r.getName() + " (" + r.getId() + ")"));
.replace("%region%", regionName));
} else {
PSL.msg(p, PSL.REMOVED_FROM_REGION.msg().replace("%player%", addPlayerName));
}
Expand Down
34 changes: 34 additions & 0 deletions src/main/java/dev/espi/protectionstones/utils/PermUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package dev.espi.protectionstones.utils;

import org.apache.commons.lang3.math.NumberUtils;
import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionAttachmentInfo;

import java.util.Optional;

public class PermUtil {

/**
* Getting number variable on end of perm
* @param player Bukkit player
* @param searchingPerm permission without number variable on end like "protectionstones.owners-amount."
* @return perm int variable
*/
public static int getLimitOwnersFromPermission(Player player, String searchingPerm) {
Optional<PermissionAttachmentInfo> perm = player.getEffectivePermissions().stream()
.filter(p -> p.getPermission().startsWith(searchingPerm)).findFirst();
if (perm.isEmpty()) {
return 0;
}
String[] split = perm.get().getPermission().split("\\.");
if (split.length < 3) {
return 0;
}
String limitString = split[2];

if (NumberUtils.isCreatable(limitString)) {
return Integer.parseInt(limitString);
}
return 0;
}
}

0 comments on commit 05715e1

Please sign in to comment.