Suite à l'arrêt du projet Permissions (RIP), les développeurs de Bukkit nous ont pondu avec la sortie de bukkit build 1000, un système de Permissions bien nommé "PermissionsBukkit".

Ce tout nouveau système de permissions est voué à devenir le standard au milieu des autres plus méconnus par rapport à Permissions comme  GroupManager ou encore PEX.

Côté fonctionnement, il est assez semblable à Permissions mais je vais essayer de vous initier à sa configuration et ses fonctionnalités intéressantes.

Nous verrons également comment configurer un équivalent iChat pour la coloration des messages, vous comprendrez vite pourquoi cette parenthèse ;)

Note importante

Je ne savais pas ou mettre cette note mais il m'apparaît important d'apporter une précision avant de vous lancer dans les permissions quelles qu'elles soient.

La syntaxe d'un fichier .yml est très simple mais malgré tout précise. Il n'est pas rare qu'une simple erreur fasse planter tout un serveur.

Un conseil : soyez précis !

La syntaxe s'articule toujours sur le même principe :

ELEMENT1:
    SOUS-ELEMENT1:
        ATTRIBUT1: true
        ATTRIBUT2: false
    ELEMENT2:
        SOUS-ELEMENT2:
            ATTRIBUT1: true
            ATTRIBUT2: false

Téléchargement

Vous trouverez les téléchargements nécessaires sur le post officiel :

http://forums.bukkit.org/threads/admn-dev-permissionsbukkit-v1-2k-official-default-groups-plugin-1000.26785/

Vous aurez 2 fichiers .jar :

  • PermissionsBukkit.jar = le plugin en lui-même
  • SuperPermBridge.jar = plugin faisant littéralement le "pont" entre les plugins faits pour l'ancien Permissions et PermissionsBukkit (aussi appelé SuperPerm)

Installation

Uploadez dans le dossier plugins de votre serveur les 2 .jar puis redémarrez votre serveur.

NB: Veillez bien entendu à désinstaller tout autre plugin de permissions quel qu'il soit pour évidemment éviter les conflits !

Configuration

Rentrons dans le vif du sujet ! En theorie, votre ami PermissionsBukkit, en démarrant, vous a pondu une première configuration d'exemple stockée dans plugins/PermissionsBukkit/config.yml.

Déjà première chose à savoir, PermissionsBukkit a ses propres permissions. Et là vous allez me dire : mais pourquoi ??? Tout simplement car celui-ci vous permet de gérer pas mal de choses directement via les commandes.

Lexique des permissions de PermissionsBukkit :

permissions.build - Autoriser un joueur à build. Par defaut sur "true".
permissions.help - Autoriser l'utilisation de /permissions
permissions.reload - Autoriser l'utilisation de /permissions reload
permissions.check - Autoriser l'utilisation de /permissions check
permissions.info - Autoriser l'utilisation de /permissions info
permissions.dump - Autoriser l'utilisation de /permissions dump
permissions.group.help - Autoriser l'utilisation de /permissions group
permissions.group.list - Autoriser l'utilisation de /permissions group list
permissions.group.players - Autoriser l'utilisation de /permissions group players
permissions.group.setperm - Autoriser l'utilisation de /permissions group setperm
permissions.group.unsetperm - Autoriser l'utilisation de /permissions group unsetperm
permissions.player.help - Autoriser l'utilisation de /permissions player
permissions.player.groups - Autoriser l'utilisation de /permissions player groups
permissions.player.setgroup - Autoriser l'utilisation de /permissions player setgroup
permissions.player.addgroup - Autoriser l'utilisation de /permissions player addgroup
permissions.player.removegroup - Autoriser l'utilisation de /permissions player removegroup
permissions.player.setperm - Autoriser l'utilisation de /permissions player addgroup
permissions.player.unsetperm - Autoriser l'utilisation de /permissions player removegroup

Lexique des permissions simplifiées :

permissions.* - Permet de définir les permissions .help, .reload, .check, .info, .dump et également permissions.group.* et permissions.player.* (par defaut pour un OP)
permissions.group.* - Permet de définir les permissions group.help, .list, .players, .setperm, et .unsetperm.
permissions.player.* - Permet de définir les permissions .player.help, .groups, .setgroup, .addgroup, .removegroup, .setperm, et .unsetperm

