Skip to content

Releases: hashtek-mc/hashgui

v0.2.0

03 May 17:16
Compare
Choose a tag to compare

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

Installation

Après installation, le .jar se trouve dans le dossier builds/libs/.

Linux / MacOS :

./gradlew make

Windows

.\gradlew.bat make

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

Handlers

Un Handler est un morceau de code qui va être exécuté lorsqu'un joueur va faire une certaine
action avec un item.

Utilisation (exemple : Click handler)

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)

Click handler

Il est possible de définir l'action exécutée lors d'un clic sur l'item dans un
inventaire.

Fonctionnalités :

  • Type de click (clic gauche, clic droit, shift + clic...)
ClickHandler#addClickType(ClickType.LEFT);
ClickHandler#addClickTypes(ClickType.SHIFT_LEFT, ClickType.SHIFT_RIGHT); // Ajoute plusieurs types de clics en une fois.
ClickHandler#addAllClickTypes(); // Ajoute tous les types de clic possibles.

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.

Fonctionnalités :

  • Type d'interaction (clic gauche, clic droit, dans l'air, ou pas...)
InteractHandler#addInteractType(Action.LEFT_CLICK_AIR);
InteractHandler#addInteractTypes(Action.RIGHT_CLICK_AIR, Action.RIGHT_CLICK_BLOCK); // Ajoute plusieurs types d'interactions en une fois.
InteractHandler#addAllInteractTypes(); // Ajoute tous les types d'interaction possibles.

Tip

Renseignez-vous sur l'enum Action (du package org.bukkit).

🫱 Hold handler

Il est possible de définir l'action exécutée lorsqu'un joueur prend (ou retire) un item dans sa main.

Fonctionnalités :

  • Action de maintien (action exécutée lorsque le joueur prend l'item dans sa main)
HoldAction action = (Player player, ItemStack item, int slot) -> {
    // ...
};

HoldHandler#setHoldAction(action);
  • Action de non-maintien (action exécutée lorsque le joueur retire l'item de sa main)
HoldAction action = (Player player, ItemStack item, int slot) -> {
    // ...
};

HoldHandler#setNotHoldAction(action);

Caution

Les armures sont compatibles avec HoldHandler.
Cependant, si vous utilisez PlayerInventory#setHelmet (ou une autre méthode pour définir une pièce d'armure),
HoldHandler ne le détectera pas automatiquement.
Vous devrez appeler la fonction HashGuiHold#refreshArmorState(Player player) pour actualiser la détection.

🫱 Hit handler

Il est possible de définir l'action exécutée lorsqu'un joueur tape un autre joueur.

Fonctionnalités :

  • Mort uniquement (n'exécute l'action que si le coup tue l'autre joueur)
HitHandler#setOnlyKill(true);

🫱 Destroy handler

Il est possible de définir l'action exécutée lorsqu'un joueur casse un bloc.

HashGuiManager

Pour que les différents handlers 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.

Guis

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();

String title = "Menu";
int linesAmount = 5;

HashGui gui = new HashGui(title, linesAmount)
    .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 :

Inventory gui;

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++) {
    gui.setItem(i, glass);
}
for (int i = 17 ; i < 26 ; i++) {
    gui.setItem(i, glass);
}
gui.setItem(11, grass);
gui.setItem(13, glowstone);
gui.setItem(15, bookshelf);

Pas dingue, n'est-ce pas ? Et c'est là qu'interviennent les masques. Le code
ci-dessus devient alors :

HashGui gui; // Peut être une instance de Inventory.

ItemStack glass = new ItemStack(Material.STAINED_GLASS_PANE);
ItemSta...
Read more

v0.1.0

09 Apr 21:07
Compare
Choose a tag to compare

🎨 ️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](https://wakatime.com/badge/user/2f50fe6c-0368-4bef-aa0...

Read more

v0.0.2

27 Feb 18:48
Compare
Choose a tag to compare

Mise à jour : v0.0.2

  • HashSkull ajouté
  • Résolution de bugs et optimisation du code

v0.0.1

07 Feb 20:54
Compare
Choose a tag to compare

🎨 ️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()
  .setType(Material.ENDER_PEARL)
  .setAmount(10)
  .setTitle("Bonjour")
  .setLore(Arrays.asList(
    "Ligne 1",
    "Ligne 2",
  ))
  .addLore("Ligne 3")
  .setFlags(Arrays.asList(
    ItemFlag.HIDE_ATTRIBUTES,
    ItemFlag.HIDE_ENCHANTS,
  ))
  .addFlag(ItemFlag.HIDE_UNBREAKABLE)
  .setUnbreakable(true)
  .build();

Inventory#addItem(item.getItemStack());

⚠️ Ne pas oublier de build() l'item avant de l'utiliser !
⚠️ Importez toujours depuis le package org.bukkit

Fonctionnalités

  • setType() : Item
  • setAmount() : Nombre d'items
  • setDurability() : Durabilité de l'item
  • setData() : Données (byte) de l'item
  • setTitle() : Titre 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
  • 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.

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();

HashGUI

Utilisation

Création d'un menu personnalisé :

HashItem item = new HashItem()
  .setType(Material.SIGN)
  .setTitle("Paramètres")
  .addLore("Cliquez pour accéder aux paramètres")
  .build();

HashGUI gui = new HashGUI("Menu", 5)
    .setItem(3, item);
    
gui.open(player);

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 deviendrait :

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);
    
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 de bloc assigné, cet item sera placé :

⚠️ Le caractère espace ( ) ne peut pas être assigné à un item, étant donné qu'il
sert de vide.