🇷🇺 Русский (Russian)
🇷🇺 Русский (Russian)
Внешний вид
🇷🇺 Русский (Russian)
🇷🇺 Русский (Russian)
Внешний вид
This page is written for:
1.20.4
This page is written for:
1.20.4
Большинство команд используют аргументы. Иногда они могут быть необязательными, что означает, что команда выполнится, даже если вы не предоставите этот аргумент. Один узел может иметь несколько типов аргументов, но будьте внимательны, чтобы избежать неоднозначности.
No lines matched.
В этом примере после текста команды /argtater
следует указать целое число. Например, если вы выполните команду /argtater 3
, вы получите сообщение «Вызвано /argtater с значением = 3». Если вы выполните /argtater
без аргументов, команда не будет правильно распознана.
Далее мы добавим необязательный второй аргумент:
No lines matched.
Теперь вы можете указать одно или два целых числа. Если вы укажете одно число, будет выведено сообщение с одним значением. Если вы укажете два числа, будет выведено сообщение с двумя значениями.
Возможно, вам покажется излишним дважды указывать схожие исполнения. Поэтому мы можем создать метод, который будет использоваться в обоих случаях.
No lines matched.
Если в стандартной библиотеке нет нужного вам типа аргументов, вы можете создать свой. Для этого нужно создать класс, который наследуется от интерфейса ArgumentType<T>
, где T
— это тип аргумента.
Вам нужно будет реализовать метод parse
, который преобразует входную строку в нужный тип.
Например, вы можете создать тип аргумента, который преобразует строку в BlockPos
с форматом: {x, y, z}
public class BlockPosArgumentType implements ArgumentType<BlockPos> {
/**
* Parse the BlockPos from the reader in the {x, y, z} format.
*/
@Override
public BlockPos parse(StringReader reader) throws CommandSyntaxException {
try {
// This requires the argument to be surrounded by quotation marks.
// eg: "{1, 2, 3}"
String string = reader.readString();
// Remove the { and } from the string using regex.
string = string.replace("{", "").replace("}", "");
// Split the string into the x, y, and z values.
String[] split = string.split(",");
// Parse the x, y, and z values from the split string.
int x = Integer.parseInt(split[0].trim());
int y = Integer.parseInt(split[1].trim());
int z = Integer.parseInt(split[2].trim());
// Return the BlockPos.
return new BlockPos(x, y, z);
} catch (Exception e) {
// Throw an exception if anything fails inside the try block.
throw CommandSyntaxException.BUILT_IN_EXCEPTIONS.dispatcherParseException().create("Invalid BlockPos format. Expected {x, y, z}");
}
}
}
WARNING
Необходимо зарегистрировать свой тип аргументов как на сервере, так и на клиенте, иначе команда не будет работать!
Вы можете зарегистрировать свой тип аргументов в методе onInitialize
вашего инициализатора мода, используя класс ArgumentTypeRegistry
:
No lines matched.
Мы можем использовать наш собственный тип аргумента в команде, передав его экземпляр в метод .argument
при создании команды.
No lines matched.
Выполнив команду, мы можем проверить, работает ли наш тип аргумента: