Building a donor rank ladder in LuckPerms: inheritance, weights, prefixes, timed ranks from your store and permission checks. So VIPs don't fly in the mines and Legends can open their kit.
Donations sell ranks, and ranks run on permissions. Get the groups wrong, and a month later your VIPs are flying in the mines while the player who bought Legend can't open their kit. Below we build a donor rank ladder in LuckPerms from scratch. The very basic commands are in our article on claims and permissions; this one goes further.
| Group | Weight | Inherits | Adds |
|---|---|---|---|
| default | 0 | nothing | spawn, home, teleport requests |
| vip | 10 | default | own kit, three homes |
| premium | 20 | vip | flight |
| legend | 30 | premium | heal and feed commands |
| helper | 100 | default | mute, kick, reports |
Each donor group inherits the one below it. That way legend only lists what's new at that level, and everything beneath comes for free. Staff is a separate branch off default: a helper shouldn't get donor perks for free, and a donor shouldn't get mute.
/lp creategroup vip
/lp creategroup premium
/lp creategroup legend
/lp group vip parent add default
/lp group premium parent add vip
/lp group legend parent add premium
/lp group vip setweight 10
/lp group premium setweight 20
/lp group legend setweight 30Weight matters when a player has several groups: LuckPerms uses it to decide which group ranks higher and whose permissions win a conflict. Bigger number, higher group. Leave gaps between weights like above, so you can slot a new rank in later.
/lp group default permission set essentials.home true
/lp group default permission set essentials.tpa true
/lp group vip permission set essentials.kits.vip true
/lp group vip permission set essentials.sethome.multiple.vip true
/lp group premium permission set essentials.fly true
/lp group legend permission set essentials.heal true
/lp group legend permission set essentials.feed trueThe number of homes for essentials.sethome.multiple.vip is set in the Essentials config under sethome-multiple, and the vip kit is defined there too. To take away an inherited permission, set it to false in the group that shouldn't have it.
Not sure which permission a command checks? Turn on /lp verbose on, run the command as a regular player and watch the checks appear in chat. Turn it off with /lp verbose off.
/lp group vip meta setprefix 10 "&e[VIP] "
/lp group premium meta setprefix 20 "&b[Premium] "
/lp group legend meta setprefix 30 "&6[Legend] "The first number is the prefix priority, not the group weight. When a player has several groups, the prefix with the highest priority is shown. Keep priority equal to weight and you won't get confused. The quotes are required, otherwise the trailing space is lost.
A prefix doesn't show up anywhere on its own. In chat it's displayed by a chat plugin through Vault, in the tab list by the TAB plugin or the PlaceholderAPI placeholder %luckperms_prefix%. Hooking it into the tab list is covered in our TAB and scoreboard guide.
/lp user Steve parent addtemp vip 30d accumulate
/lp user Steve parent add legend
/lp user Steve parent remove vipaddtemp grants a group for a period: 30d, 12h, 1w. The accumulate flag matters for renewals: if the player already has a timed vip, the new 30 days are added to what's left. Without it, a repeat purchase may not extend the rank, and the buyer ends up in your support chat. For a permanent rank use plain parent add.
Your donation store grants the rank with the same command over RCON: the product holds a command with a player-name placeholder, and each store service has its own syntax. We covered automatic delivery in our article on server websites.
Grant donor ranks withparent addoraddtemp, neverparent set.setremoves every other group the player has: your helper buys VIP and stops being a helper.
/lp createtrack donate
/lp track donate append vip
/lp track donate append premium
/lp track donate append legend
/lp user Steve promote donatepromote moves the player one step up the track and removes the previous step. Handy for an "upgrade to the next rank" product. The reverse is demote.
If you run a lobby and survival behind Velocity or BungeeCord, connect LuckPerms on every server to one MySQL or MariaDB database. That's storage-method in config.yml. The default is H2, a local file, so each server keeps its own separate copy of permissions.
In the same config.yml, give each server its own name in the server key. Then you can grant a permission on just one of them:
/lp group premium permission set essentials.fly true server=survivalTo push an edit from one server to the others right away, enable messaging-service.
/lp user Steve info: the player's groups and timed expiries./lp user Steve permission check essentials.fly: whether the permission is there and where it comes from./lp editor: a web editor via a link in chat. After saving, it gives you a command to run on the server to apply the changes./spawn and /home.parent set for donations. Other groups vanish, staff included.addtemp without accumulate. Renewals don't stack.* for admins. It opens literally everything, including commands nobody needs. Grant a list instead.Groups and permissions themselves are easiest to manage with the commands above or with /lp editor. Cloud Panel takes care of everything around them. The console is right there, no SSH: lp commands go straight from the app. LuckPerms config.yml opens as a form, so you don't hunt for keys in the file. The prefixes you set show up in the tab list and scoreboard with a live preview. The donation menu is put together in a visual builder. And every file edit is logged and can be rolled back byte for byte.
accumulate, never parent set.config.yml.Want your console, tab list and donation menu in one window? Try it free for 3 days, no card needed.
We have been building server builds, plugins and websites for Minecraft servers since 2022. A ready-made solution goes onto your hosting in an evening, and we install it for free.