• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    GuiAPI

    Mods en developpement
    1.8.9
    5
    18
    5110
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • Reden
      Reden dernière édition par

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

      1 réponse Dernière réponse Répondre Citer 1
      • jglrxavpok
        jglrxavpok Modérateurs dernière édition par

        Tout d’abord, très beau travail! Minecraft manquait effectivement de solutions pour faire des GUIs propres et portables!

        J’aurais juste quelques remarques à faire sur le code:

        • Mouse::getDWheel(), fais très attention en utilisant cette méthode, elle donne le changement en position de la molette de la souris depuis le dernier appel de Mouse::getDWheel(). Ça peut potentiellement poser problème si cette méthode est appelée à plusieurs endroits différents. (je pense à tes potentiels GuiOverlay qui pourraient interférer avec la ‘hotbar’)
        • Ton code dépend encore beaucoup sur certaines classes du jeu, ce qui peut rendre compliqué le passage d’une version à une autre. Mais je ne pense pas que ce soit un gros problème puisque ce sont des classes qui ont peu de chance de changer.
        • Et le meilleur pour la fin: il y a beaucoup de documentation! C’est une bonne initiative!

        Modérateur sur MFF. 
        Mon Github: http://github.com/jglrxavpok
        Mon compte Steam si vous voulez jouer à CS:GO ou TF2 avec moi: https://steamcommunity.com/id/jglrxavpok/

        1 réponse Dernière réponse Répondre Citer 0
        • Reden
          Reden dernière édition par

          Merci pour ton retour, je vais trouver une alternative au dWheel prochainement dans ce cas 🙂 Concernant les dépendances au code Minecraft, tu penses à des classes précises ? Parce que les seules encore fortement dépendantes restent celles des containers que je compte modifier dans une version future, pour le moment elles restent des copiés/collés légèrement modifiés des classes de Minecraft.

          1 réponse Dernière réponse Répondre Citer 0
          • jglrxavpok
            jglrxavpok Modérateurs dernière édition par

            Après revérification, il y a moins de dépendances que ce que je me souvenais. Je noterais peut-être juste la classe Minecraft (mais on peut pas trop faire sans) et ‘PositionedSoundRecord’ dans GuiButton et GuiSlider, mais je vois pas trop comment faire autrement au final.

            Modérateur sur MFF. 
            Mon Github: http://github.com/jglrxavpok
            Mon compte Steam si vous voulez jouer à CS:GO ou TF2 avec moi: https://steamcommunity.com/id/jglrxavpok/

            1 réponse Dernière réponse Répondre Citer 0
            • Reden
              Reden dernière édition par

              D’accord 🙂 de toute manière, et comme tu la dis, ce sont des méthodes qui ne changeront pas.
              A ceux qui verront ce topic, je suis ouvert à toutes propositions d’ajouts a faire, alors n’hésitez pas 😉

              1 réponse Dernière réponse Répondre Citer 0
              • jglrxavpok
                jglrxavpok Modérateurs dernière édition par

                Je proposerais bien des fenêtres internes, un peu comme ça:

                Et des barres de progression (avec possibilité de changer les couleurs si possible) et d’y ajouter du texte (peut-être utiliser GuiPanel ?):

                Modérateur sur MFF. 
                Mon Github: http://github.com/jglrxavpok
                Mon compte Steam si vous voulez jouer à CS:GO ou TF2 avec moi: https://steamcommunity.com/id/jglrxavpok/

                1 réponse Dernière réponse Répondre Citer 0
                • AymericRed
                  AymericRed dernière édition par

                  Beau travail, ça a l’air d’être une API bien pratique, permettant plus de choses que le système de gui de MC, je regarderais plus en détail un peu plus tard mais ça m’intéresse.

                  Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                  AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                  Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                  Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                  1 réponse Dernière réponse Répondre Citer 0
                  • Reden
                    Reden dernière édition par

                    Merci, tout ce que tu viens de citer est déjà possible 😉 il faut juste que je rajoute de quoi mettre un texte dans la barre de progression. 🙂

                    1 réponse Dernière réponse Répondre Citer 0
                    • Reden
                      Reden dernière édition par

                      Petite mise à jour:

                      • Patch correctif de quelques bugs (voir liste des commits).
                      • Ajout du texte sur la barre de progression.
                      • Amélioration du système de composants: on peut désormais en rajouter depuis n’importe qu’elle fonction, ce qui provoquait auparavant une ConcurrentModificationException dûe à la boucle for.
                      • Modification de l’update de l’état survolé.
                      • Changement du dWheel (getDWheel() -> getEventDWheel() pour éviter de remettre la valeur de dWheel à 0, merci à @jglrxavpok pour avoir révélé le problème potentiel)
                      1 réponse Dernière réponse Répondre Citer 0
                      • elias54
                        elias54 Administrateurs dernière édition par

                        Au début cette API me faisait penser à GuiAPI de ShockAhPi (MinecraftForum.net) ^^

                        Mon site | GitHub

                        1 réponse Dernière réponse Répondre Citer 0
                        • Reden
                          Reden dernière édition par

                          Je ne connaissais pas, à en voir la version sur minecraftforum elle n’est plus à jour de toute manière ^^

                          1 réponse Dernière réponse Répondre Citer 0
                          • elias54
                            elias54 Administrateurs dernière édition par

                            Oui ça fait un bail que c’est abandonné. 😛

                            Mon site | GitHub

                            1 réponse Dernière réponse Répondre Citer 0
                            • Reden
                              Reden dernière édition par

                              Ok donc je garde la légitimité de mon API, j’ai eu peur ^^’

                              1 réponse Dernière réponse Répondre Citer 0
                              • elias54
                                elias54 Administrateurs dernière édition par

                                Ce n’était pas ce que je sous-entendais dans mes messages haha 🙂
                                Juste que le nom me faisait rappeler l’API de ShockAhPi ! 😉

                                Mon site | GitHub

                                1 réponse Dernière réponse Répondre Citer 0
                                • Reden
                                  Reden dernière édition par

                                  D’accord 🙂
                                  Petit patch de la soirée:

                                  • Une boucle infinie était déclenchée si le maxLineLength du textArea n’était pas mis à jour.
                                  • Modification du lineScrollOffsetX pour voir au minimum un caractère dans les textArea (auparavant si on supprimait le texte visible on ne voyait pas le caractère que l’on supprimerait ensuite).
                                  • Modification du système de remplacement du texte pour les passwordField qui décalait la position calculée lors de la sélection du texte.
                                  • Ajout d’un paddingTop par défaut sur les textField pour avoir le texte centré.
                                  • Mise à jour de la position d’un composant en type de position relative lors de son redimensionnement.
                                  • Ajout de du paramètre backgroundTexture sur les boutons pour créer des boutons sans texture (uniquement une icone, ou du texte, ou les deux, par exemple).
                                  1 réponse Dernière réponse Répondre Citer 0
                                  • Reden
                                    Reden dernière édition par

                                    Nouvelle mise à jour après un peu de temps ^^

                                    Les ajouts majeurs:

                                    • Ajout d’un design dit relatif ou responsive pour les habitués du CSS
                                    • Ajout des GuiList entièrement customisable, chaque sous-panel représentant une entrée peut être différent
                                    • Ajout de la GuiComboBox, de la même manière chaque entrée peut être customisée

                                    Ajouts mineurs:

                                    • Ajout du setCanLooseFocus pour empêcher ou non la perte du focus d’un élément lors d’un clic sur un panel différent
                                    • Amélioration du système de bordures (possibilité de la paramétrer en interne ou externe par rapport au composant)
                                    • Amélioration du système de layers, au clic d’un composant, ceux cachés derrière ne sont plus cliqués
                                    • Réglages de quelques bugs rencontrés (voir liste des commits)

                                    Je prévois de faire un article plus complet sur comment utiliser le mod et donner plus d’exemples de GUIs bien sympas histoire d’intéresser plus de monde 😉 Surement d’ici Pâques si je trouve le temps.

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • Freekour
                                      Freekour dernière édition par

                                      Bonjour,
                                      Je souhaiterai savoir si ce projet a été abandonné ou non car si tel est le cas c’est fortement dommage parce-que c’était vraiment une super idée. Surtout d’ajouter de nouveau composant au gui ect… Ct vraiment génial !!

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • Freekour
                                        Freekour dernière édition par

                                        Ce message a été supprimé !
                                        1 réponse Dernière réponse Répondre Citer 0
                                        • 1 / 1
                                        • Premier message
                                          Dernier message
                                        Design by Woryk
                                        Contact / Mentions Légales

                                        MINECRAFT FORGE FRANCE © 2018

                                        Powered by NodeBB