Аргументы команд 26.1.2
Узнайте, как создавать команды со сложными аргументами.
Большинство команд используют аргументы. Иногда они могут быть необязательными, что означает, что команда выполнится, даже если вы не предоставите этот аргумент. Один узел может иметь несколько типов аргументов, но будьте внимательны, чтобы избежать неоднозначности.
java
No lines matched.1
java
No lines matched.1
В этом случае после текста команды /command_with_arg следует ввести целое число. Например, если вы запустите /command_with_arg 3, вы получите сообщение:
Вызывается /command_with_arg со значением = 3
Если ввести /command_with_arg без аргументов, команду не удастся правильно обработать.
Далее мы добавим необязательный второй аргумент:
java
No lines matched.1
java
No lines matched.1
Теперь вы можете указать одно или два целых числа. Если вы укажете одно число, будет выведено сообщение с одним значением. Если вы укажете два числа, будет выведено сообщение с двумя значениями.
Возможно, вам покажется излишним дважды указывать схожие исполнения. Поэтому мы можем создать метод, который будет использоваться в обоих случаях.
java
No lines matched.1
java
No lines matched.1
Собственные типы аргументов
Если в стандартной библиотеке нет нужного вам типа аргументов, вы можете создать свой. Для этого нужно создать класс, который наследуется от интерфейса ArgumentType<T>, где T — это тип аргумента.
Вам нужно будет реализовать метод parse, который преобразует входную строку в нужный тип.
Например, вы можете создать тип аргумента, который преобразует строку в BlockPos с форматом: {x, y, z}
java
No lines matched.1
Регистрация своих типов аргументов
WARNING
Cвой тип аргументов должен быть зарегистрирован как на сервере, так и на клиенте, иначе команда не будет работать!
Вы можете зарегистрировать свой собственный тип аргумента в методе onInitialize вашего инициализатора мода, используя класс ArgumentTypeRegistry:
java
No lines matched.1
Использование своих типов аргументовs
Мы можем использовать наш собственный тип аргумента в команде, передав его экземпляр в метод .argument при создании команды.
java
No lines matched.1
java
No lines matched.1
Выполнив команду, мы можем проверить, работает ли наш тип аргумента:



