Permissions
Every permission node with its default, the marker style nodes, tiered limit nodes, and a LuckPerms rank template.
Cairn reads permission nodes directly, so any permissions plugin that grants nodes works. LuckPerms is used here only because its rank template is written out below. The commands each node unlocks are in Commands.
Player permissions
| Node | Grants | Default |
|---|---|---|
cairn.use | Have graves created on death and loot your own graves. | true |
cairn.command.list | /cairn list: list your own graves. | true |
cairn.command.tp | /cairn tp <id>: teleport to your own grave. | false |
cairn.fee.exempt | Exempt from the Vault retrieval fee, regardless of tier.fee-waiver. | false |
cairn.loot.other | Loot another player's grave once its protection window has expired. | true |
cairn.loot.other.bypass | Loot another player's grave at any time, including during its protection window. | op |
cairn.command.style | /cairn style: see and choose your own grave marker style. | true |
Admin permissions
| Node | Grants | Default |
|---|---|---|
cairn.admin.list | /cairn list <player> to list another player's graves, and /cairn held for everything still in custody. | op |
cairn.admin.tp | Teleport to any player's grave, including during protection. | op |
cairn.admin.restore | /cairn restore to rebuild a grave from the audit log, and /cairn archive to put one away again. | op |
cairn.admin.audit | /cairn history and /cairn verify: read the custody log and run consistency checks. | op |
cairn.admin.reload | /cairn reload: reload configuration without a restart. | op |
cairn.admin | Everything above at once, plus cairn.loot.other.bypass. | op |
cairn.admin does not include the cairn.style.* nodes. They are already op by default, and keeping them out of the staff bundle means an operator can still test what a customer without the rank sees.
There is no cairn.admin.purge and no purge command. Cairn never deletes audit history, because the restore guarantee depends on that history surviving.
Marker style permissions
There is one node per marker style, and all of them default to op. Nobody holds one until you grant it, and an operator holds all of them. There are six styles.
| Node | Marker |
|---|---|
cairn.style.player-head | A head on the ground wearing your face. |
cairn.style.armour-stand | A posed corpse wearing that same face. |
cairn.style.block-display | A floating, un-pickable head. |
cairn.style.hologram-only | No body at all, just the floating name and countdown. |
cairn.style.headstone | A small stone monument built from ordinary blocks. |
cairn.style.corpse | A life-size body lying where you died, wearing your skin. Needs Paper 26.2 or newer. On an older server it still grants and selects, but renders as armour-stand. |
A player picks one with /cairn style <style> and clears it with /cairn style default. /cairn style on its own lists what they have and what they may pick. Player choice is switched off server-wide with marker.allow-player-choice: false in config.yml.
Revoking one of these never costs a player a grave. If they had chosen a style and you take the node away, their next grave uses the server's marker.style, and their choice is remembered in case the rank comes back. The full precedence is in Configuration.
To sell a style with a rank:
/lp group vip permission set cairn.style.corpse true
/lp group vip permission set cairn.style.headstone true
Grave protection
Opening a grave means right-clicking its marker in the world, or clicking its entry in /cairn. Both go through the same check, in this order.
- No
cairn.use: refused. That node is the whole grave system, not just the command. Taking it away takes graves away. - You own the grave: always allowed, at any time.
- Somebody else's grave, within
grave.protection-minutesof their death: refused, and the refusal says how many minutes are left. Allowed only withcairn.loot.other.bypass. - Somebody else's grave, after that: allowed with
cairn.loot.other, refused without it.
cairn.loot.other.bypass is stronger than cairn.loot.other: it satisfies step 4 as well as step 3. Bukkit does not make one node a child of another just because the names nest, so Cairn treats the bypass this way on purpose.
- Free-for-all graves: set
grave.protection-minutes: 0. A window of zero removes the timer, not the permission, socairn.loot.otherstill governs who may loot. - Fully private graves: revoke
cairn.loot.otherand leavecairn.loot.other.bypasswith your staff.
Both settings are per-world, because grave.protection-minutes can be overridden per world and a grave carries its own world's rule with it.
Tiered limit permissions
These are not fixed nodes. The number at the end of the node is the value granted. Grant a player the highest number for a tier and that is what they get. Granting a higher number without revoking a lower one still resolves to the higher number, so additive rank inheritance in LuckPerms works.
| Node pattern | What the suffix means | A player with none of them gets |
|---|---|---|
cairn.limit.count.<N> | Maximum concurrent graves. | tier.count.default from config.yml, 1 by default. |
cairn.limit.expiry.<N> | Grave lifetime override, in minutes. | That world's grave.expiry-minutes. |
cairn.limit.xp-retention.<N> | XP retention override, 0 to 100 percent. | That world's grave.xp-retention-percent. |
cairn.limit.teleport.<N> | Presence only, the number is ignored. Makes /cairn tp instant. | tier.teleport.default, true by default. |
cairn.limit.fee-waiver.<N> | Presence only, the number is ignored. Waives the retrieval fee. | tier.fee-waiver.default, false by default. |
None of the cairn.limit.* nodes are granted by default, and being opped does not grant them either. Cairn only counts a tier node when a permission plugin has explicitly set it, granted or denied, for that player.
Cairn finds the number a player holds by scanning from 1 up to a bound and keeping the highest one found. count, teleport and fee-waiver share tier.scan-range, 64 by default. expiry has tier.expiry.scan-range, 10080 by default, a full week. xp-retention has tier.xp-retention.scan-range, 100 by default.
To grant a value above its bound, raise the matching tier.*.scan-range in config.yml first, or the permission will never be found. /cairn reload checks every online player's held permissions against the configured bounds and warns, by node name, about any set too high to be read. See Configuration.
LuckPerms rank template
Four tiers: a free Default that is usable as it is, then VIP, MVP and Elite, each adding a clear improvement. Paste these into your server console or a LuckPerms editor session after creating the groups, and adjust the group names if yours differ.
Default needs no extra commands. The defaults above already give a working baseline: one grave, loot your own graves, no teleport command. The block below is only what changes at each paid tier.
# VIP: unlocks teleporting to your own graves, one extra grave slot, a longer
# grave lifetime (4 days instead of the world default), and better XP retention.
lp group vip permission set cairn.command.tp true
lp group vip permission set cairn.limit.count.3 true
lp group vip permission set cairn.limit.expiry.5760 true
lp group vip permission set cairn.limit.xp-retention.60 true
# MVP: everything VIP has, plus more grave slots, guaranteed-instant teleport
# (protects the perk even if you later set tier.teleport.default to false), a
# waived retrieval fee if you use one, a full five-day expiry window, and most
# of a death's XP kept.
lp group mvp permission set cairn.command.tp true
lp group mvp permission set cairn.limit.count.5 true
lp group mvp permission set cairn.limit.teleport.1 true
lp group mvp permission set cairn.limit.fee-waiver.1 true
lp group mvp permission set cairn.limit.expiry.7200 true
lp group mvp permission set cairn.limit.xp-retention.80 true
# Elite, the top tier: most grave slots, instant teleport, fee waived, priority
# protection bypass so they can still get to their own grave's contents instantly,
# a full week before a grave expires, and full XP retention on death.
lp group elite permission set cairn.command.tp true
lp group elite permission set cairn.limit.count.10 true
lp group elite permission set cairn.limit.teleport.1 true
lp group elite permission set cairn.limit.fee-waiver.1 true
lp group elite permission set cairn.limit.expiry.10080 true
lp group elite permission set cairn.limit.xp-retention.100 true
If your groups inherit from each other in LuckPerms (Elite inherits MVP inherits VIP), you only need to set each new node once, at the tier that introduces it. The commands are written out in full per tier so they also work with flat, non-inheriting groups.
The XP retention numbers (VIP 60, MVP 80, Elite 100) only read as an upgrade if your config.yml sets grave.xp-retention-percent below 60 for the free tier. The shipped default is 100, which already gives everyone full retention. To sell XP retention, lower that world default first.
cairn.limit.expiry.10080 and cairn.limit.xp-retention.100 are exactly the shipped default bounds, so the template works unmodified against an untouched config.yml. For a longer expiry than a week, raise tier.expiry.scan-range first.