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ètre | Type | Description |
|---|---|---|
title | Component | Titre affiché dans la barre de titre. Toujours Component.translatable("clé"). |
panelWidth | int | Largeur 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
| Aspect | Comportement |
|---|---|
| Position | Panneau centré dans l'écran Minecraft |
| Scroll global | Activé automatiquement si le contenu dépasse la hauteur disponible |
| Pause | isPauseScreen() retourne false — le jeu continue en multijoueur |
| Redimensionnement | buildLayout 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();
}
}