Ricerca…


Sintassi

  • @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)

Gestire un comando

Per gestire un comando, è necessario disporre di una classe che implementa l'interfaccia CommandExecutor. La classe JavaPlugin (la classe principale del tuo plugin) implementa già questo.

Quando si implementa l'interfaccia CommandExecutor, è necessario implementare il seguente metodo:

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

}

Il mittente è colui che ha inviato il comando. Può essere un giocatore o la console.

CMD è il comando che stai ascoltando, come dichiarato in plugin.yml. Da non confondere con l'etichetta.

label è l'alias utilizzato per eseguire questo comando, è ciò che il mittente digita dopo la barra.

e infine, args sono gli argomenti che il mittente potrebbe aver usato per inviare il tuo comando.

Un possibile comando potrebbe andare come

/ dì a Kerooker Ciao, Kerooker!

Tell sarebbe la tua etichetta e potrebbe anche essere definito come tuo comando se lo hai detto in plugin.yml;

"Kerooker", "Ciao", "Kerooker!" sono i tuoi args 0, 1 e 2, rispettivamente

Come ritorno, probabilmente vorrai sempre tornare vero quando ti aspettavi che tutto succedesse in quel modo. Dovresti restituire false se vuoi mostrare al mittente l'utilizzo del comando definito nel tuo plugin.yml

Un semplice comando GameMode (/ gm )

Questo esempio mostra un esempio molto semplice di come utilizzare onCommand. Non suggerisco di elaborare i tuoi comandi direttamente in onCommand, ma questo è il trucco per questo semplice caso.

In questo esempio, tentiamo di impostare la gamemode del giocatore.

La prima cosa che dobbiamo fare è assicurarsi che il mittente non sia un ConsoleCommandSender, perché non possiamo impostare la gamemode di una console. Questo è fatto con (sender instanceof Player).

Quindi, vogliamo che il giocatore digiti / gm CREATIVE (o qualsiasi altro gamemode), quindi dobbiamo controllare 2 cose:

  1. assicurati che passino in 1 argomento (CREATIVO)
  2. assicurati che il loro comando fosse "gm"

Abbiamo eseguito questi controlli con: args.length == 1 && label.equalsIgnoreCase ("gm")

Ora sappiamo per certo che il giocatore ha digitato "/ gm x".

La prossima cosa che dobbiamo fare è trasformare args [0] in un oggetto GameMode in modo che possiamo applicarlo al giocatore. Questo può essere fatto con GameMode.valueOf (String) Tuttavia, secondo la documentazione di enumerazione Java, se una stringa viene passata in valueOf () che non corrisponde ad un'enumerazione, genererà un IllegalArgumentException - quindi dobbiamo assicurarci di prendilo.

Una volta che abbiamo il gamemode, possiamo andare avanti e usare semplicemente p.setGameMode (gm) e la gamemode del giocatore cambierà. Nel caso in cui abbiamo rilevato un'eccezione, semplicemente stampiamo una dichiarazione e restituiamo 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;
}

Comando non nella classe principale

Se hai molti comandi, non dovresti metterli tutti nella classe principale.

  1. Crea una nuova classe e implementa CommandExecutor

  2. Aggiungi il seguente alla classe:

     @Override 
     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    
     }
    
  3. Nella tua classe principale aggiungi onEnable (sostituisci commandName con il nome del comando e CommandExecutor con il nome della classe):

     getCommand("commandName").setExecutor(new CommandExecutor());
    


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow