Repository navigation
v0.1.0
🎨 ️HashGui
Librairie qui permet de créer des menus et des items personnalisés simplement
et rapidement.
Cette librairie est constituée de deux classes principales :
- HashItem : Constructeur d'item
- HashGui : Constructeur de GUI
HashItem
Utilisation
Création d'un item personnalisé :
HashItem item = new HashItem(Material.ENDER_PEARL, 10)
.setName("Bonjour")
.setLore(Arrays.asList(
"Ligne 1",
"Ligne 2"
))
.addLore("Ligne 3")
.setFlags(Arrays.asList(
ItemFlag.HIDE_ATTRIBUTES,
ItemFlag.HIDE_ENCHANTS
))
.addFlag(ItemFlag.HIDE_UNBREAKABLE)
.addEnchant(Enchantment.DURABILITY, 3)
.setUnbreakable(true)
.build();
Inventory#addItem(item.getItemStack());Warning
Ne pas oublier de build() l'item avant de l'utiliser !
Importez toujours depuis le package org.bukkit.
Tip
Renseignez-vous sur les enums Material, ItemFlag et Enchantment
(du package org.bukkit).
Fonctionnalités
setType(): ItemsetAmount(): Nombre d'itemssetDurability(): Durabilité de l'itemsetData(): Données (byte) de l'itemsetName(): Nom de l'itemsetLore(): Remplace la description de l'itemaddLore(): Ajoute une ligne à la description de l'itemsetFlags(): Remplace les flags de l'itemaddFlag(): Ajoute un flag aux flags de l'itemsetUnbreakable(): Rend l'item incassableaddEnchant(): Ajoute un enchantement à l'itemremoveEnchant(): Retire un enchantement à l'itembuild(): Construit l'item pour qu'il soit utilisable
🖱️ Click handler
Il est possible de définir l'action exécutée lors d'un clic sur l'item dans un
inventaire.
Exemple :
ClickHandler clickHandler = new ClickHandler()
.addClickType(ClickType.LEFT)
.setClickAction((Player player, HashGui gui, ItemStack clickedItem, int clickedSlot) -> {
// Actions à faire lors du clic.
});
HashItem item = new HashItem(Material.COMPASS)
.addClickHandler(clickHandler);
.build(guiManager);Warning
guiManager (dans la fonction build()) doit être une instance de
HashGuiManager, qui doit être stocké à la racine de votre plugin.
Cette instance s'occupe de détecter les clics et d'exécuter ce qu'il faut en
fonction de l'item.
Warning
Le ciblage de l'item se fait à partir de son displayName, donc faites
bien attention à ne pas donner le même nom à deux items si vous ne voulez pas
qu'ils exécutent la même chose.
Si deux items doivent avoir le même nom mais
un click handler différent, alors jouez avec les codes couleurs pour que ça ne
soit pas visible du point de vue du joueur 😉
("§cTest" et "§r§cTest" sont différents mais rendent pareil à l'écran)
Tip
Renseignez-vous sur l'enum ClickType (du package org.bukkit).
🫱 Interaction handler
Il est possible de définir l'action exécutée lors d'une interaction avec l'item.
Exemple :
InteractionHandler interactionHandler = new InteractionHandler()
.addInteractionType(Action.RIGHT_CLICK_AIR)
.setClickAction((Player player, ItemStack clickedItem, int clickedSlot) -> {
// Actions à faire lors de l'interaction.
});
HashItem item = new HashItem(Material.COMPASS)
.addInteractionHandler(interactionHandler)
.build(guiManager);Warning
Tout comme pour les Click Handlers, guiManager
(dans la fonction build()) doit être une instance de HashGuiManager,
qui doit être stocké à la racine de votre plugin.
Cette instance s'occupe de détecter les intéractions et d'exécuter ce qu'il
faut en fonction de l'item.
Warning
Le ciblage de l'item se fait à partir de son displayName, donc faites
bien attention à ne pas donner le même nom à deux items si vous ne voulez pas
qu'ils exécutent la même chose.
Si deux items doivent avoir le même nom mais
un click handler différent, alors jouez avec les codes couleurs pour que ça ne
soit pas visible du point de vue du joueur 😉
("§cTest" et "§r§cTest" sont différents mais rendent pareil à l'écran)
Tip
Renseignez-vous sur l'enum Action (du package org.bukkit).
HashGuiManager
Pour que les ClickHandler et les InteractionHandler fonctionnent,
vous devez créer une instance de HashGUIManager à la racine de votre plugin
et donner cette instance lors du build de votre item personnalisé.
Exemple :
public class Test extends JavaPlugin {
private PluginManager pluginManager;
private HashGuiManager guiManager;
/* Initialisation des variables au lancement du serveur */
@Override
public void onEnable()
{
this.pluginManager = this.getServer().getPluginManager();
this.setupGuiManager();
// Reste de votre code
}
/* Initialisation et configuration du manager */
private void setupGuiManager()
{
this.guiManager = new HashGUIManager(this, this.pluginManager);
this.guiManager.setup();
}
/* Getter du manager */
public HashGuiManager getGuiManager()
{
return this.guiManager;
}
}Tip
Il est très fortement recommandé de n'avoir qu'une seule instance de
HashGuiManager dans votre plugin (en fait je vous interdis d'en avoir plusieurs).
HashSkull
Création de la tête d'un joueur :
HashItem playerSkull = new HashSkull()
.setOwner("Shuvly") // HashSkull
.setName("Tête de Shuvly") // HashItem
.build();Tip
Exécutez d'abord toutes les modifications relatives à HashSkull avant d'exécuter
les modifications relatives à HashItem.
Création d'une tête personnalisée :
HashItem customSkull = new HashSkull()
.setTexture("...") // Votre texture
.setName("Tête personnalisée")
.build();Exemple de texture (en base64) : eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZWY0OGMxOTU1NTUwZWFlZGU1NzEzYTdiY2NjOWE0YWUyZTZlMTcxZTI5YWMxYzcxYzBlM2QxYWJiNzI5MGNjYSJ9fX0=
Tip
Exécutez d'abord toutes les modifications relatives à HashSkull avant d'exécuter
les modifications relatives à HashItem.
Tip
Vous pouvez trouver des têtes personnalisées sur Minecraft Heads.
Quand vous êtes sur la page d'une tête, descendez jusqu'à la section "For developers" pour trouver la valeur
de la texture en base64.
HashGui
Utilisation
Création d'un menu personnalisé :
HashItem item = new HashItem(Material.SIGN)
.setName("Paramètres")
.addLore("Cliquez pour accéder aux paramètres")
.build();
HashGui gui = new HashGui("Menu", 5)
.setItem(3, item);
gui.open(player);Fonctionnalités
open(): Ouvre une GUI à un joueurclose(): Ferme la GUI d'un joueurupdate(): Rafraîchit la GUI d'un joueursetItem(): Place un item dans la GUI
Masks
Les masques (Mask) sont utilisés pour créer un agencement d'items dans une GUI.
Par exemple, si vous voulez faire une bordure comme ceci :
... un code normal serait :
ItemStack glass = new ItemStack(Material.STAINED_GLASS_PANE);
ItemStack grass = new ItemStack(Material.GRASS);
ItemStack glowstone = new ItemStack(Material.GLOWSTONE);
ItemStack bookshelf = new ItemStack(Material.BOOKSHELF);
for (int i = 0 ; i < 10 ; i++) {
menu.setItem(i, glass);
}
for (int i = 17 ; i < 26 ; i++) {
menu.setItem(i, glass);
}
menu.setItem(11, grass);
menu.setItem(13, glowstone);
menu.setItem(15, bookshelf);Pas dingue, n'est-ce pas ? Et c'est là qu'interviennent les masques. Le code
ci-dessus devient alors :
ItemStack glass = new ItemStack(Material.STAINED_GLASS_PANE);
ItemStack grass = new ItemStack(Material.GRASS);
ItemStack glowstone = new ItemStack(Material.GLOWSTONE);
ItemStack bookshelf = new ItemStack(Material.BOOKSHELF);
/* ⬇️ Doit être une instance de HashGUI. */
Mask mask = new Mask(menu);
mask.setItem('s', glass);
.setItem('g', grass);
.setItem('l', glowstone);
.setItem('b', bookshelf);
/* ⬇️ Doit faire 9 caractères de long obligatoirement (taille d'une ligne). */
mask.pattern("sssssssss")
.pattern("s g l b s")
.pattern("sssssssss");
mask.apply();Bien plus propre n'est-ce pas ?
Si une lettre n'a pas d'item assigné, celui-ci sera placé :
Caution
Le caractère espace ( ) ne peut pas être assigné à un item, étant donné qu'il
sert de vide.

