ApocalyMultiScreen
Classe de base pour les écrans composés de plusieurs panneaux côte à côte, chacun avec son propre titre, sa propre largeur et son propre scroll indépendant.
→ Pour les UIs à panneau unique : ApocalyScreen
→ Pour les UIs avec slots vanilla : ApocalyContainerScreen
Constructeur
ApocalyMultiScreen(Component screenTitle)
| Paramètre | Type | Description |
|---|---|---|
screenTitle | Component | Titre de la fenêtre Minecraft (affiché dans la barre de titre du navigateur Forge, pas dans les panneaux) |
Méthode abstraite
protected abstract List<PanelConfig> buildPanels();
Retourne la liste des panneaux à afficher, de gauche à droite. La liste doit contenir au moins un panneau.
PanelConfig
Descripteur d'un panneau individuel.
import ca.tawess123.apocalyinterface.api.screen.PanelConfig;
PanelConfig.of(
Component title, // titre du panneau (clé i18n)
int width, // largeur en pixels
Consumer<Column> layout // fonction de construction du contenu
)
Chaque panneau reçoit sa propre Column dans le Consumer<Column>. Tu peux passer une méthode de référence (this::buildBoutiquePanel) ou un lambda.
Comportement automatique
| Aspect | Comportement |
|---|---|
| Position | Groupe de panneaux centré horizontalement dans l'écran |
| Séparation | 8 px (ApocalyDimensions.PANEL_GAP) entre chaque panneau |
| Hauteur partagée | Tous les panneaux ont la même hauteur — le maximum calculé parmi tous |
| Scroll | Chaque panneau scrolle indépendamment |
| Pause | isPauseScreen() retourne false |
Exemple complet
package ca.monmod.client.screen;
import ca.tawess123.apocalyinterface.api.data.DataSource;
import ca.tawess123.apocalyinterface.api.layout.Column;
import ca.tawess123.apocalyinterface.api.screen.ApocalyMultiScreen;
import ca.tawess123.apocalyinterface.api.screen.PanelConfig;
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;
import java.util.List;
public final class MarchandScreen extends ApocalyMultiScreen {
private final String[] articleSelectionne = { "Diamant" };
public MarchandScreen() {
super(Component.translatable("monmod.screen.marchand"));
}
@Override
protected List<PanelConfig> buildPanels() {
return List.of(
PanelConfig.of(
Component.translatable("monmod.panel.boutique"),
140,
this::buildBoutiquePanel),
PanelConfig.of(
Component.translatable("monmod.panel.details"),
170,
this::buildDetailsPanel)
);
}
private void buildBoutiquePanel(Column col) {
col.add(Label.builder()
.text("monmod.label.articles")
.title()
.build());
col.add(Button.builder()
.text("monmod.btn.diamant")
.onClick(() -> { articleSelectionne[0] = "Diamant"; init(); })
.build());
col.add(Button.builder()
.text("monmod.btn.emeraude")
.onClick(() -> { articleSelectionne[0] = "Émeraude"; init(); })
.build());
}
private void buildDetailsPanel(Column col) {
col.add(Label.builder()
.text("monmod.label.article")
.value(DataSource.of(articleSelectionne[0]))
.title()
.build());
col.add(KeyValueRow.builder()
.key("monmod.row.prix")
.value(DataSource.of("250 ⬡"))
.build());
col.add(Button.builder()
.text("monmod.btn.acheter")
.command("shop buy " + articleSelectionne[0].toLowerCase())
.build());
}
}
Pour un exemple complet à trois panneaux (boutique + détails + inventaire), voir la recette multi-panneaux.