Buscar..


Sintaxis

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

Manejando un Comando

Para manejar un comando, debe tener una clase que implemente la interfaz CommandExecutor. La clase JavaPlugin (la clase principal de su plugin) ya implementa esto.

Al implementar la interfaz CommandExecutor, se debe implementar el siguiente método:

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

}

Remitente es el que envió el comando. Puede ser un jugador o la consola.

CMD es el comando que está escuchando, como se declara en plugin.yml. No debe confundirse con la etiqueta.

label es el alias utilizado para ejecutar este comando, es lo que el remitente escribe después de la barra diagonal.

y finalmente, args son los argumentos que el remitente puede haber usado para enviar su comando.

Un comando posible podría ir como

/ Dile a Kerooker ¡Hola, Kerooker!

Tell sería su etiqueta, y también puede definirse como su comando si lo dice en plugin.yml;

'Kerooker', 'Hola', 'Kerooker!' son sus argumentos 0, 1 y 2, respectivamente

Como retorno, probablemente siempre querrá volver verdadero cuando esperaba que todo sucediera de esa manera. Debe devolver falso si desea mostrar al remitente el uso del comando definido en su plugin.yml

Un comando simple set gameMode (/ gm )

Este ejemplo muestra un ejemplo muy básico de cómo utilizar onCommand. No sugiero procesar sus comandos directamente en onCommand, pero esto sirve para este simple caso.

En este ejemplo intentamos configurar el modo de juego del jugador.

Lo primero que debemos hacer es asegurarnos de que el remitente no sea un ConsoleCommandSender, porque no podemos configurar el modo de juego de una consola. Esto se hace con (remitente de jugador).

A continuación, queremos que el jugador escriba / gm CREATIVE (o cualquier otro modo de modo de juego), así que tenemos que verificar 2 cosas:

  1. Asegúrate de que pasan en 1 argumento (CREATIVO)
  2. asegúrese de que su comando era "gm"

Logramos estas comprobaciones con: args.length == 1 && label.equalsIgnoreCase ("gm")

Ahora sabemos con seguridad que el jugador escribió "/ gm x".

Lo siguiente que debemos hacer es convertir args [0] en un objeto GameMode para que podamos aplicarlo al jugador. Esto se puede hacer con GameMode.valueOf (String) Sin embargo, de acuerdo con la documentación de enumeración de Java, si una cadena se pasa a valueOf () que no coincide con una enumeración, lanzará una IllegalArgumentException, por lo que debemos asegurarnos de atrapá eso.

Una vez que tengamos el modo de juego, podemos seguir adelante y simplemente usar p.setGameMode (gm) y el modo de juego del jugador cambiará. En el caso de que detectáramos una excepción, simplemente imprimimos una declaración y devolvemos el valor falso.

@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 no en la clase principal

Si tiene muchos comandos, no debe ponerlos todos en la clase principal.

  1. Haz una nueva clase y haz que implemente CommandExecutor

  2. Agregue lo siguiente a la clase:

     @Override 
     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    
     }
    
  3. En su clase principal agregue en onEnable (reemplace commandName con el nombre del comando y CommandExecutor con el nombre de la clase):

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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow