Giter VIP home page Giter VIP logo

bukkitcommands's Introduction

BukkitCommands - API komend do silnika Bukkit.

BukkitCommands to API komend dla Bukkit wyciągnięte z biblioteki Commons. API idealnie pasuje do dużych i małych projektów ze względu na jego prostotę i zwięzłość kodu. Wszystko opiera się na adnotacji @CommandInfo w której to definiuje się wszystkie parametry danej komendy. Biblioteka BukkitCommands wymaga inicjalizacji najlepiej przy włączaniu pluginu. Należy użyć abstrakcyjnej klasy Commands do zdefiniowania swojej zmiennej. Implementacją musi być BukkitCommons, który odpowiada za wstrzykiwanie komend do silnika serwera oraz tworzenia strony pomocy. W parametrze konstruktora BukkitCommands należy podać Plugin na którym mają rejestrować się komendy. W tym miejscu należy podać referencję do głównej klasy pluginu.

Przykładowa inicjalizacja:

@Override
public void onEnable() {
    Commands commands = new BukkitCommands(this);
}

Komenda

Tak jak wspomniałem powyżej wszystkie komendy opierają się o adnotację. Do każdej komendy należy przypisać metodę. Metoda ta powinna być metodą void z parametrami CommandSender oraz CommandContext. CommandSender jest obiektem wykonującym komendę znanym już z API Bukkit'a. CommandSender może być to jednocześnie blokiem komend (command block), konsola lub gracz. Uważaj więc z castowaniem CommandSendera do Player!

Nazwa metody jest dowolna, aczkolwiek dla dobrej identyfikacji dla programisty powinna zawierać nazwę komendy. Każda metoda musi zostać udekorowana adnotacją @CommandInfo. Poniżej przedstawię klucze tych adnotacji, opis oraz przykładowe wartości dla komendy /teleportto.

Specyfikacja @CommandInfo (porządek alfabetyczny):

Klucz Opis Przykładowa wartość Dodatkowe
(String[]) name Nazwy (aliasy) komend name = {"teleportto", tpt} Parametr wymagany
(String) description Opis komendy description = "Teleportuj siebie do innego gracza" Zaleca się ustawienie
(int) min Minimalna ilość argumentów min = 1 Domyślna wartość = 0
(String[]) flags Flagi które mają zostać sparsowane flags = "silent" Domyślnie puste
(String) usage Użycie komendy usage = "[-silent] <player>" Podaje się tylko parametry! Domyślnie puste
(boolean) userOnly false - komenda także dla konsoli userOnly = true Domyślnie false
(String) permission Uprawnienie do komendy permission = "example.teleporttp" Uprawnienia zostaną sprawdzone! Domyślnie puste
(String) completer Nazwa metody tab-completera completer = "teleportToCompleter" Metoda musi być w tej samej klasie! Domyślnie puste

Powyższe wartości podają następującą adnotację.

@CommandInfo(
        name = {"teleportto", tpt},
        description = "Teleportuj siebie do innego gracza",
        min = 1,
        flags = "silent",
        usage = "[-silent] <player>",
        userOnly = true,
        permission = "example.teleportto",
        completer = "teleportToCompleter")
public void teleportToCommand(CommandSender sender, CommandContext context) {
    // ...
}

CommandContext

CommandContext odpowiada za całą komendę oraz podane w niej argumentów. Klasa ta oferuje bogaty system pobierania wartości z flag oraz parametrów różnego typu. Każdą z metod opisze poniżej w tabeli.

Specyfikacja CommandContext (porządek alfabetyczny):

