🇮🇹 Italiano (Italian)
🇮🇹 Italiano (Italian)
Aspetto
🇮🇹 Italiano (Italian)
🇮🇹 Italiano (Italian)
Aspetto
Questa pagina si applica alla versione:
1.21
Questa pagina si applica alla versione:
1.21
Minecraft ha un potente sistema di suggerimento comandi che viene usato in molti posti, come nel comando /give
. Questo sistema ti permette di suggerire valori per argomenti dei comandi all'utente, da cui possono poi selezionare - è un ottimo modo per rendere i tuoi comandi più user-friendly ed ergonomici.
Un SuggestionProvider
viene usato per creare una lista di suggerimenti che verrà mandata al client. Un provider di suggerimenti è un'interfaccia funzionale che prende un CommandContext
e un SuggestionBuilder
e restituisce alcune Suggestions
. Il SuggestionProvider
restituisce un CompletableFuture
siccome i suggerimenti potrebbero non essere disponibili immediatamente.
Per usare un provider di suggerimenti, devi chiamare il metodo suggests
nel costruttore di argomenti. Questo metodo prende un SuggestionProvider
e restituisce il costruttore di argomenti modificato con l'aggiunta del suggestion provider.
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;
}
Ci sono alcuni provider di suggerimenti predefiniti che puoi usare:
Provider di Suggerimenti | Descrizione |
---|---|
SuggestionProviders.SUMMONABLE_ENTITIES | Suggerisce tutte le entità che possono essere evocate. |
SuggestionProviders.AVAILABLE_SOUNDS | Suggerisce tutti i suoni che possono essere riprodotti. |
LootCommand.SUGGESTION_PROVIDER | Suggerisce tutte le loot table disponibili. |
SuggestionProviders.ALL_BIOMES | Suggerisce tutti i biomi disponibili. |
Se un provider predefinito non soddisfa i tuoi requisiti, puoi creare il tuo provider di suggerimenti personalizzato. Per fare questo, devi creare una classe che implementa l'interfaccia SuggestionProvider
e fare override del metodo getSuggestions
.
Per questo esempio, creeremo un provider di suggerimenti che suggerisce tutti i nomi utente dei giocatori sul server.
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();
}
}
Per usare questo provider di suggerimenti, passeresti semplicemente una sua istanza al metodo .suggests
nel costruttore di comandi.
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;
}
Ovviamente, i provider di suggerimenti possono essere più complessi, siccome possono anche leggere il contesto dei comandi per fornire suggerimenti basati sullo stato del comando - per esempio quali argomenti sono già stati forniti.
Ciò potrebbe essere ad esempio leggere l'inventario del giocatore e suggerire oggetti, o entità che sono vicine al giocatore.