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
| Option | Type | Défaut | Description |
|---|---|---|---|
.text(String) | String | — | Clé i18n du texte. Requis. |
.onClick(Runnable) | Runnable | null | Callback déclenché au clic gauche. |
.command(String) | String | null | Raccourci : envoie la commande au serveur et garde l'écran ouvert. Équivalent à onClick(() -> player.chat("/" + cmd)). |
.disabled() | — | false | Désactive le bouton — non-cliquable, style grisé. |
.textColor(int) | int (ARGB) | selon état | Surcharge la couleur du texte. |
.borderColor(int) | int (ARGB) | 0xFF555555 | Couleur de bordure au repos actif. |
.accentColor(int) | int (ARGB) | ApocalyColors.BORDER | Couleur de bordure et texte au survol actif. |
.cornerRadius(int) | int | 0 | Rayon d'arrondi des coins. Recommandé : 0, 3 ou 6. |
.visibleIf(boolean) | boolean | true | Masque le bouton si false (0 px). |
Hauteur
20 px (ApocalyDimensions.BUTTON_HEIGHT).
États visuels
| État | Fond | Bordure | Texte |
|---|---|---|---|
| Actif, repos | 0x80050505 | 0xFF555555 | 0xFFFFFFFF |
| Actif, survol | 0x99101010 | 0xFFFFAA00 | 0xFFFFFFCC |
| Désactivé, repos | 0x70030303 | 0xFF333333 | 0xFF666666 |
| Désactivé, survol | 0x88101010 | 0xFFAA3333 | 0xFFFF6666 |
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'écran | Non (sauf si la Runnable le fait) | Non |
| Envoie une commande | Non | Oui (/cmd) |
| Exécute du code Java | Oui | Non |
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
- Guide : Internationalisation — clés i18n des boutons
- Guide : Visibilité conditionnelle
- Recette : Hub à boutons — liste de boutons défilants