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.
    • 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