60 lines
2.0 KiB
Java
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();
|
|
}
|
|
}
|