In short: create one LuckPerms group per rank, chain them with inheritance (lp group premium parent add vip), and give them permissions and a prefix weighted below your staff. Deliver a permanent purchase with lp user <name> parent settrack donate <group> and a timed one with lp user <name> parent addtemp <group> 30d accumulate. Put those commands into your webstore packages and the server hands out ranks by itself. Fill ranks with cosmetics and conveniences — not a combat advantage and never an anticheat bypass.
A rank layout
| Group | Weight | Inherits | What it gets (example) |
|---|---|---|---|
| default | — | — | Normal game-mode commands |
| vip | 10 | default | Prefix, colored chat, /hat |
| premium | 20 | vip | Everything in vip + colored nickname, more homes |
| elite | 30 | premium | Everything in premium + its own prefix and cosmetic kits |
Inheritance saves you from repeating yourself: premium gets everything vip has, elite everything premium has. Weight settles conflicts: when a player is in several groups, the permissions, prefix and primary group with the higher weight win — by default LuckPerms picks the primary group by weight (primary-group-calculation: parents-by-weight).
Create the groups and inheritance
lp creategroup vip
lp creategroup premium
lp creategroup elite
lp group vip parent add default
lp group premium parent add vip
lp group elite parent add premium
lp group vip setweight 10
lp group premium setweight 20
lp group elite setweight 30
lp group vip setdisplayname VIPsetdisplayname sets the group's display name — LuckPerms describes it as an alias. Keep the group name itself lowercase without spaces: you'll type it in commands and in webstore packages. The developers recommend leaving gaps between weights (their example is steps of 100 instead of 1), which is why the layout uses steps of 10: you can slot a new rank in between later.
What to put in a rank
Permissions go on the group: lp group vip permission set <permission> true. Below are popular EssentialsX permissions from its own docs; for other plugins, check their docs or use /lp verbose.
| Perk | Permissions | Under Mojang's rules |
|---|---|---|
| Prefix | meta setprefix in LuckPerms (section below) | Cosmetic — allowed |
| Colored chat | essentials.chat.color (needs the EssentialsX Chat module) | Cosmetic — allowed |
| Colored nickname, same text | essentials.nick and essentials.nick.changecolors | Cosmetic — allowed |
| A block on your head | essentials.hat | Cosmetic — allowed |
| More homes | essentials.sethome.multiple and essentials.sethome.multiple.vip | Convenience — depends on the game mode |
| Kits | essentials.kit and essentials.kits.<kit> | Cosmetic items — allowed; weapons and armor stronger than everyone else's — not allowed |
/fly, /god, /heal, /feed | essentials.fly, essentials.god, essentials.heal, essentials.feed | An advantage in survival and PvP — not allowed |
essentials.nick.changecolors lets players color their nickname, but the text must still match their real name — so a buyer can't pose as someone else. The number of homes comes from sethome-multiple in EssentialsX's config.yml: by default it has default: 3, vip: 5 and staff: 10, and a player needs both permissions from the table.
Prefixes and where they show
lp group vip meta setprefix 10 "&a[VIP] "
lp group premium meta setprefix 20 "&b[Premium] "
lp group elite meta setprefix 30 "&6[Elite] "
lp user Steve meta info- Prefix weight is the first number. Of all the prefixes a player has and inherits, the one with the highest weight is shown.
lp user <name> meta infolists them in order. - Chat. LuckPerms stores prefixes but doesn't format chat: you need Vault and a chat plugin that reads data through Vault, such as EssentialsX Chat.
- Tab list and nametags. TAB reads the LuckPerms prefix with its own
%luckperms-prefix%placeholder. - Menus, scoreboards, holograms. Through PlaceholderAPI: run
/papi ecloud download LuckPerms, then/papi reload, and%luckperms_prefix%works in your plugins.
A gradient prefix is easy to build in the gradient text generator. If a player is both a moderator and a VIP, the weights above show the moderator prefix.
A rank for a month
lp user Steve parent addtemp vip 30d accumulate
lp user Steve parent removetemp vip 30d
lp user Steve parent removetemp vipparent addtempgrants a group for a while:30dis 30 days,1mo3d13h45mis 1 month, 3 days, 13 hours and 45 minutes. You can also give a unix timestamp for when it expires.- `accumulate` is a must for renewals. The default is
temporary-add-behaviour: deny: if the player already has a timed vip, granting it again simply fails. Withaccumulatethe new duration is added to what's left; withreplacethe longer one is kept. parent removetemp vip 30dsubtracts 30 days — handy when one month out of several is refunded; without a duration it removes the timed group entirely.- LuckPerms checks for expired permissions every 3 seconds, so a rank ends on time without a restart.
Players can see what's left through PlaceholderAPI: %luckperms_group_expiry_time_vip% is the time remaining on the vip group.
Upgrades: a rank track
A track is a ladder of groups. LuckPerms itself uses a donor track as an example: you promote a player along it each time they buy a rank upgrade. A track doesn't affect inheritance — only where promotion and demotion move a player.
lp createtrack donate
lp track donate append vip
lp track donate append premium
lp track donate append elite
lp user Steve promote donate
lp user Steve parent settrack donate premiumpromote donatemoves the player one step up and removes the previous step. If the player isn't on the track yet, they land in its first group — vip. Sopromotesuits an "upgrade" package, not the purchase of a specific rank.parent settrack donate premiumputs the player straight onto the right step and clears only this track's groups — staff and other groups stay. It's the right command for a "Premium forever" package.
Automatic delivery from a webstore
A webstore runs the commands you put in a package on your server — through its own plugin or over RCON. How to pick one and why a plugin beats an open RCON port is covered in Minecraft donation stores. For the ranks in this article the commands are:
| Event | Package command |
|---|---|
| Permanent purchase | lp user <name> parent settrack donate premium |
| Monthly purchase and renewal | lp user <name> parent addtemp premium 30d accumulate |
| One-step upgrade | lp user <name> promote donate |
| Refund or chargeback (permanent) | lp user <name> parent remove premium |
| Refund of one month | lp user <name> parent removetemp premium 30d |
<name> with your store's username variable — every service writes it its own way, so check its docsNetworks. For a rank to apply on every server of a network, LuckPerms there must share one database — see MySQL for plugins. With MySQL or MariaDB, LuckPerms by default tells the other servers about changes through the database itself. A rank for one server only takes a context: lp user <name> parent add vip server=survival, where survival is the server value in that server's LuckPerms config.
What a rank may include
The Minecraft Usage Guidelines let you sell entitlements that affect gameplay only if they don't ruin other players' experience or give a competitive advantage, and cosmetics except capes or anything that looks like one. All paid content and prices must be visible before a player joins, and everyone who pays gets an online history of their purchases. The full breakdown, including crates and currency, is in monetization and the EULA.
A rank must never bypass the anticheat
The costliest mistake in a rank setup is a permission that switches checks off. Anticheat immunity is an advantage over honest players — and a fair server is exactly what your buyers pay for. So:
- No `*` in paid groups. A wildcard grants every permission that starts with that string, and a bare
*grants everything: anticheat exemptions, moderation commands, limit bypasses. LuckPerms applies wildcards by default (apply-wildcards: true). - Read the whole permission list. Permissions with
bypassin the name often lift limits: in EssentialsX, for example,essentials.nick.blacklist.bypassskips the nickname blacklist. Give ranks only what you understand. - Anticheat permissions are for administrators. DGuard's commands need
dguard.admin; paid groups need it neither directly nor through*.
DGuard — the best anticheat for a modern Minecraft server — checks combat, movement, packets, inventory, building and the world, and covers all 47 cheat types in our comparison with GrimAC, Vulcan, Polar, Intave and Matrix. It gathers evidence and doesn't rush to a verdict, and you set how strict the punishments are. DGuard is free up to 30 players online; beyond that you pay for online and the number of servers — protection is the same on every plan.
FAQ
How do I make a paid rank on a Minecraft server?
Install LuckPerms, create a group (lp creategroup vip), give it permissions and a prefix, and add buyers with lp user <name> parent add vip. In a webstore, that command goes into the package and the server delivers the rank by itself.
How do I give a rank for 30 days?
With lp user <name> parent addtemp vip 30d accumulate. Without accumulate, granting it again to someone whose vip hasn't expired fails: by default LuckPerms refuses duplicate timed groups.
Why doesn't the rank prefix show in chat?
LuckPerms doesn't format chat itself. You need Vault and a chat plugin that reads prefixes through Vault, such as EssentialsX Chat. If a moderator's prefix shows instead of the bought one, that's the weights working as intended.
Can I sell /fly and kits?
The Usage Guidelines don't allow selling anything that gives a competitive advantage or ruins the game for others. Flight, god mode and kits stronger than everyone else's give an advantage in survival and PvP. Cosmetics — prefixes, colors, a block on your head — are allowed.
Sources
- LuckPerms: parent commands (addtemp, settrack, removetemp)
- LuckPerms: tracks
- LuckPerms: user commands (promote)
- LuckPerms: weights
- LuckPerms: prefixes, suffixes and meta
- LuckPerms: placeholders
- LuckPerms: configuration (temporary-add-behaviour, apply-wildcards)
- LuckPerms: temporary permissions and wildcards
- LuckPerms: contexts
- LuckPerms: default config.yml (messaging-service)
- TAB Wiki: placeholders
- EssentialsX: color permissions
- EssentialsX: plugin.yml (permission list)
- EssentialsX: config.yml (sethome-multiple)
- Minecraft Usage Guidelines: Servers and hosting
- DGuard, the best anticheat for a modern Minecraft server: checks compared with GrimAC, Vulcan, Polar, Intave and Matrix
- DGuard: installation, requirements and troubleshooting
- DGuard: supported Paper and Leaf versions