User Tools

Site Tools


ru:tutorial:commands:exceptions

Исключения

Примечание: статья в разработке.

Brigadier поддерживает исключения команд, которые могут быть использованы для завершения команды, например, если аргумент не был проанализирован должным образом или команда не была выполнена, а также включает более подробную информацию о сбое.

Все исключения из Brigadier основаны на CommandSyntaxException. Два основных типа исключений, предоставляемых Brigadier, - это динамические и простые типы исключений, из которых вы должны создать (create()) исключение, чтобы вызвать его. Эти исключения также позволяют вам указать контекст, в котором было вызвано исключение, используя createWithContext(ImmutableStringReader), который создает сообщение об ошибке, указывающее, где во введенной командной строке произошла ошибка. Ниже приведена команда подбрасывания монеты, чтобы показать пример используемых исключений:

  1. dispatcher.register(CommandManager.literal("coinflip")
  2. .executes(ctx -> {
  3. Random random = new Random();
  4.  
  5. if(random.nextBoolean()) { // Если выпал орёл
  6. ctx.getSource().sendMessage(new TranslatableText("coin.flip.heads"))
  7. return Command.SINGLE_SUCCESS;
  8. }
  9.  
  10. throw new SimpleCommandExceptionType(new TranslatableText("coin.flip.tails")).create(); // Решка - ты проиграл.
  11. }));

Хотя вы не ограничены только одним типом исключения, поскольку Brigadier также предоставляет динамические исключения, которые принимают дополнительные параметры для контекста:

  1. DynamicCommandExceptionType used_name = new DynamicCommandExceptionType(name -> {
  2. return new LiteralText("Имя: " + (String) name + " было использовано");
  3. });

Существует больше динамических типов исключений, каждый из которых учитывает разное количество аргументов (Dynamic2CommandExceptionType, Dynamic3CommandExceptionType, Dynamic4CommandExceptionType, DynamicNCommandExceptionType). Вы должны помнить, что динамические исключения принимают объект в качестве аргумента, поэтому вам, возможно, придется привести аргумент для вашего использования.

ru/tutorial/commands/exceptions.txt · Last modified: 2022/03/03 12:05 by 127.0.0.1