Skip to content

Tuto n°5 Créer des commandes

360matt edited this page Jul 11, 2020 · 3 revisions

Définir, modeler et savourer !

Sah quel plaisir

depuis UlityCore v2.3

Toutes les méthodes:

ind représente l'indice (le numéro de l'argument) commençant par 0.

Les statuts disponibles: SUCCESS, PLAYER_ONLY, SYNTAX, NOPERM, FAILED, STOP

~

  • Checks, renvoie un booléan et renvoie une erreur si false

requirePlayer() --> true si la personne est un joueur, sinon false accompagné d'une erreur automatique pour la console

requirePermission( perm ) --> true si l'éxécuteur détient la permission, sinon false accompagné d'une erreur automatique

~

  • check si les arguments existent et s'ils correspondent au type:

arg.is( ind ) --> si args[ ind ] existe

arg.isNumber ( ind ) --> si args[ ind ] est un nombre

arg.isPlayer ( ind ) --> si args[ ind ] est un joueur connecté

~

  • Récupère la valeur selon le type demandé, null sans erreur si n'existe pas:

arg.get( ind ) --> contenu de args[ ind ] sous forme de texte

arg.getLong( ind ) --> contenu de args[ ind ] sous forme de nombre en Long

arg.getPlayer( ind ) --> contenu de args[ ind ] sous forme d'un objet joueur connecté

~

  • Même effet que les check précedants, mais renvoie une erreur automatiquement si false:

arg.require( ind ) --> true si args[ ind ] existe, sinon false et erreur

arg.requirePlayer( ind ) --> true si args[ ind ] est un joueur connecté, sinon false et erreur

arg.requirePlayerNoSelf( ind ) --> même effet mais n'accepte pas que le joueur soit égal au sender ( à lui même )

arg.requireNumber( ind ) --> true si args[ ind ] existe et est un nombre, sinon false erreur

~

  • autres méthodes:

arg.inRange( min, max ) --> true si la longueur est respectée ( se base sur #length )

arg.compare( "texte" , "infinie", "et", "au", "dela" ) --> true si texte est égal à une des valeurs entrées (String...)

arg.compare( ind , "infinie", "et", "au", "dela" ) --> même effet, mais en remplaçant texte par un argmument

~

Créer une Class de commande:

public class ExempleCommand extends CommandManager.Assisted {
    public ExempleCommand(CommandMap commandMap, JavaPlugin plugin) {
        super(plugin, "exemple");


        registerCommand(commandMap);
    }

    @Override
    public void exec(CommandSender sender, Command command, String label, String[] args) {

        if (arg.isNumber(0)) {
            sender.sendMessage("Nombre: " + args[0]);
        } else {
            sender.sendMessage("le premier argument n'est pas un nombre, peut être qu'il existe pas");
        }
        /* un simple check */


        // @@  @@  @@  @@  @@


        if (arg.requiredNumber(0)) {
            sender.sendMessage("Ouf, un nombre: " + args[0]);
        } else {
            // pas besoin d'envoyer une erreur, l'executeur l'a déjà reçu.
            // la balise else n'a pas vraiment d'utilité dans ce cas-ci, sauf pour des cas complexes.
        }
        /* un check plus poussé renvoyant une erreur si falsy */


        // @@  @@  @@  @@  @@


        if (arg.requiredPlayer(1)) {
            sender.sendMessage("Ouf, nom du joueur: " + arg.getPlayer(1).getName());
        }
        /* un check plus poussé renvoyant une erreur si falsy */


        // @@  @@  @@  @@  @@


        /* sinon, on peut définir un status: */
        setStatus(Status.SYNTAX);
        setStatus(Status.NOPERM);
        setStatus(Status.PLAYER_ONLY);
        setStatus(Status.SUCCESS);
    }

}

Register la commande

Dans la méthode onLoad() de votre plugin, Invoquez une instance de la Class de commande, dans la balise qui vérifie Api.ok (souvenez-vous du tuto n°1):

new ExempleCommand(Api.Bukkit.commandMap, this);

Le premier argument est la commandMap de bukkit, une sorte de liste de commande où l'on va ajouter cette nouvelle commande.

Le second argument est juste l'instance de la class principale de votre plugin, de type Plugin.

Clone this wiki locally