Aller au contenu principal

Button

Bouton cliquable avec 4 états visuels (actif/repos, actif/survol, désactivé/repos, désactivé/survol) et coins arrondis optionnels.

package ca.tawess123.apocalyinterface.api.widget;

Builder

Button btn = Button.builder()
.text(String key) // clé i18n (requis)
.onClick(Runnable action) // action au clic
.command(String cmd) // raccourci : envoie /cmd sans fermer l'écran
.disabled() // rend le bouton non-cliquable
.textColor(int color) // surcharge couleur du texte
.borderColor(int color) // bordure au repos
.accentColor(int color) // bordure et texte au survol
.cornerRadius(int radius) // arrondi des coins (0-6 px)
.visibleIf(boolean visible) // visibilité conditionnelle
.build();

Options du builder

OptionTypeDéfautDescription
.text(String)StringClé i18n du texte. Requis.
.onClick(Runnable)RunnablenullCallback déclenché au clic gauche.
.command(String)StringnullRaccourci : envoie la commande au serveur et garde l'écran ouvert. Équivalent à onClick(() -> player.chat("/" + cmd)).
.disabled()falseDésactive le bouton — non-cliquable, style grisé.
.textColor(int)int (ARGB)selon étatSurcharge la couleur du texte.
.borderColor(int)int (ARGB)0xFF555555Couleur de bordure au repos actif.
.accentColor(int)int (ARGB)ApocalyColors.BORDERCouleur de bordure et texte au survol actif.
.cornerRadius(int)int0Rayon d'arrondi des coins. Recommandé : 0, 3 ou 6.
.visibleIf(boolean)booleantrueMasque le bouton si false (0 px).

Hauteur

20 px (ApocalyDimensions.BUTTON_HEIGHT).


États visuels

ÉtatFondBordureTexte
Actif, repos0x800505050xFF5555550xFFFFFFFF
Actif, survol0x991010100xFFFFAA000xFFFFFFCC
Désactivé, repos0x700303030xFF3333330xFF666666
Désactivé, survol0x881010100xFFAA33330xFFFF6666

Exemple

import ca.tawess123.apocalyinterface.api.theme.ApocalyColors;
import ca.tawess123.apocalyinterface.api.widget.Button;

// Bouton commande (le plus courant)
root.add(Button.builder()
.text("monmod.btn.clan_info")
.command("clan info")
.build());

// Bouton avec action Java
root.add(Button.builder()
.text("monmod.btn.fermer")
.onClick(this::onClose)
.build());

// Bouton conditionnel (désactivé si non-chef)
root.add(Button.builder()
.text("monmod.btn.promouvoir")
.command("clan promote")
.disabled(!isLeader)
.build());

// Bouton stylé vert avec coins arrondis
root.add(Button.builder()
.text("monmod.btn.confirmer")
.onClick(() -> confirmer())
.borderColor(ApocalyColors.SUCCESS)
.accentColor(ApocalyColors.SUCCESS_SOFT)
.cornerRadius(3)
.build());

// Bouton stylé rouge (danger)
root.add(Button.builder()
.text("monmod.btn.quitter_clan")
.command("clan leave")
.borderColor(ApocalyColors.DANGER)
.accentColor(ApocalyColors.DANGER_SOFT)
.build());

.onClick() vs .command()

.onClick(Runnable).command(String)
Ferme l'écranNon (sauf si la Runnable le fait)Non
Envoie une commandeNonOui (/cmd)
Exécute du code JavaOuiNon

Les deux peuvent être combinés : .command() EST un .onClick() interne. Si tu as besoin des deux (envoyer une commande ET mettre à jour l'UI), utilise .onClick() avec player.chat("/" + cmd) dans le lambda.


Voir aussi