Lexique des commandes PermissionsBukkit :

/permissions reload - recharge de la configuration depuis le disque.
/permissions check [player] - vérifier si le joueur a une permissions précise
/permissions info - affiche les informations sur une permissions spécifique
/permissions dump [player] [page] - affiche toutes les permissions d'un utilisateur (page = n° de la page)
/permissions group - afficher la liste des commandes /permissions group
/permissions group list - afficher la liste des groupes
/permissions group players - afficher la liste des joueurs d'un groupe
/permissions group setperm <[world:]node> [true|false] - définir une permission pour un groupe
/permissions group unsetperm <[world:]node> - supprimer la permission d'un groupe
/permissions player - afficher la liste des commandes /permissions player
/permissions player groups - afficher les groupes d'un joueur
/permissions player setgroup - définir un groupe unique à un joueur
/permissions player addgroup - ajouter un joueur à un groupe
/permissions player removegroup - supprimer un joueur d'un groupe
/permissions player setperm <[world:]node> [true|false] - définir une permissions pour un joueur
/permissions player unsetperm <[world:]node> - supprimer une permission d'un joueur

Ok donc maintenant qu'on a tout ça, on peut commencer à définir notre premier utilisateur qui servira d'administrateur principal.

En reprenant l'exemple donné par le plugin, on a ça :

users:
    mtxserv:
        groups:
            - admin
    lambda:
        groups:
            - user
    espion:
        groups:
            debug: false
groups:
    default:
        permissions:
            permissions.build: false
    admin:
        permissions:
            permissions.*: true
            superpermbridge.*: true
        inheritance:
            - user
    user:
        permissions:
            permissions.build: true
        inheritance:
            - default
messages:
    build: '&cVous n avez pas le droit de construire ici !'
Dans l'exemple ci-dessus :

  • mtxserv est donc membre du groupe "admin". Il peut exécuter toutes les commandes /permissions mais est aussi admin de presque tous les plugins (nous verrons ci après pourquoi).
  • lambda est membre du groupe "user" qui n'a que le droit de "build"
  • espion n'a pas de groupe et sera donc membre du groupe par défaut nommé "default", il n'a pas la permission de "build"

Pourquoi "mtxserv" est admin de presque tous les plugins ?

Rappelez-vous, dans Permissions, vous aviez la permissions magique '*' qui vous permettait de donner tous les droits à un utilisateur ou un groupe.

Ici le principe n'existe plus, il faudra donc donner un droit de maîtriser chaque plugin en entier via la permission type :

nomduplugin.*: true

Pourquoi superpermbridge.* met des droits sur plusieurs plugins ?

SuperPermBridge permet de faire "pont" avec les plugins compatibles Permissions 2.X/3.X, en mettant cette permission spéciale, vous donnez tous les droits sur tous ces plugins.

Cependant, mieux vaut vous habituer dès maintenant à vous en passer, en mettant par exemple pour Essentials :

superpermbridge.essentials.*: true

Comment je fais pour mettre les permissions d'un vieux plugin alors ?

Reprenons le cas d'Essentials, pour ajouter la permission pour la commande /spawn, dans la documentation officielle faite pour l'ancien Permissions, vous aviez :

essentials.spawn
Il vous suffit dans votre configuration de mettre :

superpermbridge.essentials.spawn: true
Au final, ça donne :

superpermbridge.vieillepermission: true

Comment faire ces manipulations via les commandes ?

Déjà, le premier pré-requis est d'avoir les permissions pour le faire donc permissions.* idéalement.

Exemple :

On veut mettre lambda dans le groupe user, on crée d'abord le groupe en éditant le fichier config.yml (oui car pas encore de commande pour le faire...). 

Ensuite :

permissions player setgroup lambda user
On veut que le groupe puisse build :

/permissions group setperm user permissions.build

Comment fait-on pour gérer les permissions par monde ?

Contrairement à l'ancien Permissions, tout se passe dans le dossier config.yml ! A noter que lorsque vous mettez une permission via commande, vous pouvez définir le "world" si jamais vous ne souhaitez l'appliquer que dans un world spécifique. Petit exemple, toujours avec notre ami "lambda", on veut lui mettre la commande /spawn d'Essentials seulement dans "world2". Faisons le directement sur son groupe :

/permissions group setperm user world2:superpermbridge.essentials.spawn

