Skip to content

Permissions

The plugin code passes default = true to every player-side permission check. LuckPerms ignores that default and answers false to any unset permission. So in practice, every permission must be granted explicitly.

A LuckPerms wildcard like * or ks.shop.* would normally make every hasPermission check return true. To stop OPs from silently inheriting privileged listing/limit perks, the plugin uses a wildcard sentinel probe:

// A node no real perm setup would ever grant. If the backend says "yes",
// we know the player has a wildcard. We then treat the perk as "not granted"
// and fall back to the global config default.
private static final String WILDCARD_SENTINEL =
"ks.shop.__wildcard_probe.sentinel_check_zzz";

This sentinel guards:

  • ks.shop.list.permanent
  • ks.shop.list.free
  • ks.shop.limit.shops.N
  • ks.shop.limit.items.N
  • ks.rental.limit.N

To grant any of these to an OP intentionally, deny the matching wildcard first:

lp user <admin> permission set ks.shop.* false
lp user <admin> permission set ks.shop.list.permanent true

ks.shop.admin is not wildcard-guarded - admins should keep their admin rights via *.


NodeGrantsDefault
ks.shop.user.create/ksshop createunset
ks.shop.user.edit/ksshop edit, open, close, rename, delete, deposit, transferunset
ks.shop.user.browse/ksshop browse, search, visitunset
ks.shop.user.rate/ksshop rateunset
ks.shop.user.collect/ksshop collectunset
ks.shop.user.delete/ksshop delete (own shop)unset
ks.rental.rentRent fixed-price slotsunset
ks.rental.bidBid in auctionsunset
NodeEffectDefault
ks.shop.limit.shops.NMax N owned shops (overrides playerShops.maxShopsPerPlayer)global default
ks.shop.limit.items.NMax N items per shop (overrides playerShops.maxItemsPerShop)global default
ks.rental.limit.NMax N concurrent rentals (overrides rentalStations.maxConcurrentRentalsDefault)global default

Highest matched N wins. Scan range: 1..200. Wildcard match falls back to the global config default.

NodeEffect
ks.shop.list.permanentShop is forever-listed without paying
ks.shop.list.freePay 0g for any listing duration (still day-clamped)

Both wildcard-guarded. To grant on an OP, deny ks.shop.* first.

NodeGrants
ks.shop.adminAll /kssa * commands - admin shops, rental admin, force-expire, etc.

lp group default permission set ks.shop.user.create true
lp group default permission set ks.shop.user.edit true
lp group default permission set ks.shop.user.browse true
lp group default permission set ks.shop.user.collect true
lp group default permission set ks.shop.user.rate true
lp group default permission set ks.shop.user.delete true
lp group default permission set ks.rental.rent true
lp group default permission set ks.rental.bid true

VIP rank (3 -> 5 shops, 50 items each, 3 parallel rentals)

Section titled “VIP rank (3 -> 5 shops, 50 items each, 3 parallel rentals)”
lp group vip permission set ks.shop.limit.shops.5 true
lp group vip permission set ks.shop.limit.items.50 true
lp group vip permission set ks.rental.limit.3 true

Premium rank (10 shops, 100 items, free permanent listing)

Section titled “Premium rank (10 shops, 100 items, free permanent listing)”
lp group premium permission set ks.shop.limit.shops.10 true
lp group premium permission set ks.shop.limit.items.100 true
lp group premium permission set ks.shop.list.permanent true
lp user StaffName permission set ks.shop.admin true

These setups produce nonsensically generous results. Avoid:

SetupProblem
ks.shop.* on default groupMatches ks.shop.limit.shops.200 too -> 200 shops per player effectively
ks.rental.* on default groupMatches ks.rental.limit.200 too -> unlimited rentals
* on a non-staff rankSame as above plus permanent free listings

The wildcard sentinel guards against the worst of these (limits + permanent listing) but does not retroactively undo a wildcard grant of all the user-action perms. Use specific grants only.