112 lines
3.9 KiB
Markdown
112 lines
3.9 KiB
Markdown
# 💎 ItemBuilder & GuiItem - betterMcGuis
|
|
|
|
La création et l'interaction avec les items Minecraft sont grandement simplifiées grâce à `ItemBuilder` et `GuiItem`.
|
|
|
|
---
|
|
|
|
## 📑 Sommaire
|
|
- [1. Création d'ItemStacks avec `ItemBuilder`](#1-création-ditemstacks-avec-itembuilder)
|
|
- [2. Prise en Charge de MiniMessage et Kyori Adventure](#2-prise-en-charge-de-minimessage-et-kyori-adventure)
|
|
- [3. Têtes Personnalisées, Couleurs et Flags](#3-têtes-personnalisées-couleurs-et-flags)
|
|
- [4. L'Objet Interactif `GuiItem`](#4-lobjet-interactif-guiitem)
|
|
- [5. Le Contexte de Clic (`GuiClickContext`)](#5-le-contexte-de-clic-guiclickcontext)
|
|
|
|
---
|
|
|
|
## 1. Création d'ItemStacks avec `ItemBuilder`
|
|
|
|
```java
|
|
ItemStack epee = ItemBuilder.of(Material.DIAMOND_SWORD)
|
|
.name("<gradient:#ff0844:#ffb199><bold>Lame des Enfers</bold></gradient>")
|
|
.lore(
|
|
"<gray>Une épée forgée dans les profondeurs du Nether.</gray>",
|
|
"",
|
|
"<yellow>Dégâts : <red>+15</red></yellow>",
|
|
"<green>Effet : <gold>Enflamme les cibles</gold></green>"
|
|
)
|
|
.amount(1)
|
|
.enchant(Enchantment.DAMAGE_ALL, 5)
|
|
.enchant(Enchantment.FIRE_ASPECT, 2)
|
|
.unbreakable(true)
|
|
.flags(ItemFlag.HIDE_UNBREAKABLE)
|
|
.customModelData(1001)
|
|
.build();
|
|
```
|
|
|
|
---
|
|
|
|
## 2. Prise en Charge de MiniMessage et Kyori Adventure
|
|
|
|
Tous les noms et lores utilisent nativement les balises MiniMessage :
|
|
* `<gradient:#color1:#color2>Texte</gradient>` : Dégradés de couleurs HEX.
|
|
* `<bold>`, `<italic>`, `<underlined>`, `<strikethrough>` : Mises en forme.
|
|
* `<rainbow>Texte Arc-en-ciel</rainbow>` : Animation multicolore.
|
|
* `<green>`, `<red>`, `<gold>`, `<aqua>`, `<gray>`, etc.
|
|
|
|
---
|
|
|
|
## 3. Têtes Personnalisées, Couleurs et Flags
|
|
|
|
```java
|
|
// Tête de joueur par pseudo ou UUID
|
|
GuiItem tete = ItemBuilder.skull()
|
|
.skullOwner("Luc")
|
|
.name("<yellow>Profil de Luc</yellow>")
|
|
.asGuiItem();
|
|
|
|
// Armure en cuir teintée
|
|
ItemStack armure = ItemBuilder.of(Material.LEATHER_CHESTPLATE)
|
|
.color(Color.fromRGB(41, 128, 185))
|
|
.build();
|
|
|
|
// Item brillant sans texte d'enchantement
|
|
GuiItem etoile = ItemBuilder.of(Material.NETHER_STAR)
|
|
.glowing(true)
|
|
.asGuiItem();
|
|
```
|
|
|
|
---
|
|
|
|
## 4. L'Objet Interactif `GuiItem`
|
|
|
|
Un `GuiItem` encapsule un `ItemStack` avec des comportements avancés :
|
|
|
|
```java
|
|
GuiItem bouton = ItemBuilder.of(Material.EMERALD)
|
|
.name("<green>Confirmer l'achat</green>")
|
|
.asGuiItem(ctx -> {
|
|
ctx.replySuccess("Achat confirmé !");
|
|
})
|
|
// Condition de visibilité : seuls les joueurs avec la permission voient cet item
|
|
.visibleIf(player -> player.hasPermission("monplugin.vip"))
|
|
// Cooldown de 2 secondes entre les clics
|
|
.cooldown(Duration.ofSeconds(2))
|
|
// Joue un son au joueur
|
|
.sound(Sound.ENTITY_PLAYER_LEVELUP, 1.0f, 1.2f)
|
|
// Ferme l'inventaire après le clic
|
|
.closeOnClick();
|
|
```
|
|
|
|
---
|
|
|
|
## 5. Le Contexte de Clic (`GuiClickContext`)
|
|
|
|
| Méthode | Description |
|
|
|---|---|
|
|
| `ctx.getPlayer()` | Récupère le joueur ayant cliqué. |
|
|
| `ctx.getSlot()` | Récupère l'index du slot absolu cliqué. |
|
|
| `ctx.getSlotPos()` | Récupère la position (ligne, colonne). |
|
|
| `ctx.getClickType()` | Récupère le type de clic (`LEFT`, `RIGHT`, `SHIFT_LEFT`, etc.). |
|
|
| `ctx.isLeftClick()` / `isRightClick()` | Raccourcis booléens pour tester le type de clic. |
|
|
| `ctx.isShiftClick()` | Teste si la touche Shift était enfoncée. |
|
|
| `ctx.close()` | Ferme l'inventaire actuel. |
|
|
| `ctx.refresh()` | Rafraîchit les items du menu. |
|
|
| `ctx.playSound(sound, vol, pitch)` | Joue un son de confirmation ou d'erreur. |
|
|
| `ctx.reply("<yellow>Message</yellow>")`| Envoie un message formaté en MiniMessage. |
|
|
| `ctx.replySuccess(msg)` | Envoie un message de succès préfixé en vert. |
|
|
| `ctx.replyError(msg)` | Envoie un message d'erreur préfixé en rouge. |
|
|
|
|
---
|
|
|
|
> 📖 **Étape suivante** : Apprenez à concevoir des grilles avec [04_PATTERNS_AND_MASKS.md](04_PATTERNS_AND_MASKS.md).
|