Si vous souhaitez le mettre seulement pour le joueur "lambda" :

/permissions player setperm lambda world2:superpermbridge.essentials.spawn

Au final ça nous donne pour la partie groupe :

groups:
    default:
        permissions:
            permissions.build: false
    admin:
        permissions:
            permissions.*: true
            superpermbridge.*: true
        inheritance:
            - user
    user:
        permissions:
            permissions.build: true
    worlds:
    world2:
        superpermbridge.essentials.spawn: true
        inheritance:
            - default

On distingue bien les permissions globales sur le serveur pour le groupe user avec donc le droit de build et la permissions essentials.spawn uniquement dans world2.

Voici donc pour les bases comme il faut procéder pour configurer vos permissions :)

mChat : votre partenaire couleur

Ce plugin reprend le principe du célèbre iChat pour colorer votre chat en fonction des groupes de Permissions. Les préfixe et suffixe n'étant plus dans les permissions, il n'est pas compatible avec PermissionsBukkit.

La solution : mChat ! Vous allez le voir, mChat est pleinement compatible. Au niveau des permissions, pas de préfixe "superpermbridge." à inclure :)

Lien vers le topic officiel : http://forums.bukkit.org/threads/chat-mchat-v1-7-11-1-chat-formatting-plugin-1060.22958/

Téléchargez mChat.jar puis envoyez le dans votre répertoire plugins. Redémarrez ensuite votre serveur.

Une fois le serveur relancé, vous aurez sur votre FTP un dossier mChat dans plugins contenant config.yml et info.yml

Intéressons-nous à info.yml qui va être le fichier dans lequel vous configurez vos préfixes/suffixes. Exemple concret d'utilisation, toujours sur le modèle des groupes précédemment créés (rappelez-vous, nous avions default, user et admin).

groupnames:
    admin: 'admin'
    user: 'user'
    default: 'default'
mchat:
    custVar:
        prefix:
            admin: '&7[ADMIN]'
            user: '&7[User]'
            default: '&7[Visiteur]'
    suffix:
        worldnames:
            world: '[world]'
            world2: '[world2]'

On a donc les préfixes avec une couleur. Pour chaque groupe, ajoutez bien ce qu'il faut :)

Intéressons-nous maintenant au config.yml de mChat avec un exemple de formattage de message chat en prenant la ligne qui nous intéresse :

mchat-message-format: '+hb +p &f+n: +message'

Dans l'exemple ci-dessus, la couleur &7 provient du préfixe du groupe admin, puis on met un &f avant +n pour afficher le pseudo du joueur ainsi que le message en blanc.

En ce qui concerne le formatage, voici les quelques petits alias de mChat :

+healthbar ou +hb = hp bar, barre de vie du joueur
+health ou +h = hp restants
+suffix ou +s = suffixe du groupe
+prefix ou +p = préfixe du groupe
+group ou +g = nom du groupe
+world ou +w = nom de la map
+time ou +t = heure sur la map
+name ou +n = pseudo du joueur
+dname ou +dn = nom du joueur pour message départ/arrivée
+message ou +msg ou +m = message

Petite particularité de mchat, pour qu'un groupe affiche correctement le préfixe ou suffixe, il faut lui en donner la permission. C'est assez curieux mais nécessaire. Pour notre utilisateur "mtxserv", on va ajouter la permission mchat.prefix.admin: true au groupe admin :

/permissions group setperm admin mchat.prefix.admin

On aura donc maintenant :

groups:
    default:
        permissions:
        permissions.build: false
    admin:
        permissions:
            permissions.*: true
            superpermbridge.*: true
            mchat.prefix.admin: true
        inheritance:
            - user
    user:
        permissions:
        permissions.build: true
    worlds:
    world2:
        superpermbridge.essentials.spawn: true
        inheritance:
            - default

Globalement, la permission pour faire fonctionner un préfixe :

mchat.prefix.NOMDUGROUPE: true

Si vous souhaitez utiliser les suffixes, procédez de même à savoir la permission :

mchat.suffix.NOMDUGROUPE: true

Conclusion

J'espère que ce tutoriel vous aura permis de migrer votre serveur sur PermissionsBukkit et de colorer un peu votre serveur.

Si vous avez le moindre problème ou suggestion concernant ce tutoriel, n'hésitez pas ;)