// Minecraft

LuckPerms: rangen en permissies goed instellen

LuckPerms: rangen en permissies goed instellen

LuckPerms regelt op een Minecraft-server wie wat mag en werkt met vier bouwstenen: gebruikers, groepen, permissienodes en contexts. De vuistregel is dat je permissies op groepen zet en niet op losse spelers, en dat je groepen van elkaar laat erven zodat elke node maar op een plek staat. Een opzet met vijf rangen (default, lid, vip, moderator en admin) bouw je met de webeditor in korte tijd op, en als iets niet werkt vind je de oorzaak vrijwel altijd met /lp user <naam> info en /lp user <naam> permission check <node>.

Hoe is LuckPerms opgebouwd?

Een permissie is niet meer dan een tekstregel, een node, die een plugin controleert voordat hij iets uitvoert. Vraagt iemand /home aan EssentialsX, dan kijkt EssentialsX of die speler essentials.home op true heeft staan. LuckPerms is de administratie die dat antwoord geeft: elke plugin bepaalt zelf welke nodes hij kent, LuckPerms alleen wie ze heeft.

Je beheert twee soorten houders. Een gebruiker is een speler, intern opgeslagen op UUID, zodat een naamswijziging niets kapotmaakt. Een groep is een verzameling nodes waar je gebruikers in stopt. Iedereen die joint zit automatisch in default; die groep kun je niet verwijderen en is de plek voor alles wat werkelijk iedereen mag.

Twee dingen zet je meteen goed: weight en meta. Weight bepaalt de volgorde bij conflicten en de sortering in de tab-lijst (/lp group vip setweight 20). Meta is alles wat geen ja-of-nee is, zoals een prefix: /lp group vip meta setprefix 20 "&6[VIP] &f". Die prefix verschijnt pas in de chat via een chatplugin, meestal EssentialsX Chat met Vault.

Wat is inheritance en waarom bespaart het je uren?

Inheritance betekent dat een groep een andere groep als parent heeft en alles daaruit overneemt. Je zet het met /lp group vip parent add lid. Wil je later dat elk betalend lid /back krijgt, dan zet je die node één keer in de juiste groep in plaats van in vier groepen los.

Bij een conflict gelden twee regels. Een node die je direct op een groep zet, wint van dezelfde node die via een parent binnenkomt. Komen twee parents met tegengestelde waarden, dan wint de parent met de hoogste weight. Zo trek je gericht iets terug: /lp group vip permission set essentials.tpahere false haalt dat commando weg bij vip, ook al staat het aan in lid.

Het nadeel is dat fouten meelopen. Zet je iets gevaarlijks in default, dan heeft je hele server het binnen een seconde. Test wijzigingen in default daarom met een tweede account.

Hoe ziet een werkende rangopzet eruit?

Onderstaande structuur werkt voor de meeste survival- en SMP-servers, of je nu net begint volgens onze uitleg over een Minecraft-server maken of een bestaande opzet opruimt. Moderator erft bewust van default en niet van vip, zodat donateursperks niet automatisch bij je staff terechtkomen.

GroepErft vanWeightTypische nodes
defaultgeen0essentials.spawn, essentials.msg, essentials.rules
liddefault10essentials.home, essentials.sethome, essentials.tpa
viplid20essentials.hat, essentials.nick, essentials.back
moderatordefault50essentials.kick, essentials.mute, coreprotect.inspect, coreprotect.rollback
adminmoderator100essentials.ban, worldedit.*, luckperms.editor

Die nodes komen uit EssentialsX, CoreProtect en WorldEdit; welke jij nodig hebt hangt af van je plugins, zie daarvoor ons overzicht van de beste Minecraft-plugins. Zo bouw je vip vanaf nul:

  1. /lp creategroup vip
  2. /lp group vip parent add lid — vip krijgt alles van lid, en via lid ook alles van default.
  3. /lp group vip setweight 20 — hoger dan lid, lager dan moderator.
  4. /lp group vip permission set essentials.nick true — herhalen per node.
  5. /lp group vip meta setprefix 20 "&6[VIP] &f"
  6. /lp user Steve parent add vip, of parent set vip om zijn bestaande groepen te vervangen.

Tracks: promoveren zonder na te denken

Een track is een geordende ladder van groepen. Maak hem met /lp createtrack speler en vul hem met /lp track speler append default, daarna append lid en append vip. Daarna schuif je iemand met /lp user Steve promote speler een trede omhoog en met demote weer omlaag, zonder te onthouden welke groep volgt. Playtime- en donatieplugins roepen precies dat aan. Houd staffrangen buiten die track: je wilt niet dat iemand van vip doorschuift naar moderator.

Wat zijn contexts en wanneer heb je ze nodig?

Een context is een voorwaarde waaronder een permissie geldt; in de praktijk gebruik je world en server. Met /lp group bouwer permission set worldedit.* true world=creatief mag die groep WorldEdit gebruiken in je creative-wereld en nergens anders. Met server=lobby beperk je een node tot een enkele server in een netwerk.

Daarvoor moeten twee dingen kloppen: elke backend-server heeft een eigen naam in de server:-instelling van de config, en alle servers delen dezelfde database. Op een enkele server met één wereld heb je contexts niet nodig; gebruik ze pas als het echt moet, want ze maken debuggen lastiger.

Waarom zet je nooit iemand op *?

