Skip to main content
The Island Permissions API allows you to manage who can perform specific actions on an island. Permissions can be set for player roles or individual players.

Permission System Overview

SuperiorSkyblock2 uses a permission system based on:
  • IslandPrivilege - Specific permissions like breaking blocks, opening chests, etc.
  • PlayerRole - Roles like Owner, Admin, Member, etc.
  • PermissionNode - Individual player permission overrides

Checking Permissions

hasPermission(CommandSender sender, IslandPrivilege islandPrivilege)

Check if a CommandSender has a specific permission.
sender
CommandSender
required
The command sender to check
islandPrivilege
IslandPrivilege
required
The permission to check
returns
boolean
True if the sender has the permission
import com.bgsoftware.superiorskyblock.api.island.Island;
import com.bgsoftware.superiorskyblock.api.island.IslandPrivilege;
import org.bukkit.entity.Player;

public boolean canBreakBlocks(Island island, Player player) {
    return island.hasPermission(player, IslandPrivilege.getByName("BREAK"));
}

hasPermission(SuperiorPlayer superiorPlayer, IslandPrivilege islandPrivilege)

Check if a SuperiorPlayer has a specific permission.
superiorPlayer
SuperiorPlayer
required
The player to check
islandPrivilege
IslandPrivilege
required
The permission to check
returns
boolean
True if the player has the permission
import com.bgsoftware.superiorskyblock.api.wrappers.SuperiorPlayer;

boolean canUseWarps = island.hasPermission(
    superiorPlayer,
    IslandPrivilege.getByName("WARP")
);

hasPermission(PlayerRole playerRole, IslandPrivilege islandPrivilege)

Check if a specific role has a permission.
playerRole
PlayerRole
required
The role to check
islandPrivilege
IslandPrivilege
required
The permission to check
returns
boolean
True if the role has the permission
import com.bgsoftware.superiorskyblock.api.island.PlayerRole;

PlayerRole memberRole = PlayerRole.getByName("Member");
boolean memberCanPlace = island.hasPermission(
    memberRole,
    IslandPrivilege.getByName("PLACE")
);

Setting Role Permissions

setPermission(PlayerRole playerRole, IslandPrivilege islandPrivilege)

Set a permission for a specific role.
playerRole
PlayerRole
required
The role to set the permission for
islandPrivilege
IslandPrivilege
required
The permission to grant
// Grant BREAK permission to Member role
island.setPermission(
    PlayerRole.getByName("Member"),
    IslandPrivilege.getByName("BREAK")
);

resetPermissions()

Reset all role permissions to default values.
// Reset all permissions to default
island.resetPermissions();

getRequiredPlayerRole(IslandPrivilege islandPrivilege)

Get the minimum role required for a specific permission.
islandPrivilege
IslandPrivilege
required
The permission to check
returns
PlayerRole
The minimum required role
PlayerRole requiredRole = island.getRequiredPlayerRole(
    IslandPrivilege.getByName("INVITE_MEMBER")
);

getRolePermissions()

Get all permissions and their required roles.
returns
Map<IslandPrivilege, PlayerRole>
Map of permissions to required roles
Map<IslandPrivilege, PlayerRole> rolePerms = island.getRolePermissions();
for (Map.Entry<IslandPrivilege, PlayerRole> entry : rolePerms.entrySet()) {
    System.out.println(entry.getKey().getName() + " requires " + entry.getValue().getName());
}

Setting Player Permissions

setPermission(SuperiorPlayer superiorPlayer, IslandPrivilege islandPrivilege, boolean value)

Set a permission override for a specific player.
superiorPlayer
SuperiorPlayer
required
The player to set the permission for
islandPrivilege
IslandPrivilege
required
The permission to set
value
boolean
required
True to grant, false to deny
// Grant a specific player BREAK permission regardless of role
island.setPermission(
    superiorPlayer,
    IslandPrivilege.getByName("BREAK"),
    true
);

// Deny a specific player PLACE permission
island.setPermission(
    superiorPlayer,
    IslandPrivilege.getByName("PLACE"),
    false
);

resetPermissions(SuperiorPlayer superiorPlayer)

Reset a player’s permission overrides to default (role-based) values.
superiorPlayer
SuperiorPlayer
required
The player whose permissions to reset
// Remove all custom permissions for this player
island.resetPermissions(superiorPlayer);

getPermissionNode(SuperiorPlayer superiorPlayer)

Get the permission node for a player, containing all their custom permissions.
superiorPlayer
SuperiorPlayer
required
The player to get permissions for
returns
PermissionNode
The player’s permission node
import com.bgsoftware.superiorskyblock.api.island.PermissionNode;

