Исключения
Примечание: статья в разработке.
Brigadier поддерживает исключения команд, которые могут быть использованы для завершения команды, например, если аргумент не был проанализирован должным образом или команда не была выполнена, а также включает более подробную информацию о сбое.
Все исключения из Brigadier основаны на CommandSyntaxException
. Два основных типа исключений, предоставляемых Brigadier, - это динамические и простые типы исключений, из которых вы должны создать (create()
) исключение, чтобы вызвать его. Эти исключения также позволяют вам указать контекст, в котором было вызвано исключение, используя createWithContext(ImmutableStringReader)
, который создает сообщение об ошибке, указывающее, где во введенной командной строке произошла ошибка.
Ниже приведена команда подбрасывания монеты, чтобы показать пример используемых исключений:
dispatcher.register(CommandManager.literal("coinflip") .executes(ctx -> { if(random.nextBoolean()) { // Если выпал орёл ctx.getSource().sendMessage(new TranslatableText("coin.flip.heads")) return Command.SINGLE_SUCCESS; } throw new SimpleCommandExceptionType(new TranslatableText("coin.flip.tails")).create(); // Решка - ты проиграл. }));
Хотя вы не ограничены только одним типом исключения, поскольку Brigadier также предоставляет динамические исключения, которые принимают дополнительные параметры для контекста:
DynamicCommandExceptionType used_name = new DynamicCommandExceptionType(name -> { });
Существует больше динамических типов исключений, каждый из которых учитывает разное количество аргументов (Dynamic2CommandExceptionType
, Dynamic3CommandExceptionType
, Dynamic4CommandExceptionType
, DynamicNCommandExceptionType
).
Вы должны помнить, что динамические исключения принимают объект в качестве аргумента, поэтому вам, возможно, придется привести аргумент для вашего использования.