De node * geeft alles, inclusief nodes van plugins die je volgende maand pas installeert en nodes die juist als uitzondering bedoeld zijn. Denk aan bypass-permissies waarmee iemand dwars door WorldGuard-regio's bouwt, aan /lp zelf waarmee hij zichzelf nog meer geeft, en aan commando's die de server stoppen of met één WorldEdit-selectie een halve wereld wissen. Eén gehackt moderatoraccount is dan genoeg om je map kwijt te raken.

Hetzelfde geldt voor op: operators slaan bij veel plugins de permissiecheck helemaal over, waardoor LuckPerms je niets meer kan beschermen. De regel is dus deop iedereen, jezelf inbegrepen, en regel alles via groepen. Zorg wel dat je altijd bij de console kunt als achterdeur; in het Pterodactyl-paneel dat standaard meekomt bij Minecraft-hosting bij MC-Node zit die in de browser. Wil je als eigenaar brede toegang, geef dan per plugin een wildcard zoals worldedit.*, met CoreProtect ernaast om fouten terug te draaien.

Is de webeditor de moeite waard?

Ja, het is veruit de grootste tijdwinst die LuckPerms biedt. Typ /lp editor in de console of de chat, open de link die je terugkrijgt en je ziet je hele rechtenstructuur als bewerkbaar overzicht: groepen naast elkaar, nodes aanvinken of slepen, en parents, weights en contexts in dezelfde weergave. Klik je op Apply, dan krijg je een /lp applyedits <code>-commando terug dat je in de server plakt; pas dan verandert er iets. Vijftig nodes verdelen over vijf groepen kost zo een paar minuten in plaats van een half uur typen.

Twee waarschuwingen. De link is een geheime URL naar jouw permissiedata, dus plak hem niet in een openbaar Discord-kanaal. En werk niet vanuit twee tabbladen tegelijk, want dan overschrijf je je eigen wijzigingen. Voor een backup gebruik je /lp export backup, dat een bestand in de LuckPerms-map schrijft dat je met /lp import terugzet.

Hoe debug je een permissie die niet werkt?

Werk van boven naar beneden, dan heb je het meestal binnen vier stappen te pakken.

  1. /lp user Steve info — toont de primaire groep, alle parents, de prefix en de nodes die direct op de speler staan. Meestal zit de fout hier al: de speler zit in een andere groep dan je dacht.
  2. /lp user Steve permission check essentials.home — geeft niet alleen true of false, maar ook waar die waarde vandaan komt.
  3. /lp verbose on — je ziet live welke nodes er echt gecontroleerd worden zodra iemand het commando probeert, inclusief typefouten en nodes die anders heten dan je aannam. Zet hem weer uit met /lp verbose off: op een volle server is het een waterval.
  4. Klopt de node en werkt het nog niet, kijk dan buiten LuckPerms: is de speler op, staat er een WorldGuard-flag in de weg, of heeft de plugin een eigen schakelaar in zijn config?

De klassiekers die je zo bovenhaalt: een tweede permissieplugin die nog meedraait, een false hoger in de keten, een vergeten context, en een node die hernoemd is in een nieuwere pluginversie.

Waar vind je de nodes van een plugin?

Vrijwel elke plugin documenteert zijn permissies op drie plekken: de wiki van het project, de downloadpagina op SpigotMC of Modrinth, en het bestand plugin.yml in de jar. Die laatste is de betrouwbaarste bron als de documentatie achterloopt: een jar is gewoon een zipbestand, dus je kunt hem openen en plugin.yml lezen, met daarin de commando's, hun node en de standaardwaarde. Dynamisch opgebouwde nodes zoals essentials.sethome.multiple.<groep> staan er niet in; die haal je uit de documentatie of uit /lp verbose.

Veelgestelde vragen

Werkt LuckPerms alleen op Paper en Spigot? Nee. LuckPerms wordt naast Bukkit, Spigot, Paper en Purpur ook uitgebracht voor Fabric, Forge en NeoForge, Sponge en voor de proxies Velocity en BungeeCord. Op een modpackserver werkt het dus ook, al documenteren mods hun permissies vaak minder netjes en vallen sommige helemaal terug op op-status.

Heb ik Vault nodig naast LuckPerms? Voor LuckPerms zelf niet. Vault is de lijmlaag waarmee andere plugins je rangen en prefixen uitlezen, bijvoorbeeld een chatplugin die [VIP] voor je naam zet. Verschijnt je prefix nergens, dan ontbreekt meestal Vault of een chatplugin, niet de permissie.

Waar slaat LuckPerms mijn rangen op? Standaard in een bestandsdatabase in de map plugins/LuckPerms, wat prima werkt voor een enkele server. Draai je meerdere servers achter een proxy, zet LuckPerms dan op MySQL of MariaDB, zodat alle servers dezelfde gegevens lezen en een promotie overal tegelijk geldt.

Kost LuckPerms prestaties? Nauwelijks; een permissiecheck wordt uit het geheugen beantwoord. Zie je toch lag, meet dan eerst met spark waar die vandaan komt in plaats van aan je permissies te sleutelen; in ons artikel over het optimaliseren van je Minecraft-server staat hoe je dat aanpakt.

Kan ik overstappen vanaf een oudere permissieplugin? Ja, LuckPerms heeft migratiecommando's voor voorgangers zoals GroupManager en PermissionsEx. Verwijder daarna de oude plugin echt: twee permissieplugins tegelijk geeft onvoorspelbare uitkomsten en is een van de lastigste storingen om te herleiden.

Verder lezen

// ZELF PROBEREN
Je server binnen 60 seconden online
MC-Node →