Aller au contenu principal

ApocalyScreen

Classe de base pour les écrans de données. Gère automatiquement : centrage du panneau, barre de titre, bordures, scroll global si le contenu dépasse la hauteur de l'écran.

→ Pour les UIs avec slots vanilla : ApocalyContainerScreen
→ Pour les UIs multi-panneaux : ApocalyMultiScreen


Constructeurs

// Largeur par défaut (240 px)
ApocalyScreen(Component title)

// Largeur personnalisée
ApocalyScreen(Component title, int panelWidth)
ParamètreTypeDescription
titleComponentTitre affiché dans la barre de titre. Toujours Component.translatable("clé").
panelWidthintLargeur du panneau en pixels. Défaut : 240. Recommandé : 200–320.

Méthode abstraite

protected abstract void buildLayout(Column root);

Appelée à chaque init() (ouverture, redimensionnement) et à chaque update(). Ajouter des widgets à root — ne jamais stocker de référence à root entre deux appels.


Méthodes optionnelles à surcharger

// Surcharger la couleur de bordure (défaut : ApocalyColors.BORDER, jaune)
protected int borderColor() { return ApocalyColors.BORDER; }

// Surcharger la couleur du titre (défaut : ApocalyColors.TITLE, jaune)
protected int titleColor() { return ApocalyColors.TITLE; }

Méthode publique

public void update()

Relance buildLayout et redessine le panneau sans fermer l'écran. L'offset de scroll est préservé. Appeler depuis un handler de packet S2C pour rafraîchir l'affichage après réception de nouvelles données.


Comportement automatique

AspectComportement
PositionPanneau centré dans l'écran Minecraft
Scroll globalActivé automatiquement si le contenu dépasse la hauteur disponible
PauseisPauseScreen() retourne false — le jeu continue en multijoueur
RedimensionnementbuildLayout est rappelé — widgets reconstruits, scroll préservé

Exemple complet

package ca.monmod.client.screen;

import ca.tawess123.apocalyinterface.api.data.DataSource;
import ca.tawess123.apocalyinterface.api.layout.Card;
import ca.tawess123.apocalyinterface.api.layout.Column;
import ca.tawess123.apocalyinterface.api.screen.ApocalyScreen;
import ca.tawess123.apocalyinterface.api.widget.Button;
import ca.tawess123.apocalyinterface.api.widget.KeyValueRow;
import ca.tawess123.apocalyinterface.api.widget.Label;
import net.minecraft.network.chat.Component;

public final class ProfilScreen extends ApocalyScreen {

private String pseudo;
private int coins;

public ProfilScreen(String pseudo, int coins) {
super(Component.translatable("monmod.screen.profil"), 240);
this.pseudo = pseudo;
this.coins = coins;
}

@Override
protected void buildLayout(Column root) {
root.add(Card.create()
.add(Label.builder()
.text("monmod.label.joueur")
.value(DataSource.of(pseudo))
.title()
.build())
.add(KeyValueRow.builder()
.key("monmod.row.coins")
.value(DataSource.of(coins + " ⬡"))
.build()));

root.add(Button.builder()
.text("monmod.btn.fermer")
.onClick(this::onClose)
.build());
}

// Appelé depuis le handler de packet S2C
public void refresh(String newPseudo, int newCoins) {
this.pseudo = newPseudo;
this.coins = newCoins;
update();
}
}

Voir aussi