🇺🇦 Українська (Ukrainian - Ukraine)
🇺🇦 Українська (Ukrainian - Ukraine)
Зовнішній вигляд
🇺🇦 Українська (Ukrainian - Ukraine)
🇺🇦 Українська (Ukrainian - Ukraine)
Зовнішній вигляд
Ця сторінка написана для версії:
1.21
Ця сторінка написана для версії:
1.21
Minecraft має потужну систему пропозицій команд, що використовується у багатьох місцях, таких як команда /give
. Ця система дозволяє пропонувати гравцю значення аргументу, які вони можуть вибрати, що є гарним засобом створення більш зручних та ергономічних команд.
Клас SuggestionProvider
використовується для створення списку пропозицій, які будуть надіслані гравцю. Постачальник пропозицій - це функція, що приймає об'єкти CommandContext
та SuggestionBuilder
, та повертає об'єкт Suggestions
. SuggestionProvider
повертає об'єкт CompletableFuture
тому, що пропозиції можуть бути не доступні відразу.
Для використання постачальника пропозицій треба викликати метод suggests
в об'єкта ArgumentBuilder
. Цей метод приймає об'єкт SuggestionProvider
та повертає свій ArgumentBuilder
з доданим постачальником пропозицій.
CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> {
dispatcher.register(CommandManager.literal("command_with_suggestions").then(
CommandManager.argument("entity", RegistryEntryReferenceArgumentType.registryEntry(registryAccess, RegistryKeys.ENTITY_TYPE))
.suggests(SuggestionProviders.SUMMONABLE_ENTITIES)
.executes(FabricDocsReferenceCommands::executeCommandWithSuggestions)
));
});
private static int executeCommandWithSuggestions(CommandContext<ServerCommandSource> context) throws CommandSyntaxException {
var entityType = RegistryEntryReferenceArgumentType.getSummonableEntityType(context, "entity");
context.getSource().sendFeedback(() -> Text.literal("Called /command_with_suggestions with entity = %s".formatted(entityType.value().getUntranslatedName())), false);
return 1;
}
Minecraft надає декілька вбудованих постачальників пропозицій:
Постачальник | Опис |
---|---|
SuggestionProviders.SUMMONABLE_ENTITIES | Пропонує всі істоти, що можуть бути викликані. |
SuggestionProviders.AVAILABLE_SOUNDS | Пропонує всі звуки, що можуть бути зіграні. |
LootCommand.SUGGESTION_PROVIDER | Пропонує всі доступні таблиці здобичі. |
SuggestionProviders.ALL_BIOMES | Пропонує всі доступні біоми. |
Якщо вбудовані постачальники пропозицій не підходять, ви можете створити свій постачальник. Для цього треба створити клас, який реалізує інтерфейс SuggestionProvider
і перевизначає метод getSuggestions
.
Для цього прикладу ми зробимо постачальник, який пропонує імена гравців на сервері.
public class PlayerSuggestionProvider implements SuggestionProvider<ServerCommandSource> {
@Override
public CompletableFuture<Suggestions> getSuggestions(CommandContext<ServerCommandSource> context, SuggestionsBuilder builder) throws CommandSyntaxException {
ServerCommandSource source = context.getSource();
// Thankfully, the ServerCommandSource has a method to get a list of player names.
Collection<String> playerNames = source.getPlayerNames();
// Add all player names to the builder.
for (String playerName : playerNames) {
builder.suggest(playerName);
}
// Lock the suggestions after we've modified them.
return builder.buildFuture();
}
}
Щоб скористатися цим постачальником, треба просто передати його об'єкт у метод .suggests
у ArgumentBuilder
.
CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> {
dispatcher.register(CommandManager.literal("command_with_custom_suggestions").then(
CommandManager.argument("player_name", StringArgumentType.string())
.suggests(new PlayerSuggestionProvider())
.executes(FabricDocsReferenceCommands::executeCommandWithCustomSuggestions)
));
});
private static int executeCommandWithCustomSuggestions(CommandContext<ServerCommandSource> context) {
String name = StringArgumentType.getString(context, "player_name");
context.getSource().sendFeedback(() -> Text.literal("Called /command_with_custom_suggestions with value = %s".formatted(name)), false);
return 1;
}
Звісно, що постачальники пропозицій можуть бути складнішими, оскільки вони також можуть зчитувати контекст команди та надавати пропозиції на основі її стану - наприклад, аргументи, що вже були надані.
Це може також зчитувати інвентар гравця та пропонувати предмети, або сутностей, які неподалік від гравця.