bukkit
Commandes
Recherche…
Syntaxe
@Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
Manipulation d'une commande
Pour gérer une commande, vous devez avoir une classe qui implémente l'interface CommandExecutor. La classe JavaPlugin (la classe principale de votre plugin) implémente déjà cela.
Lors de l'implémentation de l'interface CommandExecutor, la méthode suivante doit être implémentée:
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
//Handle your command in here
return true; ///Should return false if you want to show the usage
}
L'expéditeur est celui qui a envoyé la commande. Ce peut être un lecteur ou la console.
CMD est la commande que vous écoutez, telle que déclarée dans plugin.yml. Ne pas confondre avec l'étiquette.
label est l'alias utilisé pour exécuter cette commande, c'est ce que les expéditeurs saisissent après la barre oblique.
et enfin, les arguments sont les arguments que l'expéditeur peut avoir utilisés pour envoyer votre commande.
Une commande possible pourrait aller comme
/ dire à Kerooker Salut, Kerooker!
Tell serait votre label et peut également être défini comme votre commande si vous l'avez dit dans plugin.yml;
«Kerooker», «Salut», «Kerooker! sont vos arguments 0, 1 et 2, respectivement
En retour, vous voudrez probablement toujours retourner vrai lorsque vous vous attendiez à ce que tout se passe comme ça. Vous devriez retourner false si vous voulez montrer à l'expéditeur l'utilisation de la commande définie dans votre plugin.yml
Une simple commande GameMode (/ gm )
Cet exemple montre un exemple très simple de la façon d'utiliser onCommand. Je ne suggère pas de traiter vos commandes directement dans onCommand, mais cela fait l'affaire pour ce cas simple.
Dans cet exemple, nous essayons de définir le mode de jeu du lecteur.
La première chose à faire est de vous assurer que l'expéditeur n'est pas un ConsoleCommandSender, car nous ne pouvons pas définir le mode de jeu d'une console. Ceci est fait avec (instance expéditeur du lecteur).
Ensuite, nous voulons que le lecteur tape / gm CREATIVE (ou tout autre mode de jeu), nous devons donc vérifier 2 choses:
- assurez-vous qu'ils passent en 1 argument (CREATIVE)
- assurez-vous que leur commande était "gm"
Nous avons effectué ces vérifications avec: args.length == 1 && label.equalsIgnoreCase ("gm")
Nous savons maintenant que le lecteur a tapé "/ gm x".
La prochaine chose à faire est de transformer args [0] en un objet GameMode afin de pouvoir l'appliquer au lecteur. Cela peut être fait avec GameMode.valueOf (String) Cependant, selon la documentation d'énumération Java, si une chaîne est passée dans valueOf () qui ne correspond pas à une énumération, une exception IllegalArgumentException sera lancée - nous devons donc nous assurer de Attrape ça.
Une fois que nous avons le mode de jeu, nous pouvons continuer et utiliser simplement p.setGameMode (gm) et le mode de jeu du lecteur changera. Dans le cas où nous avons attrapé une exception - nous imprimons simplement une déclaration et retournons false.
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender instanceof Player) {
final Player p = (Player) sender;
if (args.length == 1 && label.equalsIgnoreCase("gm")) {
try {
GameMode gm = GameMode.valueOf(args[0]);
p.setGameMode(gm);
p.sendMessage(ChatColor.GREEN + "Your gamemode has been set to: " + gm.toString());
return true;
} catch (IllegalArgumentException e) {
p.sendMessage(ChatColor.RED + "Invalid gamemode option!");
return false;
}
}
}
return false;
}
Commande pas en classe principale
Si vous avez beaucoup de commandes, vous ne devriez pas toutes les placer dans la classe principale.
Créez une nouvelle classe et implémentez
CommandExecutor
Ajoutez les éléments suivants à la classe:
@Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { }
Dans votre classe principale, ajoutez dans onEnable (remplacez commandName par le nom de la commande et CommandExecutor par le nom de la classe):
getCommand("commandName").setExecutor(new CommandExecutor());