Ta première fenêtre
Un écran de stockage avec une recherche, une liste filtrée et deux boutons. Tu le décris, Galdur UI fait la mise en page : pas de coordonnées, pas de tailles.
Il te faut un mod pour Minecraft 1.21.1 et NeoForge 21.1 (Java 21), avec Galdur UI en dépendance. Si ce n’est pas encore fait, suis le guide Installation.
Créer la fenêtre
Tout commence par GaldurLib.createWindow(). Ça renvoie une fenêtre vide.
GaldurWindow window = GaldurLib.createWindow();window.addTitle(Component.literal("Storage"), true); // true = centréLes éléments s’empilent de haut en bas, dans l’ordre où tu les ajoutes. Le thème, les espacements et la taille sont gérés pour toi.
Ajouter une recherche et une liste
Chaque méthode add… renvoie un handle. Un ListHandle garde les lignes et la ligne choisie, et tu peux les changer pendant que la fenêtre est ouverte.
List<String> ores = List.of("Coal", "Iron", "Copper", "Gold");SearchHandle search = window.addSearch(Component.literal("Search..."));ListHandle list = window.addList(4); // 4 lignes visibleslist.setLines(ores.stream().<Component>map(Component::literal).toList());search.onChange(text -> list.setLines(ores.stream() .filter(ore -> ore.toLowerCase().contains(text.toLowerCase())) .<Component>map(Component::literal).toList()));Pour réagir quand le joueur choisit une ligne, utilise onSelect. Quand les lignes sont remplacées, la sélection est effacée et onSelect reçoit -1.
Mettre des boutons sur une ligne
Par défaut, les éléments vont les uns sous les autres. addRow les met côte à côte. Ici, la rangée est centrée.
RowHandle buttons = window.addRow(true);buttons.addButton(Component.literal("Take"), () -> take(list.getSelected()));buttons.addButton(Component.literal("Close"), window::close);L’ouvrir
window.open() affiche la fenêtre au prochain tick client. Échap ou window.close() reviennent à l’écran ouvert avant. Essaie :
Les fenêtres, widgets, écrans et le thème sont côté client. Seul api.menu se charge sur un serveur dédié : ouvre tes fenêtres depuis du code client (une touche, une commande client), jamais depuis du code serveur.
Tout ce que tu peux ajouter
Chaque méthode ci-dessous existe aussi avec un dernier paramètre boolean centered. Les rangées acceptent du texte, des boutons, des boutons icône et des cases à cocher.
| Méthode | Renvoie | Ajoute |
|---|---|---|
addTitle(text) | ElementHandle | Un titre, dans la police de titre Fredoka. |
addText(text) | ElementHandle | Une ligne de texte. |
addButton(label, action) | ElementHandle | Un bouton. L’action se lance au clic et avec Entrée. |
addIconButton(icon, label, action) | ElementHandle | Un bouton avec un objet ou un sprite. Le libellé devient l’info-bulle. |
addCheckbox(label, checked) | CheckboxHandle | Une case à cocher, avec son état et onChange. |
addRow() | RowHandle | Des éléments côte à côte. |
addList(visibleRows) | ListHandle | Une liste qui défile, avec une sélection. |
addSearch(placeholder) | SearchHandle | Un champ de texte, avec onChange à chaque touche. |
addProgress(label) | ProgressHandle | Une barre de progression, de 0 à 1 ou fait / total. |
addTabs() | TabsHandle | Des onglets, chacun avec son contenu. Fenêtre uniquement. |
Chaque handle peut aussi désactiver, cacher ou donner une info-bulle à son élément : voir Handles.