Иконка ресурса

Бригадир 2020-11-30

Нет прав для скачивания
29
20
Workbench61 добавил(а) новый ресурс:

Бригадир - Бэкпорт новейшей системы команд

Создание команд на версиях 1.13+ великолепно, писать команды на 1.7.10 - боль.
Этот мод является реализацией Mojang/brigadier для устаревших версий майна. В данный момент поддерживается простейший функционал, такой как автоподстановка, в будущем планируется поддержка 1.12.2 и улучшение мода в виде использования локализации для встроенных исключений, информация по использованию команды, бэкпорт графических фичей.
Обычные команды никуда не...

Узнать больше об этом ресурсе...
 

tox1cozZ

aka Agravaine
Модератор
7,516
484
2,336
А можно пару пример? Не пишу на 1.13 и не особо хочется копаться в нем, а вот глянуть это в действии интересно, вдруг заберу)
 
29
20
Самый базовый пример.
С помощью requires можно определить права для каждого отдельного литерала.
У литералов аргументов есть метод suggests.
Чтобы создать псевдоним для команды, literal("mycmd").redirect(...) в редирект передаем то что получили ниже.
Еще есть методы fork и forward но я не знаю как они работают, не сталкивалась с ними.

Java:
literal("mycommand")
    .executes(ctx -> {
        ctx.getSource().addChatMessage(new ChatComponentText(
                "Привет, это моя команда."
        ));
        // возвращает число успешных выполнений команды
        return 1;
    })
    .then(
        literal("find")
            .then(
                argument("player", StringArgumentType.word())
                    .executes(ctx -> {
                        final String playerName = ctx.getArgument("player", String.class);

                        ctx.getSource().addChatMessage(new ChatComponentText(
                                "Вы хотите найти игрока " + playerName
                        ));

                        return 1;
                    })
            )
    )
    .then(
        literal("supersecret")
            .requires(sender -> {
                return sender instanceof MinecraftServer;
            })
            .executes(ctx -> {
                ctx.getSource().addChatMessage(new ChatComponentText(
                        "Только сервер может видеть и выполнять это команду"
                ));

                return 1;
            })
    )
    .then(
        literal("throw")
            .executes(context -> {
                throw new CommandException("Можете использовать старые исключения");
            })
    );
В итоге получим команду /mycomand [find <player> | supersecret | throw]
Которая будет выполняться как с подкомандами так и без них.

В этой же библиотеке существуют свои виды исключений, но они создаются довольно странно. Они кастомизируемые и предполагается что вы будете их хранить гдето в переменной. Больше примеров в классе BuiltInExceptions.
Java:
final SimpleCommandExceptionType error = new SimpleCommandExceptionType(new LiteralMessage("error"));
throw error.create();

final Dynamic2CommandExceptionType error2 = new Dynamic2CommandExceptionType((a, b) -> new LiteralMessage("error a: " + a + " b: " + b));
throw error2.create("hello", "world");
 
29
20
Еще аргумент строк StringArgumentType.string() будет искать строчку в кавычках тоесть "можно делать аргумент с пробелами" в середине команды
 
Сверху