Basculer le menu
Changer de menu des préférences
Basculer le menu personnel
Non connecté(e)
Votre adresse IP sera visible au public si vous faites des modifications.


Logo de LuckPerms
Logo de LuckPerms
LuckPerms
Type
Administration
Développeur
Luck (lucko)
Ressources
Hangar
Modrinth
Spigot
Code source
Compatibilité
Dépendance(s)
Aucune


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
  • Permissions par joueur et par groupe
  • Héritage multiple de groupes
  • Permissions temporaires (expiration)
  • Permissions contextuelles (monde, serveur, gamemode...)
  • Wildcards et négation (-permission)
  • Regex et patterns avancés
  • Meta-données custom
Groupes
  • Création illimitée de groupes
  • Héritage multiple et priorité
  • Groupes temporaires
  • Tracks (progression de grades)
  • Préfixes et suffixes
  • Weights (poids/priorités)
  • Groupes par défaut
Interface
  • Web Editor : éditeur en ligne intuitif
  • Verbose mode : debug permissions en temps réel
  • Commandes in-game complètes
  • Interface visuelle pour tracks
  • Import/Export de configurations
  • API complète pour développeurs
Stockage
  • MySQL, MariaDB, PostgreSQL
  • MongoDB
  • SQLite (fichier local)
  • H2 (fichier local)
  • Configuration YAML/JSON
  • Support multi-serveurs (réseau)
  • Synchronisation temps réel
Performance
  • Cache agressif et intelligent
  • Requêtes async
  • Impact minimal (< 1% CPU)
  • Optimisé pour gros serveurs
  • Support Redis pour sync
  • Pas de lag aux changements
Contextes
  • Par monde (world=world_nether)
  • Par serveur (server=lobby)
  • Par gamemode (gamemode=survival)
  • Contextes custom via API
  • Combinaisons logiques (AND/OR)
  • Negation de contextes
Intégrations
  • Vault (permissions, chat, economy)
  • PlaceholderAPI
  • Tous plugins majeurs
  • API native extensible
  • Hooks pour formats chat
  • Export vers autres systèmes
Multi-plateforme
  • Spigot/Paper (Bukkit)
Sponge
  • Fabric
  • NeoForge
  • Velocity (proxy)
  • BungeeCord (proxy)
  • Configuration unifiée

Installation

Installation serveur unique

  1. Téléchargez LuckPerms depuis LuckPerms.net, Modrinth ou SpigotMC
  2. Placez LuckPerms-Bukkit-x.x.x.jar dans plugins/
  3. (Optionnel) Installez Vault pour compatibilité legacy
  4. Démarrez le serveur
  5. Configuration générée dans plugins/LuckPerms/config.yml

Installation réseau (BungeeCord/Velocity)

Sur le proxy :

  1. Installez LuckPerms-Velocity-x.x.x.jar ou LuckPerms-Bungee-x.x.x.jar
  2. Configurez la base de données MySQL

Sur chaque serveur backend :

  1. Installez LuckPerms-Bukkit-x.x.x.jar
  2. 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 :

  1. Cliquez sur Save dans l'éditeur
  2. Copiez la commande générée
  3. Collez dans la console Minecraft
  4. 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


Voir aussi

Liens externes

Références