Budowa komendy

The first step is to get a new CommandSpec builder. The builder provides methods to modify the command help messages, command arguments and the command logic. These methods can be chained.

To finally build the command, you’ll want to call the CommandSpec.Builder#build() method.

Po tym musisz zarejestrować polecenie.

Przykład: Tworzenie prostej komendy

import org.spongepowered.api.Sponge;
import org.spongepowered.api.text.Text;
import org.spongepowered.api.command.spec.CommandSpec;

CommandSpec myCommandSpec = CommandSpec.builder()
    .description(Text.of("Hello World Command"))
    .permission("myplugin.command.helloworld")
    .executor(new HelloWorldCommand())
    .build();

Sponge.getCommandManager().register(plugin, myCommandSpec, "helloworld", "hello", "test");

Przegląd metod konstruktora CommandSpec

Metoda

Opis

wykonawca

Defines the command logic (See Writing a Command Executor).

„Ustawienie wykonawcy jest wymagane” Jeśli żadne dziecięce komendy nie są ustawione.

argumenty

Ustawia specyfikację argumentu dla tej komendy (Zobacz argumenty :doc:).

uprawnienie

Ustaw uprawnienie które będzie sprawdzane przed użyciem tego polecenia.

opis

Krótki, jednolinijkowy opis celu tej komendy, który będzie wyświetlony przez system pomocy.

rozszeronyOpis

Ustawia rozszerzony opis możliwy do użycia w dłuższych ofertach pomocy. Zostanie dołączony do krótkiego opisu.

dziecko

Dodaje komendę dziecięcą do tej komendy z jejo aliasami (Zobacz komendydziecięce).

dzieci

Ustawia komendy dziecięce dla tej komendy z jej aliasami (Zobacz komendydziecięce).

inputTokenizer

Definiuje, jak argumenty będą analizowane. Domyślnie analizator składni dzieli dane wejściowe polecenia poprzez miejsce. Oferty liczyć jako pojedyńczy argument.

Przykład: /tpworld wycięcię "Mój Świat" spowodowałoby dwa argumenty: ``Wycięcie i Mój Świat.

budowa

Buduje polecenie. Po tym musisz zarejestrować polecenia.

Pisanie egzekutora poleceń

Jedynym wymaganym elementem w tworzeniu prostej komendy jest klasa wykonawcy komend, która zawiera logikę komendy.

The class has to implement the CommandExecutor interface, which defines the CommandExecutor#execute(CommandSource, CommandContext) method. The method is called on command execution and has two arguments:

  • Źródło wywołania komendy (np. konsola, blok komend lub odtwarzacz)

  • The command context object, which contains the parsed arguments (See Argumenty przetwarzania)

Przykład: Prosty egzekutor poleceń

import org.spongepowered.api.command.CommandException;
import org.spongepowered.api.command.CommandResult;
import org.spongepowered.api.command.CommandSource;
import org.spongepowered.api.command.args.CommandContext;
import org.spongepowered.api.command.spec.CommandExecutor;

public class HelloWorldCommand implements CommandExecutor {

    @Override
    public CommandResult execute(CommandSource src, CommandContext args) throws CommandException {
        src.sendMessage(Text.of("Hello World!"));
        return CommandResult.success();
    }
}

Wskazówka

You can use anonymous classes to define the command executor in the command build process (See the example in the Argumenty przetwarzania page).

Komendy tylko dla gracza

Czasami niezbędne jest wykonywanie komend tylko przez graczy (np. komenda suicide).

Perform an instanceof check to determine the type of the CommandSource:

import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.command.source.CommandBlockSource;
import org.spongepowered.api.command.source.ConsoleSource;

if(src instanceof Player) {
    Player player = (Player) src;
    player.sendMessage(Text.of("Hello " + player.getName() + "!"));
}
else if(src instanceof ConsoleSource) {
    src.sendMessage(Text.of("Hello GLaDOS!"));
    // The Cake Is a Lie
}
else if(src instanceof CommandBlockSource) {
    src.sendMessage(Text.of("Hello Companion Cube!"));
    // <3
}

Informacja

Rekomendujemy dodać dodatkowy argument [player] `` aby zmodyfikować komendę na **console-friendly** (np. ``/suicide [player]).

Najłatwiejszym rozwiązaniem dla tego jest dodanie elementu polecenia playerOrSource (Zobacz argumenty).

Wyniki polecenia

The CommandExecutor#execute() method must always return a CommandResult. In most cases it is sufficient to return CommandResult#success() if the command was successful or CommandResult#empty() if it wasn’t. In cases where more information needs to be conveyed, a CommandResult#builder() should be used. The builder provides the several various methods that accepts an integer and will set the attribute of the same name. All attributes that are not set by the builder will be empty.

Bloki komend mogą używać tych wartości do modyfikowania statystyk tablic wyników, które potem mogą być używane do opracowania konstrukcji składających się z wielu bloków komend. Poradnik o dostępie do danych można znaleźć tutaj <https://minecraft.gamepedia.com/Tutorials/Command_stats> `_.

Przykład: Budowa CommandResult

CommandResult result = CommandResult.builder()
    .affectedEntities(42)
    .successCount(1)
    .build();

This example uses a builder to create a CommandResult for a command which affected 42 entities and was successful.

Obsługa błędów

The execute() method may also throw a CommandException, signaling that an error occured while trying to execute the command. If such an Exception is thrown, its message will be displayed to the command source, formatted as an error. Also, the commands usage message will be displayed. An ArgumentParseException, a subtype of CommandException is automatically thrown if the commands arguments could not be parsed.