DataSource<T>
Interface fonctionnelle qui encapsule une valeur accessible via get(). Utilisée par les widgets qui affichent une valeur variable (Label, KeyValueRow, ProgressBar).
package ca.tawess123.apocalyinterface.api.data;
Interface
@FunctionalInterface
public interface DataSource<T> {
/** Retourne la valeur courante. */
T get();
/** Crée une source statique — valeur capturée à l'appel. */
static <T> DataSource<T> of(T value) { return () -> value; }
}
Créer un DataSource
Valeur statique — DataSource.of(valeur)
import ca.tawess123.apocalyinterface.api.data.DataSource;
DataSource<String> nomClan = DataSource.of("Les Loups");
DataSource<String> membres = DataSource.of(count + " / 15");
DataSource<Float> progress = DataSource.of(0.75f);
La valeur est capturée au moment de l'appel. Elle ne change pas tant que le widget n'est pas reconstruit (par update() ou init()).
Valeur dynamique — lambda
private int points = 0;
DataSource<String> pointsSource = () -> points + " pts";
// réévalué à chaque render() — affiche toujours la valeur courante du champ
Le lambda est une implémentation fonctionnelle de DataSource<T>. Il est appelé par le widget à chaque frame.
Source calculée en temps réel
// HP du joueur local — mis à jour automatiquement
DataSource<Float> hpRatio = () ->
Minecraft.getInstance().player.getHealth()
/ Minecraft.getInstance().player.getMaxHealth();
ProgressBar.builder()
.value(hpRatio)
.labelKey("monmod.bar.hp")
.fillColor(ApocalyColors.DANGER)
.build();
Widgets qui acceptent un DataSource
| Widget | Méthode | Type |
|---|---|---|
Label | .value(DataSource<String>) | Texte affiché après la clé |
KeyValueRow | .value(DataSource<String>) | Valeur à droite |
ProgressBar | .value(DataSource<Float>) | Progression [0.0, 1.0] |
ProgressBar accepte aussi .value(float) comme raccourci pour une valeur statique.
Choisir entre statique et dynamique
| Situation | Recommandation |
|---|---|
| Valeur fixe connue à la construction | DataSource.of(valeur) |
| Valeur formatée une fois | DataSource.of(pts + " pts") |
| Champ mis à jour entre deux frames | () -> champ |
Valeur rafraîchie via update() | DataSource.of(champ) — lu au buildLayout |
Voir aussi
- Guide : Données statiques et dynamiques — explication détaillée avec le pattern
update() - Référence Label
- Référence KeyValueRow
- Référence ProgressBar