Skip to content

Suggerimenti di Comandi

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.

Provider di Suggerimenti

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.

Usare i Provider di Suggerimenti

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.

java
CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> {
	dispatcher.register(CommandManager.literal("entity_name").then(
			CommandManager.argument("entity", EntityArgumentType.entity())
					.suggests(SuggestionProviders.SUMMONABLE_ENTITIES)
					.executes(context -> {
						EntityType<?> entityType = EntityArgumentType.getEntity(context, "entity").getType();
						context.getSource().sendFeedback(
								() -> Text.literal("Called /subtater2 with entity: ")
										.append(
												Text.translatable(entityType.getTranslationKey())
										),
								false);
						return 1;
					})
	));
});

Provider di Suggerimenti Predefiniti

Ci sono alcuni provider di suggerimenti predefiniti che puoi usare:

Provider di SuggerimentiDescrizione
SuggestionProviders.SUMMONABLE_ENTITIESSuggerisce tutte le entità che possono essere evocate.
SuggestionProviders.AVAILABLE_SOUNDSSuggerisce tutti i suoni che possono essere riprodotti.
LootCommand.SUGGESTION_PROVIDERSuggerisce tutte le loot table disponibili.
SuggestionProviders.ALL_BIOMESSuggerisce tutti i biomi disponibili.

Creare un Provider di Suggerimenti Personalizzato

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.

java
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.

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.