Sök…


Syntax

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

Hantera en kommando

För att hantera ett kommando måste du ha en klass som implementerar CommandExecutor-gränssnittet. JavaPlugin-klassen (din plugins huvudklass) implementerar redan detta.

Vid implementering av CommandExecutor-gränssnittet måste följande metod implementeras:

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

}

Avsändaren är den som skickade kommandot. Det kan vara en spelare eller konsolen.

CMD är kommandot du lyssnar på, som deklareras i plugin.yml. Att inte förväxla med etiketten.

etiketten är aliaset som används för att köra detta kommando, det är vad avsändaren skriver efter snedstrecket.

och slutligen, args är de argument som avsändaren kan ha använt för att skicka ditt kommando.

Ett möjligt kommando kan gå som

/ berätta för Kerooker Hej, Kerooker!

Berätta skulle vara din etikett och kan också definieras som ditt kommando om du sa det i plugin.yml;

'Kerooker', 'Hej', 'Kerooker!' är dina args 0, 1 respektive 2

Som återkomst kommer du förmodligen alltid att vilja återvända när du förväntade dig att allt skulle hända på det sättet. Du ska returnera falskt om du vill visa avsändaren den kommandobruk som definieras i din plugin.yml

Ett enkelt uppsatt GameMode-kommando (/ gm )

Detta exempel visar ett mycket grundläggande exempel på hur man använder onCommand. Jag föreslår inte att du behandlar dina kommandon direkt i onCommand, men det här är tricket för det här enkla fallet.

I det här exemplet försöker vi ställa in spelarens spelläge.

Det första vi behöver göra är att se till att avsändaren inte är en ConsoleCommandSender, eftersom vi inte kan ställa in en konsoles spelmodem. Detta görs med (avsändaren instans för spelaren).

Nästa, vi vill att spelaren ska skriva / gm CREATIVE (eller vad någonsin annan gamemode) så vi måste kontrollera två saker:

  1. se till att de passerar in ett argument (CREATIVE)
  2. se till att deras kommando var "gm"

Vi genomförde dessa kontroller med: args.length == 1 && label.equalsIgnoreCase ("gm")

Nu vet vi säkert att spelaren skrev "/ gm x".

Nästa sak vi behöver göra är att göra args [0] till ett GameMode-objekt så att vi kan tillämpa det på spelaren. Detta kan göras med GameMode.valueOf (String) Enligt Java-uppräkningsdokumentationen, om en sträng överförs till valueOf () som inte matchar en uppräkning, kommer den att kasta en IllegalArgumentException - så vi måste se till att fånga det.

När vi har spelmoden kan vi gå vidare och helt enkelt använda p.setGameMode (gm) och spelarens spelmodem kommer att ändras. I det fall att vi fick ett undantag - skriver vi helt enkelt ut ett uttalande och returnerar falskt.

@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;
}

Kommando inte i huvudklass

Om du har många kommandon bör du inte lägga dem alla i huvudklassen.

  1. Gör en ny klass och CommandExecutor den implementera CommandExecutor

  2. Lägg till följande i klassen:

     @Override 
     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    
     }
    
  3. I din huvudklass lägger du till onEnable (ersätt kommandot Namn med kommandot och CommandExecutor med klassens namn):

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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow