Aller au contenu principal

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

WidgetMéthodeType
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

SituationRecommandation
Valeur fixe connue à la constructionDataSource.of(valeur)
Valeur formatée une foisDataSource.of(pts + " pts")
Champ mis à jour entre deux frames() -> champ
Valeur rafraîchie via update()DataSource.of(champ) — lu au buildLayout

Voir aussi