Files
betterMcCommands/src/main/java/fr/luc/bettermccommands/api/suggestion/SuggestionProvider.java
T

60 lines
2.0 KiB
Java

package fr.luc.bettermccommands.api.suggestion;
import fr.luc.bettermccommands.api.CommandContext;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
/**
* Fournisseur dynamique de suggestions pour l'auto-complétion (Tab-Complete).
*/
@FunctionalInterface
public interface SuggestionProvider {
/**
* Calcule et retourne la liste des suggestions pour un argument donné dans un contexte précis.
*
* @param context Le contexte actuel de la commande.
* @param currentInput La saisie en cours de frappe par l'utilisateur.
* @return La collection de suggestions correspondantes.
*/
Collection<Suggestion> getSuggestions(CommandContext context, String currentInput);
/**
* Crée un fournisseur à partir d'une liste statique de chaînes de caractères.
*
* @param values Les valeurs possibles.
* @return Un {@link SuggestionProvider} filtrant les valeurs par préfixe insensible à la casse.
*/
static SuggestionProvider strings(String... values) {
return strings(Arrays.asList(values));
}
/**
* Crée un fournisseur à partir d'une collection statique de chaînes.
*
* @param values La collection de valeurs textuelles.
* @return Un {@link SuggestionProvider} filtrant par préfixe.
*/
static SuggestionProvider strings(Collection<String> values) {
return (context, currentInput) -> {
String lower = currentInput == null ? "" : currentInput.toLowerCase();
return values.stream()
.filter(v -> v.toLowerCase().startsWith(lower))
.map(Suggestion::of)
.collect(Collectors.toList());
};
}
/**
* Crée un fournisseur vide ne retournant aucune suggestion.
*
* @return Un {@link SuggestionProvider} vide.
*/
static SuggestionProvider empty() {
return (context, currentInput) -> List.of();
}
}