Permissions
The Season Pass uses a minimal permission model. Player commands have no permission requirements, while all admin functionality is gated behind a single permission node.
Permission Nodes
| Permission | Default | Description |
|---|---|---|
seasonpass.admin | OP only | Grants access to all admin commands and the admin panel |
Player Commands
All player commands are available to every player without any permission check. The canGeneratePermission() method returns false for the entire player command collection.
| Command | Permission Required |
|---|---|
/sp open | None |
/sp info | None |
/sp buy | None |
Admin Commands
Every admin subcommand requires seasonpass.admin. The permission is checked via player.hasPermission("seasonpass.admin") at the start of each command handler. Console senders bypass the permission check.
| Command | Permission |
|---|---|
/spadmin panel | seasonpass.admin |
/spadmin start <seasonId> | seasonpass.admin |
/spadmin end | seasonpass.admin |
/spadmin pause | seasonpass.admin |
/spadmin resume | seasonpass.admin |
/spadmin reload | seasonpass.admin |
/spadmin info | seasonpass.admin |
/spadmin grantxp <player> <amount> | seasonpass.admin |
/spadmin setxp <player> <amount> | seasonpass.admin |
/spadmin granttokens <player> <amount> | seasonpass.admin |
/spadmin grantpremium <player> | seasonpass.admin |
/spadmin revokepremium <player> | seasonpass.admin |
/spadmin settier <player> <tier> | seasonpass.admin |
/spadmin resetplayer <player> | seasonpass.admin |
/spadmin grantbooster <player> <multiplier> <minutes> | seasonpass.admin |
/spadmin doublexp <minutes> [multiplier] | seasonpass.admin |
/spadmin stopdoublexp | seasonpass.admin |
/spadmin setprestige <player> <level> | seasonpass.admin |
Admin Panel
The admin panel (/spadmin panel) performs its own permission check independently from the subcommand system. It calls player.hasPermission("seasonpass.admin") directly before opening the page. All actions within the admin panel UI (saving settings, managing players, editing content) inherit this same permission gate.
Showcase Compatibility
In addition to the seasonpass.admin permission, admin commands and the admin panel also check for Showcase mode via ShowcaseCompat.isShowcaseBlocked(playerRef). When running on a showcase/demo server, write operations (starting/ending seasons, modifying player data, saving config changes) are blocked even for admin users. This prevents accidental modifications on display servers.
The Showcase check applies to the following actions:
- All season lifecycle commands (
start,end,pause,resume) - All player management commands (
grantxp,setxp,granttokens,grantpremium,revokepremium,settier,resetplayer,grantbooster,setprestige) - Global event commands (
doublexp,stopdoublexp) - Config reload (
reload) - All save operations in the admin panel
Console Access
All admin commands can be executed from the server console without any permission check. The checkAdmin() method returns true immediately when ctx.isPlayer() is false.
The Season Pass intentionally uses a single admin permission node rather than granular per-command permissions. This simplifies server administration -- grant seasonpass.admin to trusted staff and they have full control over the season pass system.