====== Исключения ======
**Примечание:** статья в разработке.
Brigadier поддерживает исключения команд, которые могут быть использованы для завершения команды, например, если аргумент не был проанализирован должным образом или команда не была выполнена, а также включает более подробную информацию о сбое.
Все исключения из Brigadier основаны на ''CommandSyntaxException''. Два основных типа исключений, предоставляемых Brigadier, - это динамические и простые типы исключений, из которых вы должны создать (''create()'') исключение, чтобы вызвать его. Эти исключения также позволяют вам указать контекст, в котором было вызвано исключение, используя ''createWithContext(ImmutableStringReader)'', который создает сообщение об ошибке, указывающее, где во введенной командной строке произошла ошибка.
Ниже приведена команда подбрасывания монеты, чтобы показать пример используемых исключений:
dispatcher.register(CommandManager.literal("coinflip")
.executes(ctx -> {
Random random = new Random();
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 -> {
return new LiteralText("Имя: " + (String) name + " было использовано");
});
Существует больше динамических типов исключений, каждый из которых учитывает разное количество аргументов (''Dynamic2CommandExceptionType'', ''Dynamic3CommandExceptionType'', ''Dynamic4CommandExceptionType'', ''DynamicNCommandExceptionType'').
Вы должны помнить, что динамические исключения принимают объект в качестве аргумента, поэтому вам, возможно, придется привести аргумент для вашего использования.