PermissionNode node = island.getPermissionNode(superiorPlayer);
Map<IslandPrivilege, Boolean> customPerms = node.getCustomPermissions();

getPlayerPermissions()

Get all custom player permissions for the island.
returns
Map<SuperiorPlayer, PermissionNode>
Map of players to their permission nodes
Map<SuperiorPlayer, PermissionNode> playerPerms = island.getPlayerPermissions();
for (Map.Entry<SuperiorPlayer, PermissionNode> entry : playerPerms.entrySet()) {
    SuperiorPlayer player = entry.getKey();
    PermissionNode node = entry.getValue();
    // Process custom permissions
}

IslandPrivilege

Getting Island Privileges

import com.bgsoftware.superiorskyblock.api.island.IslandPrivilege;
import java.util.Collection;

// Get all available privileges
Collection<IslandPrivilege> allPrivileges = IslandPrivilege.values();

// Get a specific privilege by name
IslandPrivilege breakPrivilege = IslandPrivilege.getByName("BREAK");
IslandPrivilege placePrivilege = IslandPrivilege.getByName("PLACE");
IslandPrivilege openChestPrivilege = IslandPrivilege.getByName("CHEST_ACCESS");

Privilege Types

// Check the type of privilege
IslandPrivilege privilege = IslandPrivilege.getByName("BREAK");
IslandPrivilege.Type type = privilege.getType();

if (type == IslandPrivilege.Type.ACTION) {
    // Can be given to visitors, coops, non-members
} else if (type == IslandPrivilege.Type.COMMAND) {
    // Only for island team members
}

Registering Custom Privileges

// Register a custom ACTION privilege
IslandPrivilege.register("MY_CUSTOM_PRIVILEGE");

// Register a custom COMMAND privilege
IslandPrivilege.register("MY_CUSTOM_COMMAND", IslandPrivilege.Type.COMMAND);

PermissionNode

The PermissionNode interface represents a player’s permission overrides.

hasPermission(IslandPrivilege islandPrivilege)

Check if the node has a specific permission.
islandPrivilege
IslandPrivilege
required
The privilege to check
returns
boolean
True if the permission is granted

setPermission(IslandPrivilege islandPrivilege, boolean value)

Set a permission in the node.
islandPrivilege
IslandPrivilege
required
The privilege to set
value
boolean
required
True to grant, false to deny

getCustomPermissions()

Get all custom permissions (not default/role-based).
returns
Map<IslandPrivilege, Boolean>
Map of custom permission overrides

Example: Permission Management System

import com.bgsoftware.superiorskyblock.api.island.Island;
import com.bgsoftware.superiorskyblock.api.island.IslandPrivilege;
import com.bgsoftware.superiorskyblock.api.island.PlayerRole;
import com.bgsoftware.superiorskyblock.api.wrappers.SuperiorPlayer;
import org.bukkit.entity.Player;

public class PermissionManager {
    
    public void setupDefaultPermissions(Island island) {
        // Allow Members to break and place blocks
        PlayerRole member = PlayerRole.getByName("Member");
        island.setPermission(member, IslandPrivilege.getByName("BREAK"));
        island.setPermission(member, IslandPrivilege.getByName("PLACE"));
    }
    
    public void grantPlayerPermission(Island island, SuperiorPlayer player, String permissionName) {
        IslandPrivilege privilege = IslandPrivilege.getByName(permissionName);
        island.setPermission(player, privilege, true);
    }
    
    public void revokePlayerPermission(Island island, SuperiorPlayer player, String permissionName) {
        IslandPrivilege privilege = IslandPrivilege.getByName(permissionName);
        island.setPermission(player, privilege, false);
    }
    
    public boolean checkPermission(Island island, Player bukkitPlayer, String permissionName) {
        IslandPrivilege privilege = IslandPrivilege.getByName(permissionName);
        return island.hasPermission(bukkitPlayer, privilege);
    }
    
    public void resetAllPlayerPermissions(Island island, SuperiorPlayer player) {
        island.resetPermissions(player);
    }
}

Common Island Privileges

Here are some commonly used island privileges:
  • BREAK - Break blocks
  • PLACE - Place blocks
  • CHEST_ACCESS - Open chests
  • INTERACT - Interact with blocks
  • KILL_MOBS - Kill mobs
  • USE - Use items
  • WARP - Use warps
  • INVITE_MEMBER - Invite players
  • KICK_MEMBER - Kick members
  • BAN_MEMBER - Ban players
  • SET_HOME - Set island home
  • WITHDRAW_MONEY - Withdraw from bank
  • DEPOSIT_MONEY - Deposit to bank