-
Notifications
You must be signed in to change notification settings - Fork 0
Tuto n°5 Créer des commandes
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
~
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);
}
}
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.