Szukaj…


Składnia

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

Obsługa polecenia

Aby obsłużyć polecenie, musisz mieć klasę, która implementuje interfejs CommandExecutor. Klasa JavaPlugin (główna klasa wtyczki) już to implementuje.

Podczas implementowania interfejsu CommandExecutor należy zaimplementować następującą metodę:

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

}

Sender to ten, który wysłał polecenie. Może to być odtwarzacz lub konsola.

CMD to polecenie, którego słuchasz, jak zadeklarowano w plugin.yml. Nie mylić z etykietą.

label to alias używany do wykonania tego polecenia, to jest to, co nadawca pisze po ukośniku.

wreszcie argumenty to argumenty, które nadawca mógł użyć do wysłania polecenia.

Możliwe polecenie może brzmieć jak

/ powiedz Kerooker Cześć, Kerooker!

Tell będzie twoją etykietą i może być również zdefiniowane jako twoje polecenie, jeśli powiesz tak w plugin.yml;

„Kerooker”, „Cześć”, „Kerooker!” są odpowiednio Twoimi argumentami 0, 1 i 2

W zamian, prawdopodobnie zawsze będziesz chciał powrócić do prawdy, gdy spodziewałeś się, że wszystko się wydarzy w ten sposób. Powinieneś zwrócić false, jeśli chcesz pokazać nadawcy użycie polecenia zdefiniowanego w plugin.yml

Prosty zestaw komend GameMode (/ gm )

Ten przykład pokazuje bardzo podstawowy przykład wykorzystania onCommand. Nie sugeruję przetwarzania twoich poleceń bezpośrednio w onCommand, ale to załatwia sprawę w tym prostym przypadku.

W tym przykładzie próbujemy ustawić tryb gry gracza.

Pierwszą rzeczą, którą musimy zrobić, to upewnić się, że nadawca nie jest ConsoleCommandSender, ponieważ nie możemy ustawić trybu gry konsoli. Odbywa się to za pomocą (sender instanceof Player).

Następnie chcemy, aby gracz napisał / gm CREATIVE (lub jakikolwiek inny tryb gry), więc musimy sprawdzić 2 rzeczy:

  1. upewnij się, że przekazują 1 argument (TWÓRCZY)
  2. upewnij się, że ich polecenie brzmiało „gm”

Przeprowadziliśmy te kontrole za pomocą: args.length == 1 && label.equalsIgnoreCase („gm”)

Teraz wiemy na pewno, że odtwarzacz napisał „/ gm x”.

Następną rzeczą, którą musimy zrobić, to zmienić argumenty [0] w obiekt GameMode, abyśmy mogli zastosować go do odtwarzacza. Można to zrobić za pomocą GameMode.valueOf (String) Jednak zgodnie z dokumentacją wyliczenia Java, jeśli ciąg znaków zostanie przekazany do valueOf (), która nie pasuje do wyliczenia, spowoduje zgłoszenie wyjątku IllegalArgumentException - więc musimy upewnić się, że Złap to.

Gdy już mamy tryb gry, możemy przejść dalej i po prostu użyć p.setGameMode (gm), a tryb gry zmieni się. W przypadku, gdy złapaliśmy wyjątek - po prostu drukujemy oświadczenie i zwracamy wartość 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;
}

Dowództwo nie w klasie głównej

Jeśli masz wiele poleceń, nie powinieneś umieszczać ich wszystkich w klasie głównej.

  1. Utwórz nową klasę i CommandExecutor wdrożenie CommandExecutor

  2. Dodaj następujące elementy do klasy:

     @Override 
     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    
     }
    
  3. W swojej głównej klasie dodaj onEnable (zamień commandName na nazwę polecenia i CommandExecutor na nazwę klasy):

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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow