
Bonjour, ce topic aura pour objectif d’introduire la GuiAPI, ses possibilités ainsi que son mode d’emploi.
#Quel est but de la GuiAPI ?(Quel est but de la GuiAPI ?)
Son but principal est de simplifier la création d’interfaces dans le jeu. Afin de réduire le temps (gâché) passé à mettre en place une classe et un rendu de GUI.
J’en ai eu assez de trifouiller des classes entières afin de créer un GUI potable (réécrire les mêmes lignes pour mettre à jour tous les composants, etc), de là est née l’idée de cette API. A présent vous pouvez créer un GUI et y ajouter des composants, plus ou moins complexes, en quelques lignes.
De plus, j’ai rapidement trouvé que les GUIs de Minecraft Vanilla manquaient de composants, ou ces derniers ne sont tout simplement pas assez modulables (exemple des sliders difficilement intégrables en tant que tel, ou les boutons qui ne peuvent pas être plus grand que 200x20, etc.).
#Quels sont les ajouts que proposent l’API ?(Quels sont les ajouts que proposent l’API ?)
Premièrement, et c’est l’élément crucial de l’API: elle gère “l’inception”, dirons nous, un composant dans un composant dans un composant, etc.
:::

:::
A quoi diable cela sert-il ? Et bien, à la façon de Java Swing, vous pouvez créer des panels, y ajouter des composants (qui seront mis à jour automatiquement, plus besoin de rajouter toutes ces lignes redondantes, idem pour le rendu). Vous pourrez par conséquent gérer facilement des ensembles de composants au lieu de les gérer individuellement! Simplicité quand tu nous tiens! Un système interne au rendu permet également aux composants enfants des panels de n’être rendu que dans les limites de ce dernier (vous comprendrez plus bas).
Afin de gérer les inter compatibilités entre les mods qui utiliseraient l’API, j’ai également mis en place différents events, chacun cancelable, pour modifier des GUIs de mods externes.
Je pense qu’à ce stade des screens et exemples concrets seront plus parlant pour montrer les ajouts:

(Panel 1 et Panel 2 visibles) (En une ligne de code, tout l’ensemble du Panel 2 est invisible)
Pour voir le code de ce GUI, c’est ici. Ce GUI regroupe quelques composants compris dans l’API, en voici la liste complète à ce jour:
Les conteneurs:
- [color=#333333La ]frame%(#333333)[, c’est le composant père par excellence, il constitue la base du GUI.
- Le panel], il s’agit d’un conteneur basique.
- Le [color=#33cc33**scroll pane **]est un fils de panel qui, s’il contient un composant/conteneur plus grand que lui-même, permet, à l’aide de sliders, de bouger à travers ce GUI.
- Le container, il est lié à une classe Container et permet ainsi l’interaction avec l’inventaire d’un coffre, joueur, etc. Il crée automatiquement les slots qui le compose.
Les composants:
- Les **boutons **(+ icônes, + toutes tailles disponibles).
- Le text area (celui en haut à droite), il peut être redimensionné (spécification d’un minWidth, maxWidth, minHeight, maxHeight), il contient un “hint text” (texte qui disparait à l’écriture et sert d’indicateur au contenu à entrer). Il contient également un système de regex afin de contrôler les caractères entrés dans ce dernier, y compris des patterns (ex: ((\d)[h)?((\d)[m])?((\d)~~)?] **est un regex permettant de n’entrer qu’un string respectant la forme d’un horaire "*hms"). La taille maximum d’une ligne et du nombre de caractère peut également être réglée.
- Le **text field **et le **password field **sont des enfants du text area, et ont donc les mêmes propriétés, les seules différences: ils ne sont constitués que d’une ligne maximum de texte, ne sont pas redimensionnables, et dans le cas du password field le texte est remplacé par des ****.[color=#333333
- L’entity render], %(#333333)[il s’agit d’un composant permettant de faire le rendu d’une entité.
- La check box], elle peut être cochée ou décochée, rien de bien fou

- La progress bar, elle est customisable, on peut choisir son minimum, maximum, gérer sa progression, lui donner une texture vide, pleine, ou juste une couleur.
- Le slider, de la même manière que la progress bar, son minimum/maximum est réglable, ainsi que son “cran d’incrémentation”.
- Le slot, il est ajouté automatiquement à un gui container.
Je pense avoir fait le tour pour le moment, dans un futur proche je ferai une mise à jour afin de rajouter d’autres éléments, dont voici une liste non exhaustive:
- Gestion des GuiOverlay
- Amélioration des GuiContainer, notamment en permettant la création de slots plus originaux (différentes tailles, action lors du hovering, etc)
- Ajout du repère orthonormé, qui permettra de faire le rendu de courbes représentatives de fonctions
- Ajout de GUIs basiques tels que:
- Une liste
- Un choix multiple (Oui / Non, ou autre)
Toute suggestion est bien évidemment la bienvenue 
#Code source et téléchargement(Code source et téléchargement)
Cette API est bien évidemment open-source, j’attends d’ailleurs vos potentiels retours sur mon code (mon objectif étant de m’améliorer rapidement donc n’hésitez pas à critiquer ^^).
Github
Téléchargement
Sur ce, bonne journée/soirée ;)~~