« LuckPerms » : différence entre les versions
Autres actions
m logo svg Balise : Révoqué |
m logo png Balise : Révocation manuelle |
||
Ligne 2 : | Ligne 2 : | ||
{{Infobox Plugin | {{Infobox Plugin | ||
|nom=LuckPerms | |nom=LuckPerms | ||
|image=LuckPerms_Logo. | |image=LuckPerms_Logo.png | ||
|legende=Logo de LuckPerms | |legende=Logo de LuckPerms | ||
|type=Administration | |type=Administration |
Version du 10 octobre 2025 à 08:17
LuckPerms est le système de gestion de permissions le plus avancé et le plus utilisé pour serveurs Minecraft. Il remplace les anciens systèmes comme PermissionsEx et GroupManager avec une approche moderne, performante et multi-plateforme.
Description
LuckPerms est un plugin de permissions open-source supportant Bukkit/Spigot, Paper, Sponge, Fabric, NeoForge et Velocity/BungeeCord.
Fonctionnalités
Catégorie | Fonctionnalités | |
---|---|---|
Gestion des permissions |
| |
Groupes |
| |
Interface |
| |
Stockage |
| |
Performance |
| |
Contextes |
| |
Intégrations |
| |
Multi-plateforme |
|
Sponge
|
Installation
Installation serveur unique
- Téléchargez LuckPerms depuis LuckPerms.net, Modrinth ou SpigotMC
- Placez
LuckPerms-Bukkit-x.x.x.jar
dansplugins/
- (Optionnel) Installez Vault pour compatibilité legacy
- Démarrez le serveur
- Configuration générée dans
plugins/LuckPerms/config.yml
Installation réseau (BungeeCord/Velocity)
Sur le proxy :
- Installez
LuckPerms-Velocity-x.x.x.jar
ouLuckPerms-Bungee-x.x.x.jar
- Configurez la base de données MySQL
Sur chaque serveur backend :
- Installez
LuckPerms-Bukkit-x.x.x.jar
- Configurez la même base de données
Configuration MySQL partagée :
# config.yml (identique sur tous serveurs)
storage-method: mysql
data:
address: localhost:3306
database: minecraft
username: root
password: votre_mot_de_passe
# Préfixe pour tables
table-prefix: 'luckperms_'
# Pool de connexions
pool-settings:
maximum-pool-size: 10
minimum-idle: 10
maximum-lifetime: 1800000
connection-timeout: 5000
# Sync en temps réel
messaging-service: sql
# Ou pour meilleures performances
messaging-service: redis
Configuration Redis (recommandé pour réseau)
# Pour sync instantanée entre serveurs
messaging-service: redis
redis:
address: localhost:6379
password: ''
# Utiliser SSL
ssl: false
Migration depuis autre plugin
# Depuis PermissionsEx
/lp migration permissionsex
# Depuis GroupManager
/lp migration groupmanager
# Depuis PowerfulPerms
/lp migration powerfulperms
# Depuis bPermissions
/lp migration bpermissions
# Depuis zPermissions
/lp migration zpermissions
Configuration
config.yml principal
# Serveur (important pour réseaux)
server: lobby
# Stockage
storage-method: h2
# Options: h2, sqlite, mysql, mariadb, postgresql, mongodb
# Si déjà des groupes, ne pas réappliquer
apply-wildcards: false
apply-regex: false
# Préfixes/suffixes via Vault
vault-server: true
vault-include-global: true
# Debug
verbose-mode: false
# Auto-save interval (minutes)
data:
auto-push-updates: true
# Watch file changes (pour config locale)
watch-files: true
# Poids par défaut
primary-group-calculation: stored
# Options: stored, parents-by-weight, all-parents-by-weight
Groupes de base
# Créer groupes essentiels
# Groupe par défaut
/lp creategroup default
/lp group default permission set essentials.spawn
/lp group default permission set essentials.home
/lp group default permission set essentials.sethome
# VIP
/lp creategroup vip
/lp group vip parent add default
/lp group vip permission set essentials.fly
/lp group vip permission set essentials.hat
/lp group vip meta setprefix "&6[VIP] "
# Modérateur
/lp creategroup moderator
/lp group moderator parent add vip
/lp group moderator permission set essentials.kick
/lp group moderator permission set essentials.mute
/lp group moderator permission set essentials.vanish
/lp group moderator meta setprefix "&9[Mod] "
# Admin
/lp creategroup admin
/lp group admin parent add moderator
/lp group admin permission set *
/lp group admin meta setprefix "&c[Admin] "
# Owner
/lp creategroup owner
/lp group owner parent add admin
/lp group owner permission set *
/lp group owner meta setprefix "&4[Owner] "
Commandes
Commande | Description | Alias |
---|---|---|
Général | ||
/lp |
Menu principal | /luckperms , /perms , /permissions
|
/lp info |
Infos plugin | |
/lp sync |
Synchroniser données | |
/lp editor |
Ouvrir Web Editor | |
/lp verbose <on/off> |
Mode debug | |
/lp reload |
Recharger config | |
/lp import <file> |
Importer données | |
/lp export <file> |
Exporter données | |
Utilisateurs | ||
/lp user <joueur> info |
Infos utilisateur | |
/lp user <joueur> permission set <perm> |
Donner permission | |
/lp user <joueur> permission unset <perm> |
Retirer permission | |
/lp user <joueur> permission check <perm> |
Vérifier permission | |
/lp user <joueur> parent add <groupe> |
Ajouter au groupe | |
/lp user <joueur> parent remove <groupe> |
Retirer du groupe | |
/lp user <joueur> parent set <groupe> |
Définir groupe principal | |
/lp user <joueur> clear |
Effacer permissions | |
/lp user <joueur> clone <cible> |
Cloner permissions | |
Groupes | ||
/lp listgroups |
Lister groupes | /lp groups
|
/lp creategroup <nom> |
Créer groupe | |
/lp deletegroup <nom> |
Supprimer groupe | |
/lp group <groupe> info |
Infos groupe | |
/lp group <groupe> permission set <perm> |
Donner permission | |
/lp group <groupe> permission unset <perm> |
Retirer permission | |
/lp group <groupe> parent add <parent> |
Hériter de groupe | |
/lp group <groupe> parent remove <parent> |
Retirer héritage | |
/lp group <groupe> setweight <poids> |
Définir priorité | |
/lp group <groupe> clear |
Effacer permissions | |
/lp group <groupe> clone <cible> |
Cloner groupe | |
/lp group <groupe> rename <nouveau> |
Renommer groupe | |
Meta (préfixes/suffixes) | ||
/lp user <joueur> meta setprefix <prio> <prefix> |
Définir préfixe | |
/lp user <joueur> meta setsuffix <prio> <suffix> |
Définir suffixe | |
/lp user <joueur> meta unsetprefix |
Retirer préfixe | |
/lp user <joueur> meta unsetsuffix |
Retirer suffixe | |
/lp group <groupe> meta setprefix <prio> <prefix> |
Préfixe groupe | |
/lp group <groupe> meta setsuffix <prio> <suffix> |
Suffixe groupe | |
/lp user <joueur> meta set <key> <value> |
Définir meta custom | |
/lp user <joueur> meta unset <key> |
Retirer meta | |
Permissions temporaires | ||
/lp user <joueur> permission settemp <perm> <durée> |
Permission temporaire | |
/lp user <joueur> parent addtemp <groupe> <durée> |
Groupe temporaire | |
/lp group <groupe> permission settemp <perm> <durée> |
Permission temp groupe | |
Contextes | ||
/lp user <joueur> permission set <perm> world=world |
Permission par monde | |
/lp user <joueur> permission set <perm> server=lobby |
Permission par serveur | |
/lp group <groupe> permission set <perm> gamemode=survival |
Permission par gamemode | |
Tracks | ||
/lp createtrack <nom> |
Créer track | |
/lp deletetrack <nom> |
Supprimer track | |
/lp listracks |
Lister tracks | /lp tracks
|
/lp track <track> info |
Infos track | |
/lp track <track> append <groupe> |
Ajouter groupe | |
/lp track <track> insert <groupe> <pos> |
Insérer groupe | |
/lp track <track> remove <groupe> |
Retirer groupe | |
/lp user <joueur> promote <track> |
Promouvoir joueur | |
/lp user <joueur> demote <track> |
Rétrograder joueur | |
Debug & Utilitaires | ||
/lp verbose on |
Activer verbose | |
/lp verbose record |
Enregistrer session | |
/lp verbose paste |
Partager logs | |
/lp verbose off |
Désactiver verbose | |
/lp tree [scope] |
Arbre permissions | |
/lp search <perm> |
Chercher permission | |
/lp check <joueur> <perm> |
Tester permission |
Formats de durée
s = secondes (ex: 30s)
m = minutes (ex: 45m)
h = heures (ex: 2h)
d = jours (ex: 7d)
w = semaines (ex: 2w)
mo = mois (ex: 1mo)
y = années (ex: 1y)
Combinable: 1d12h30m
Web Editor
Le Web Editor est l'interface graphique de LuckPerms accessible via navigateur.
Utilisation
# Ouvrir l'éditeur
/lp editor
# Éditer un utilisateur spécifique
/lp user Notch editor
# Éditer un groupe
/lp group admin editor
# Éditer un track
/lp track staff editor
Un lien unique et sécurisé sera généré, exemple :
https://editor.luckperms.net/#abcd1234
Fonctionnalités Editor
- Interface visuelle drag & drop
- Recherche de permissions
- Ajout/suppression en masse
- Modification contextes
- Prévisualisation en temps réel
- Sauvegarde automatique
- Historique des changements
- Export/Import JSON
Appliquer les changements
Après modifications dans l'éditeur :
- Cliquez sur Save dans l'éditeur
- Copiez la commande générée
- Collez dans la console Minecraft
- Les changements sont appliqués instantanément
Exemples avancés
Système de grades complet
# Créer les groupes
/lp creategroup joueur
/lp creategroup membre
/lp creategroup vip
/lp creategroup mvp
/lp creategroup modérateur
/lp creategroup admin
/lp creategroup owner
# Joueur (défaut)
/lp group joueur permission set essentials.spawn
/lp group joueur permission set essentials.help
/lp group joueur meta setprefix "&7[Joueur] "
/lp group joueur setweight 10
# Membre (actif)
/lp group membre parent add joueur
/lp group membre permission set essentials.home
/lp group membre permission set essentials.sethome.multiple.3
/lp group membre meta setprefix "&a[Membre] "
/lp group membre setweight 20
# VIP
/lp group vip parent add membre
/lp group vip permission set essentials.sethome.multiple.5
/lp group vip permission set essentials.fly
/lp group vip permission set essentials.hat
/lp group vip permission set essentials.nick
/lp group vip meta setprefix "&6[VIP] "
/lp group vip setweight 30
# MVP
/lp group mvp parent add vip
/lp group mvp permission set essentials.sethome.unlimited
/lp group mvp permission set essentials.fly.safelogin
/lp group mvp permission set essentials.speed
/lp group mvp meta setprefix "&e[MVP] "
/lp group mvp setweight 40
# Modérateur
/lp group modérateur parent add mvp
/lp group modérateur permission set essentials.kick
/lp group modérateur permission set essentials.mute
/lp group modérateur permission set essentials.tempban
/lp group modérateur permission set essentials.vanish
/lp group modérateur permission set essentials.socialspy
/lp group modérateur meta setprefix "&9[Mod] "
/lp group modérateur setweight 50
# Admin
/lp group admin parent add modérateur
/lp group admin permission set essentials.ban
/lp group admin permission set essentials.unban
/lp group admin permission set essentials.jail
/lp group admin permission set essentials.god
/lp group admin permission set essentials.gamemode
/lp group admin permission set worldedit.*
/lp group admin meta setprefix "&c[Admin] "
/lp group admin setweight 60
# Owner
/lp group owner parent add admin
/lp group owner permission set *
/lp group owner meta setprefix "&4[Owner] "
/lp group owner setweight 100
# Créer track de progression
/lp createtrack staff
/lp track staff append joueur
/lp track staff append membre
/lp track staff append vip
/lp track staff append mvp
/lp track staff append modérateur
/lp track staff append admin
/lp track staff append owner
# Promouvoir un joueur
/lp user Notch promote staff
Permissions par monde
# Fly seulement dans lobby
/lp group vip permission set essentials.fly true world=lobby
# PvP désactivé dans monde créatif
/lp group default permission set pvp.allow false world=creative
# Permissions différentes par monde
/lp user Notch permission set worldedit.* true world=build
/lp user Notch permission set worldedit.* false world=survival
Permissions temporaires
# VIP 30 jours
/lp user Notch parent addtemp vip 30d
# Permission 2 heures
/lp user Notch permission settemp essentials.fly 2h
# VIP jusqu'à date précise
/lp user Notch parent addtemp vip 2024-12-31T23:59:59
# Voir expirations
/lp user Notch info
Permissions négatives
# Groupe a toutes permissions sauf une
/lp group admin permission set *
/lp group admin permission set -essentials.sudo
# Bloquer commande spécifique
/lp user Notch permission set -essentials.fly
# Override permission de groupe
/lp group vip permission set essentials.*
/lp user Notch permission set -essentials.nick
Contextes multiples
# Fly seulement dans lobby ET en créatif
/lp user Notch permission set essentials.fly world=lobby gamemode=creative
# Permissions différentes par serveur (réseau)
/lp user Notch permission set plotme.* server=creative
/lp user Notch permission set factions.* server=survival
# Combiner contextes
/lp group builder permission set worldedit.* server=build world=flatworld
Wildcard avancé
# Toutes permissions essentials sauf economy
/lp group vip permission set essentials.*
/lp group vip permission set -essentials.eco.*
# WorldEdit sauf //set et //replace
/lp group helper permission set worldedit.*
/lp group helper permission set -worldedit.set
/lp group helper permission set -worldedit.replace
# Seulement permissions de lecture
/lp group viewer permission set coreprotect.lookup
/lp group viewer permission set coreprotect.inspect
/lp group viewer permission set -coreprotect.rollback
Préfixes/Suffixes avancés
# Préfixe avec priorité
/lp group admin meta setprefix 100 "&c[Admin] "
/lp group vip meta setprefix 50 "&6[VIP] "
# Préfixe personnel (override groupe)
/lp user Notch meta setprefix 999 "&4[Fondateur] "
# Suffixe
/lp group mvp meta setsuffix 50 " &6★"
# Multiple préfixes (stack)
/lp group admin meta addprefix 100 "&c[Admin] "
/lp group admin meta addprefix 90 "&7[Builder] "
# Meta custom
/lp user Notch meta set "discord" "Notch#0001"
/lp user Notch meta set "birthday" "2024-06-01"
API Développeur
Dépendance Maven
<repositories>
<repository>
<id>luck-repo</id>
<url>https://repo.lucko.me/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>net.luckperms</groupId>
<artifactId>api</artifactId>
<version>5.4</version>
<scope>provided</scope>
</dependency>
</dependencies>
Dépendance Gradle
repositories {
maven { url 'https://repo.lucko.me/' }
}
dependencies {
compileOnly 'net.luckperms:api:5.4'
}
Exemples de code
Obtenir l'API :
import net.luckperms.api.LuckPerms;
import net.luckperms.api.LuckPermsProvider;
public class MyPlugin extends JavaPlugin {
private LuckPerms luckPerms;
@Override
public void onEnable() {
this.luckPerms = LuckPermsProvider.get();
}
}
Vérifier permission :
import net.luckperms.api.model.user.User;
import net.luckperms.api.query.QueryOptions;
public boolean hasPermission(Player player, String permission) {
User user = luckPerms.getUserManager().getUser(player.getUniqueId());
if (user == null) return false;
QueryOptions queryOptions = luckPerms.getContextManager()
.getQueryOptions(player);
return user.getCachedData()
.getPermissionData(queryOptions)
.checkPermission(permission)
.asBoolean();
}
Ajouter permission :
import net.luckperms.api.node.Node;
public void addPermission(UUID uuid, String permission) {
User user = luckPerms.getUserManager().getUser(uuid);
if (user == null) {
// Charger user async si pas en cache
luckPerms.getUserManager().loadUser(uuid).thenAccept(loadedUser -> {
addPermissionToUser(loadedUser, permission);
});
} else {
addPermissionToUser(user, permission);
}
}
private void addPermissionToUser(User user, String permission) {
Node node = Node.builder(permission).build();
user.data().add(node);
luckPerms.getUserManager().saveUser(user);
}
Ajouter à groupe :
import net.luckperms.api.node.types.InheritanceNode;
public void addToGroup(UUID uuid, String groupName) {
User user = luckPerms.getUserManager().getUser(uuid);
Group group = luckPerms.getGroupManager().getGroup(groupName);
if (user != null && group != null) {
InheritanceNode node = InheritanceNode.builder(group).build();
user.data().add(node);
luckPerms.getUserManager().saveUser(user);
}
}
Permission temporaire :
import java.time.Duration;
import java.time.Instant;
public void addTempPermission(UUID uuid, String permission, Duration duration) {
User user = luckPerms.getUserManager().getUser(uuid);
if (user == null) return;
Instant expiry = Instant.now().plus(duration);
Node node = Node.builder(permission)
.expiry(expiry)
.build();
user.data().add(node);
luckPerms.getUserManager().saveUser(user);
}
// Exemple d'utilisation
addTempPermission(playerUUID, "essentials.fly", Duration.ofHours(2));
Obtenir préfixe/suffixe :
public String getPrefix(Player player) {
User user = luckPerms.getUserManager().getUser(player.getUniqueId());
if (user == null) return "";
QueryOptions queryOptions = luckPerms.getContextManager()
.getQueryOptions(player);
CachedMetaData metaData = user.getCachedData()
.getMetaData(queryOptions);
String prefix = metaData.getPrefix();
return prefix != null ? prefix : "";
}
public String getSuffix(Player player) {
User user = luckPerms.getUserManager().getUser(player.getUniqueId());
if (user == null) return "";
QueryOptions queryOptions = luckPerms.getContextManager()
.getQueryOptions(player);
CachedMetaData metaData = user.getCachedData()
.getMetaData(queryOptions);
String suffix = metaData.getSuffix();
return suffix != null ? suffix : "";
}
Contextes custom :
import net.luckperms.api.context.ContextCalculator;
import net.luckperms.api.context.ContextConsumer;
import net.luckperms.api.context.ContextSet;
public class RegionContextCalculator implements ContextCalculator<Player> {
@Override
public void calculate(Player player, ContextConsumer consumer) {
String region = getPlayerRegion(player);
if (region != null) {
consumer.accept("region", region);
}
}
private String getPlayerRegion(Player player) {
// Votre logique pour obtenir la région
return "spawn"; // exemple
}
}
// Enregistrer le calculator
luckPerms.getContextManager().registerCalculator(new RegionContextCalculator());
// Utiliser le contexte
// /lp user Notch permission set myplugin.special true region=spawn
Écouter les changements :
import net.luckperms.api.event.EventBus;
import net.luckperms.api.event.user.UserDataRecalculateEvent;
EventBus eventBus = luckPerms.getEventBus();
eventBus.subscribe(UserDataRecalculateEvent.class, event -> {
User user = event.getUser();
getLogger().info("Permissions recalculées pour: " + user.getUsername());
// Réagir aux changements
// Exemple: mettre à jour un scoreboard, un prefix, etc.
});
Intégrations
Vault
LuckPerms inclut un hook Vault automatique pour compatibilité legacy.
Configuration :
# config.yml
vault-server: true
vault-include-global: true
vault-ignore-world: false
Utilisation via Vault API :
// Automatiquement supporté par plugins utilisant Vault
Permission perms = getServer().getServicesManager()
.getRegistration(Permission.class).getProvider();
Chat chat = getServer().getServicesManager()
.getRegistration(Chat.class).getProvider();
// Via Vault (déconseillé, préférer API native LP)
perms.playerAdd(world, player.getName(), "permission.node");
String prefix = chat.getPlayerPrefix(world, player.getName());
PlaceholderAPI
LuckPerms fournit des placeholders PlaceholderAPI :
# Groupe principal
%luckperms_prefix%
%luckperms_suffix%
%luckperms_primary_group_name%
# Groupes
%luckperms_groups%
%luckperms_inherited_groups%
%luckperms_has_groups_on_track_<track>%
# Meta
%luckperms_meta_<key>%
%luckperms_meta_<key>_<default>%
# Permissions
%luckperms_has_permission_<permission>%
%luckperms_check_permission_<permission>%
%luckperms_inherits_permission_<permission>%
# Contextes
%luckperms_context_<key>%
# Exemples
%luckperms_prefix% → &c[Admin]
%luckperms_primary_group_name% → admin
%luckperms_meta_discord% → Notch#0001
%luckperms_has_permission_essentials.fly% → true
Formats de chat
Avec EssentialsXChat :
# EssentialsXChat config.yml
format: '{DISPLAYNAME}: {MESSAGE}'
# Avec préfixes LuckPerms
format: '{PREFIX}{DISPLAYNAME}{SUFFIX}&r: {MESSAGE}'
# Avancé
format: '&7[{GROUP}] {PREFIX}{DISPLAYNAME}{SUFFIX}&r&7: &f{MESSAGE}'
Avec autres plugins chat, LuckPerms fournit automatiquement préfixes/suffixes via Vault.
Performance
Impact système
- RAM : 15-30 MB (selon taille base de données)
- CPU : <1% en idle, 2-3% lors de changements
- Base de données : Requêtes optimisées et cache agressif
- Réseau : Sync quasi-instantanée avec Redis
Optimisations
Cache :
# config.yml
# Augmenter cache pour gros serveurs
meta-cache-max-size: 1000
context-cache-max-size: 100
MySQL optimisé :
data:
pool-settings:
maximum-pool-size: 15 # Plus pour gros serveurs
minimum-idle: 10
maximum-lifetime: 1800000
keep-alive-time: 0
connection-timeout: 5000
Redis pour réseau : Redis est beaucoup plus rapide que SQL pour sync entre serveurs.
messaging-service: redis
redis:
address: localhost:6379
password: ''
pool-size: 8