How to set up LuckPerms ranks and permissions
Giving everyone operator status is the fastest way to ruin a server, and giving nobody anything makes it dull. A permissions plugin lets you give each player exactly the powers you intend. LuckPerms is the one most servers use: it is actively maintained, fast, and has a web editor that makes the job much easier than typing commands.
The idea in one minute
LuckPerms works with three things:
- Permissions, which are small switches such as
essentials.homethat allow one action. - Groups, which are bundles of permissions, like "member", "moderator" and "admin".
- Players, who belong to one or more groups.
A group can inherit from another. If "moderator" inherits from "member", moderators automatically get everything members have, plus their own extras. That keeps the setup short and tidy.
Install it
- Download LuckPerms from its official site and pick the build for your server software.
- Upload it to the
pluginsfolder and restart. The file manager works for this. - In the console, run
lp info. If it prints details, it is working.
Every player starts in a group called default. Anything you give default applies to everyone, so give it only what you would give a stranger.
The easy way: the web editor
Type /lp editor in the game or console. LuckPerms replies with a link to a web page that shows your groups and permissions. Edit there, press save, and it gives you a command to apply the changes. It is far easier than remembering commands, especially at first.
The command way
You will use a small set of commands again and again:
/lp creategroup moderator
/lp group moderator parent add default
/lp group moderator permission set essentials.kick true
/lp user PlayerName parent add moderator
/lp user PlayerName info
The first makes a group. The second makes it inherit from default. The third gives it one permission. The fourth puts a player in it. The last shows what a player currently has, which is the command you will reach for most when something does not work.
A sensible starting layout
| Group | Inherits from | Gets |
|---|---|---|
| default | none | Chat, basic commands, homes and teleport requests if you use them |
| trusted | default | Extra homes, particle effects, small perks |
| moderator | trusted | Kick, mute, teleport to players, view logs |
| admin | moderator | Plugin management, world tools |
Notice that the owner is not a group here. Keep a small number of trusted accounts as operators, and use groups for everyone else.
Prefixes and weights
Groups can show a coloured tag in chat. Set it with the meta commands, for example:
/lp group admin meta setprefix 100 "&c[Admin] "
The number is the priority. If a player belongs to several groups with prefixes, the highest priority wins. Groups also have a weight, which settles conflicts when two groups disagree about the same permission: the higher weight is applied. Showing prefixes in chat needs a chat plugin that supports them, and some economy and chat plugins also need Vault installed as a bridge.
Finding which permission you need
Plugins list their permissions on their pages. If a command fails with "you do not have permission" and you cannot tell which one it wants, turn on verbose mode:
/lp verbose on
Then run the command as the affected player. LuckPerms prints each permission check as it happens, and you will see the exact node that was refused. Turn it off again with /lp verbose off.
Mistakes to avoid
- Granting
*. This gives every permission from every plugin, including ones that can wipe your server. Only the owner should ever hold it, if anyone. - Skipping
default. Players in no group get nothing, including basic commands. - Forgetting inheritance. Duplicating permissions across groups creates work and mistakes. Inherit instead.
- Testing as an operator. Operators bypass most checks, so test with a normal player account.
Pair this with a whitelist and a short list of operators, and protect builds with a claim plugin as described in How to protect builds from griefing.
Still stuck? Open a ticket on Discord - run /ticket in any channel, pick a department, and include your Server ID or Invoice ID so we can jump straight in.