MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Ajouter un bouton dans l'inventaire.

    Planifier Épinglé Verrouillé Déplacé Sans suite
    16 Messages 3 Publieurs 5.8k Vues 1 Watching
    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.
    • robin4002R Hors-ligne
      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
      dernière édition par

      https://github.com/MinecraftForge/MinecraftForge/blob/master/src/main/java/net/minecraftforge/client/event/GuiScreenEvent.java#L31
      Avec cette event tu as accès à la liste de bouton, donc peut tu peux en ajouter normalement.

      1 réponse Dernière réponse Répondre Citer 0
      • mathmatboyM Hors-ligne
        mathmatboy
        dernière édition par

        Merci et j’ai une question ? est ce que c’est mieux que je créer un class fait pour sa ou je peu mettres dans ma class GuiBoutique ?

        Aussi, le public List boutonList; est ce que je remplace par public guiInventory inventaire; ??

        1 réponse Dernière réponse Répondre Citer 0
        • RedRelayR Hors-ligne
          RedRelay Moddeurs confirmés
          dernière édition par

          ​
          
          
          1. [size=xx-small​] @SubscribeEvent

          2. [size=xx-small @SideOnly](Side.CLIENT)

          3. [size=xx-small public] void onTickClient(TickEvent.ClientTickEvent event)

          4. [size=xx-small {] if(event.phase == Phase.END)

          5. [size=xx-small {]

          6. [size=xx-small Minecraft] mc = Minecraft.getMinecraft();

          7. [size=xx-small GuiScreen] currentScreen = mc.currentScreen;

          8. GuiBoutique customMenu = new GuiBoutique();

          9. [size=xx-small }}]

          –------------------------------------------------------------------------------------
          Si tu trouves mon intervention pertinente, n'hésite pas a m…

          1 réponse Dernière réponse Répondre Citer 0
          • robin4002R Hors-ligne
            robin4002 Moddeurs confirmés Rédacteurs Administrateurs
            dernière édition par

            @‘mathmatboy’:

            Merci et j’ai une question ? est ce que c’est mieux que je créer un class fait pour sa ou je peu mettres dans ma class GuiBoutique ?

            Aussi, le public List boutonList; est ce que je remplace par public guiInventory inventaire; ??

            Hein ? C’est un event a utiliser, tu peux mettre ça dans n’importe quelle classe qui est enregistré avec MinecraftForge.EVENT_BUS.register et concernant l’histoire du boutonList je ne vois pas du tout pourquoi tu veux le remplacer.

            1 réponse Dernière réponse Répondre Citer 0
            • mathmatboyM Hors-ligne
              mathmatboy
              dernière édition par

              @‘robin4002’:

              Hein ? C’est un event a utiliser, tu peux mettre ça dans n’importe quelle classe qui est enregistré avec MinecraftForge.EVENT_BUS.register et concernant l’histoire du boutonList je ne vois pas du tout pourquoi tu veux le remplacer.

              Ok merci pour info mais pour l’histoire du boutonList, je comprend pas comment je fait pour qu’il trouve ma class guiInventory et mettre le bouton.

              @‘Blackout’:

              1. [size=xx-small @SubscribeEvent]

              2. [size=xx-small@SideOnly](Side.CLIENT)

              3. [size=xx-smallpublic] void onTickClient(TickEvent.ClientTickEvent event)

              4. [size=xx-small{] if(event.phase == Phase.END)

              5. [size=xx-small{]

              6. [size=xx-smallMinecraft] mc = Minecraft.getMinecraft();

              7. [size=xx-smallGuiScreen] currentScreen = mc.currentScreen;

              8. GuiBoutique customMenu = new GuiBoutique();

              9. [size=xx-small}}]

              1 réponse Dernière réponse Répondre Citer 0
              • RedRelayR Hors-ligne
                RedRelay Moddeurs confirmés
                dernière édition par

                Il doit te manquer un sacré bagage en Java, tu devrais prendre des cours hors minecraft pour t’améliorer et comprendre le code que tu écris.

                Quand tu fais un GuiBoutique customMenu = new GuiBoutique(); tu reserves un nouvel espace mémoire dans la RAM qui va acceuillir ton objet, et on te renvoie un pointeur (c’est a dire une adresse mémoire sur 4 octects) qui va te permettre d’accéder a l’objet. customMenu est donc un lien vers une zone mémoire. Ton pointeur est local a la fonction, a la fin de la fonction tu n’a plus aucun moyen d’y accédé.
                En Java, il faudra attendre que le garbage collector, c’est a dire un processus propre a java que tu ne contrôle pas, inspecte la mémoire pour libérer les zones mémoires dont tu n’a plus l’accès.

                Ici, a chaque tick client, la fonction est appelé, réserve une nouvelle zone mémoire et te donne un pointeur que tu vu perdre directement.
                Donc rien n’est enregistré.

                Tu n’as pas besoin d’enregistrer tes GUI, par contre il faut enregistrer tes handlers.
                Le fonctionnement est assez simple. Pour faire simple, Forge possède des objets qui contient des listes de pointeurs.
                Par exemple lorsque dans Minecraft tu ouvre un GUI, l’objet de forge est prévenu qu’un GUI s’est ouvert, il parcours tous ses pointeurs et appelle la methode qui va bien en fonction du type d’événement.

                Toujours pour faire simple, l’objet qui s’occupe de ça, c’est MinecraftForge.EVENT_BUS et la méthode register() permet de demander a l’objet d’ajouter ton pointeur a cette fameuse liste. Donc ici ton objet est enregistré, le programme garde toujours un pointeur vers l’objet qui se trouve dans la liste.

                Ce n’est pas ton GUI qu’il faut enregistrer, c’est ton handler, c’est a dire un classe qui va posséder des methodes qui pourront être appelé selon l’événement.

                Ici, il te faut donc 1 handler : il faut que tu détectes quand un GUI est ouvert, que tu checks si le GUI ouvert est celui de l’inventaire, si c’est le cas tu dois ajouter ton bouton au GUI.

                Généralement je n’aime pas donner du code, j’espère que tu tentera de le comprendre au lieu de faire un simple copier/coller. Comme je l’ai dit plus tu as besoin de plus de base en Java avant de faire du modding je pense. Sinon tu va bloquer toute les 5 minutes.

                Voici l’Handler que tu dois avoir :

                public class InventoryInitHandler (tu choisis le nom que tu veux, ça n'a pas d'importance) {
                
                @SubscribeEvent
                
                public void onGuiInit(InitGuiEvent event) { //tu n'es pas obliger de choisir le nom onGuiInit
                if(event.gui instanceof GuiInventory) { //Si le GUI qui s'initialise est du type GuiInventory
                event.buttonList.add(new MonBouton()); //J'ajoute mon bouton a la liste de bouton
                }
                }
                }
                

                Ensuite, il faut enregistrer ton handler, ce bout de code chacun le place un peu ou il veut. Moi j’ai une methode registerHandler() dans mon CommonProxy. MinecraftForge.EVENT_BUS.register(new InventoryInitHandler());

                Il te faut ensuite faire ton bouton :

                ​public class MonBouton extends GuiButton {
                
                public MonBouton() {
                //tu remplaces par ce que tu veux, les variables selon tes besoins, evite d'utiliser un ID déjà pris par l'inventaire par contre
                super(int id, int xPosition, int xPosition, int width /*Facultatif*/, int height/*Facultatif*/, String displayString);
                }
                
                /**
                * Appelé lorsque l'utilisateur clique sur le bouton
                */
                @Override
                public void mouseReleased(int mouseX, int mouseY) {
                super.mouseReleased(mouseX, mouseY);
                Minecraft.getMinecraft().displayGuiScreen(new MonGuiPerso()); //Tu ouvre ton Gui
                }
                
                }
                

                Ensuite tu fais ton GUI

                ​public class MonGuiPerso extends GuiInventory {
                
                public MonGuiPerso() {
                super(Minecraft.getMinecraft().thePlayer);
                }
                
                /* Tu surcharges les methodes dont tu as besoin, tu joues avec les variables etc … */
                
                }
                

                –------------------------------------------------------------------------------------
                Si tu trouves mon intervention pertinente, n'hésite pas a m…

                1 réponse Dernière réponse Répondre Citer 1
                • mathmatboyM Hors-ligne
                  mathmatboy
                  dernière édition par

                  Ah j’y vois déjà beaucoup plus clairs !! et j’ai une question ? ou je pourrai apprendre a enforcir mon java correctement car oui sa pas des année je code non plus sa fait seulement 7 mois environ.

                  1 réponse Dernière réponse Répondre Citer 0
                  • mathmatboyM Hors-ligne
                    mathmatboy
                    dernière édition par

                    j’ai un problème avec 2 class j’ai un peu modifier ta class “MonBouton” car la méthode fonctionnait pas et j’ai donc modifier mais sa toujours pas fonctionner et l’autres class aucune idée comment les réglés les erreurs.

                    L’images : 

                    1 réponse Dernière réponse Répondre Citer 0
                    • robin4002R Hors-ligne
                      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                      dernière édition par

                      What ? Il sort d’où ce Init dans la classe ??! ça n’a rien à faire la, c’est impossible en Java ça x)
                      Et pareil pourquoi tu as foutu super.buttonList x) ?

                      1 réponse Dernière réponse Répondre Citer 0
                      • mathmatboyM Hors-ligne
                        mathmatboy
                        dernière édition par

                        Bon voila j’ai enlever le  init et je t’explique pourquoi j’ai mis sa, j’ai mis sa car blackout a dit tu pouvais mettre n’importez quoi et que sa avait pas d’importance et donc j’ai mis init car javais pas d’idée quoi mettre xd.

                        Et j’ai donc enlever le init et pour le bouton j’ai mis celui de blackout et voila les erreur =>

                        1 réponse Dernière réponse Répondre Citer 0
                        • robin4002R Hors-ligne
                          robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                          dernière édition par

                          MinecraftForge.EVENT_BUS.register(new TaClasse()) que tu peux mettre n’importe où dans la classe principale, et par exemple dans init

                          Et
                          public class NomDeClass()
                          {
                          ce n’est toujours pas valide …
                          Mais tu code en Java ou non ? C’est pourtant évidant pour n’importe qui qu’il faut mettre 
                          public class NomDeClass
                          {

                          Idem pour les int  / String qui n’ont rien à faire là dans l’autre classe, c’est du Java u_U

                          1 réponse Dernière réponse Répondre Citer 0
                          • mathmatboyM Hors-ligne
                            mathmatboy
                            dernière édition par

                            Aucune idée comment réglé.

                            1 réponse Dernière réponse Répondre Citer 0
                            • robin4002R Hors-ligne
                              robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                              dernière édition par

                              Dans ce cas il serait temps d’apprendre le java …

                              public MonBouton(int id, int xPosition, int xPosition, String displayString)
                              {
                              super(id, xPosition, xPosition, displayString);
                              }
                              
                              1 réponse Dernière réponse Répondre Citer 0
                              • RedRelayR Hors-ligne
                                RedRelay Moddeurs confirmés
                                dernière édition par

                                1- Il n’y a pas de (Init) après le nom de ta classe quand j’écris que tu choisis le nom que tu veux c’était pour [size=xx-smallInventoryInitHandler]
                                2 - ça ne sert a rien d’avoir des variables static width et height : elle sont déjà dans la classe mère, c’est eux que tu dois modifier.
                                3 - Un bouton ne possède pas de bouton a l’intérieur buttonList ne sert a rien dans ta classe.

                                Pour apprendre lentement, avec des illustrations, du blabla comme si tu avais un jeune mentor en face de toi et plein plein d’exemple : http://openclassrooms.com/courses/apprenez-a-programmer-en-java

                                Si tu veux aller plus vite, sans blabla, que l’essentiel : http://jmdoudoux.developpez.com/cours/developpons/java/

                                Le dernier liens et très complet, tu n’auras pas besoin de tout lire jusqu’au bout pour faire des mods, il est plus professionnel que le premier.

                                Mais franchement apprend le Java, ça sert a rien de continuer modder avec tes connaissances. Je ne dis pas ça pour te décourager, au contraire. Sans connaissance de base, tu n’arriveras a rien même en travaillant durant des plombs et c’est ça qui va te décourager. Avec les liens que je t’ai mis, tu va apprendre et tu va réutiliser ce que tu a appris dans tes mods.
                                Je te conseil le second liens, mais tout dépend de comment tu veux apprendre.

                                –------------------------------------------------------------------------------------
                                Si tu trouves mon intervention pertinente, n'hésite pas a m…

                                1 réponse Dernière réponse Répondre Citer 1
                                • mathmatboyM Hors-ligne
                                  mathmatboy
                                  dernière édition par

                                  Merci de ta réponse blackout, j’ai déjà un peu commencer sur openclassrooms mais je vais aller faire un tour sur celui que tu conseil ! Merci encore !

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • 1 / 1
                                  • Premier message
                                    Dernier message
                                  Design by Woryk
                                  ContactMentions Légales

                                  MINECRAFT FORGE FRANCE © 2024

                                  Powered by NodeBB