Skip to content

v0.1.0

Choose a tag to compare

@Shuvlyy Shuvlyy released this 09 Apr 21:07
· 78 commits to main since this release

🎨 ️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

🇬🇧 Also available in English!

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() : Item
  • setAmount() : Nombre d'items
  • setDurability() : Durabilité de l'item
  • setData() : Données (byte) de l'item
  • setName() : Nom de l'item
  • setLore() : Remplace la description de l'item
  • addLore() : Ajoute une ligne à la description de l'item
  • setFlags() : Remplace les flags de l'item
  • addFlag() : Ajoute un flag aux flags de l'item
  • setUnbreakable() : Rend l'item incassable
  • addEnchant() : Ajoute un enchantement à l'item
  • removeEnchant() : Retire un enchantement à l'item
  • build() : 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 joueur
  • close() : Ferme la GUI d'un joueur
  • update() : Rafraîchit la GUI d'un joueur
  • setItem() : 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.

Fait avec 💜 par Lysandre B. ・ wakatime + wakatime