Metoda Zwraca
(String[]) getArgs() Surowe argumenty komendy (z Bukkit)
(Command) getCommand() Command reprezentujące komendę
(String) getFlag(String flag) Flaga w komendzie jako String, null jeżeli jej brak
(String) getFlag(String flag, String def) Flaga w komendzie jako String, def jeżeli jej brak
(boolean) getFlagBoolean(String flag) Flaga w komendzie jako boolean, false jeżeli jej brak lub bład konwersji typu
(boolean) getFlagBoolean(String flag, boolean def) Flaga w komendzie jako boolean, def jeżeli jej brak lub bład konwersji typu
(double) getFlagDouble(String flag) Flaga w komendzie jako double, 0.0 jeżeli jej brak lub bład konwersji typu
(double) getFlagDouble(String flag, double def) Flaga w komendzie jako double, def jeżeli jej brak bład konwersji typu
(int) getFlagInt(String flag) Flaga w komendzie jako int, 0 jeżeli jej brak lub bład konwersji typu
(int) getFlagInt(String flag, int def) Flaga w komendzie jako int, def jeżeli jej brak lub bład konwersji typu
(Set) getFlags() Set wszystkich sparsowanych flag
(String) getLabel() Dokładna nazwa komendy która została wpisana przez wysyłającego
(String) getParam(int index) Parametr komendy jako String, null jeżeli go brak
(String) getParam(int index, String def) Parametr komendy jako String, def jeżeli go brak
(boolean) getParamBoolean(String flag) Parametr komendy jako boolean, false jeżeli go brak lub błąd konwersji typu
(boolean) getParamBoolean(String flag, boolean def) Parametr komendy jako boolean, def jeżeli go brak lub błąd konwersji typu
(double) getParamDouble(String flag) Parametr komendy jako double, 0.0 jeżeli go brak lub błąd konwersji typu
(double) getParamDouble(String flag, double def) Parametr jako int, def jeżeli go brak lub błąd konwersji typu
(int) getParamInt(String flag) Parametr komendy jako int, 0 jeżeli go brak lub błąd konwersji typu
(int) getParamInt(String flag, int def) Parametr komendy jako int, def jeżeli go brak lub błąd konwersji typu
(String) getParams(int from) Złączone parametry komendy jako String od from do końca parametrów, null jeżeli ich brak
(String) getParams(int from, int to) Złączone parametry komendy jako String od from do to, null jeżeli ich brak
(boolean) hasFlag(String flag) true jeżeli wysyłający podał flagę flag
(boolean) hasFlagValue(String flag) true jeżeli wysyłający podał wartość fladze flag

Wyjątki

Biblioteka dla prostszego wysyłania błędów posiada system wyjątków. Rzucenie wyjątkiem spowoduje zakończenie wykonywania metody oraz wysłanie błędu użytkownikowi. BukkitCommons opiera się o następujące wyjątki.

Specyfikacja wyjątków (porządek alfabetyczny):

  • CommandException - prosty błąd - w parametrze należy podać powód, który zostanie wysłany wysyłającemu.
  • CommandConsoleException - błędny wysyłający - true w parametrze gdy wysyłający jest graczem.
  • CommandPermissionException - brak uprawnienia - opcjonalna nazwa uprawnienia w parametrze.
  • CommandUsageException - zbyt mało lub złe argumenty - w parametrze należy podać powód, który zostanie wysłany wysyłającemu.
  • NumberFormatException - błędny format liczby

Uwaga! Każdy inny wyjątek wyświetli naganny błąd wysyłającemu oraz log w konsoli!


Flagi

BukkitCommands posiada system flag. Użycie flag opiera się na dwie możliwości; tj. użycie flagi oraz przesłanie wartości poprzez flagę. Flagę tworzy się poprzez porzedzenie jej nazwy myślnikiem - /example -flag, na przykład /tpt -silent Jeb_. Każdej fladze można nadać wartość poprzez podanie jej w znakach cytatu - /example -flag "flag value". Wartości mogą być oddzielone znakiem odstępu.

Każda flaga musi zostać podana w adnotacji w komendy. W innym przypadku nie zostanie ona sparsowana, a będzie podana jako parametr.

@CommandInfo(
        ...
        flags = {"ip", "uuid"},
        ...)
public void playerInfoCommand(CommandSender sender, CommandContext context) {
    // ...
}

Operowanie flagami poprzez pobieranie ich wartości znajduje się w klasie CommandContext podanej jako parametr każdej komendy.


Auto-uzupełnianie

Biblioteka posiada także auto-uzupełnianie argumentów komendy poprzez tabulację. Aby do komendy dodać auto-uzupełnianie wystarczy do adnotacji w completer nazwę metody, która zwróci List<String> lub null oraz za parametry weźmie CommandSender oraz CommandContext. Trzeba pamiętać o tym, że metoda auto-uzupełniania musi znaleźć się w tej samej klasie co komenda!

@CommandInfo(
        ...
        completer = "pluginInfoCompleter",
        ...
)
public void pluginInfoCommand(CommandSender sender, CommandContext context) {
    // ...
}

public List<String> pluginInfoCompleter(CommandSender sender, CommandContext context) {
    // ...
}

Rejestracja

Aby zarejestrować komendę wystarczy w Commands użyć registerCommandObject(...), a w parametrze podać obiekt w której ta komenda się znajduje. Jeżeli komenda są statyczne należy użyć metody registerCommandClass(...), natomiast w parametrze podać klasę w której ta komenda się znajduje. Obie możliwości pobiorą wszystkie możliwe komendy i zarejestrują je w silniku.

Commands commands = new BukkitCommands(this); // inicjalizacja w onEnable()
commands.registerCommandObject(new ExampleCommands());

lub gdy komendy są statyczne

Commands commands = new BukkitCommands(this); // inicjalizacja w onEnable()
commands.registerCommandClass(ExampleCommands.class);

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.