Aller au contenu principal

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ètreTypeDescription
screenTitleComponentTitre 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

AspectComportement
PositionGroupe de panneaux centré horizontalement dans l'écran
Séparation8 px (ApocalyDimensions.PANEL_GAP) entre chaque panneau
Hauteur partagéeTous les panneaux ont la même hauteur — le maximum calculé parmi tous
ScrollChaque panneau scrolle indépendamment
PauseisPauseScreen() 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.


Voir aussi