package me.desht.scrollingmenusign.enums;
import me.desht.dhutils.Debugger;
import me.desht.dhutils.PermissionUtils;
import me.desht.scrollingmenusign.ScrollingMenuSign;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import java.util.UUID;
public enum SMSAccessRights {
OWNER, GROUP, OWNER_GROUP, ANY;
/**
* Check if the given player is allowed to use an access-controlled object owned by the given owner.
*
* @param player the player to check for
* @param ownerId the UUID of the object's owner
* @param ownerName the name of the object's owner
* @return true if the player may use it, false otherwise
*/
public boolean isAllowedToUse(Player player, UUID ownerId, String ownerName, String group) {
if (this == ANY || player.getUniqueId().equals(ownerId) || PermissionUtils.isAllowedTo(player, "scrollingmenusign.access.any")) {
return true;
}
boolean inGroup;
switch (this) {
case OWNER_GROUP:
String primaryGroup = ScrollingMenuSign.getInstance().isVaultLegacyMode() ?
ScrollingMenuSign.permission.getPrimaryGroup(player.getWorld(), ownerName) :
ScrollingMenuSign.permission.getPrimaryGroup(player.getWorld().getName(), Bukkit.getOfflinePlayer(ownerId));
inGroup = checkGroupMembership(player, primaryGroup);
Debugger.getInstance().debug("OWNER_GROUP access check: owner = [" + ownerName + "], primary group = [" + primaryGroup + "], player ["
+ player.getDisplayName() + "] in group: " + inGroup);
return inGroup;
case GROUP:
inGroup = checkGroupMembership(player, group);
Debugger.getInstance().debug("GROUP access check: group = [" + group + "], player [" + player.getDisplayName() + "] in group: " + inGroup);
return inGroup;
default:
return false;
}
}
private boolean checkGroupMembership(Player player, String group) {
if (group == null || group.isEmpty() || ScrollingMenuSign.permission == null) {
return false;
} else if (ScrollingMenuSign.getInstance().isVaultLegacyMode()) {
return ScrollingMenuSign.permission.playerInGroup(player.getWorld(), player.getName(), group);
} else {
return ScrollingMenuSign.permission.playerInGroup(player.getWorld().getName(), player, group);
}
}
}