• Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Solved Enlever une keybind

    1.7.x
    1.7.10
    2
    25
    1988
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      PotTime last edited by

      Bonjour, bonsoir,

      Je code depuis peu mon mod, et en cliquant sur un bouton qui est dans mon gui que j’ai créer (sans erreur, testé et retesté) enlève une keybind.
      Et mon problème, c’est que je ne sais pas comment faire !
      J’ai bien éssayer de faire plusieur méthode ;

      
      FMLCommonHandler.instance().bus().register(this);
      keyBinding = new KeyBinding("Gui", Keyboard.KEY_M, "Mod");
      ClientRegistry.unregisterKeyBinding(keyBinding); // j'ai mis unregisterKeyBinding, mais non ça ne marche toujours pas !
      
      

      Quelqu’un pourrait m’aider 🙂

      PotTime

      1 Reply Last reply Reply Quote 0
      • Deleted
        Deleted last edited by

        Salut,
        pourquoi ne pas tout simplement enlever la ligne qui enregistre le keybind, puis relancer le jeu ensuite ?

        1 Reply Last reply Reply Quote 0
        • P
          PotTime last edited by

          Car je souhaite que la keybind s’enlève dès que le joueur clique sur la touche.

          1 Reply Last reply Reply Quote 0
          • Deleted
            Deleted last edited by

            Ah okay, je viens de comprendre.
            Eh bien il faut retirer toutes les entrées provoquées par l’ajout, à savoir l’entrée dans la list de la classe KeyBinding, dans la IntHashMap, et également dans le Set. Il ne pas oublier aussi de retirer l’élément ajouté à l’array de KeyBinding de la classe Minecraft.
            Tu peux t’inspirer de ce vieux code, si tu le souhaites :

            
               @EventHandler
               public void preInit(FMLPreInitializationEvent event)
               {
                if(event.getSide() == Side.CLIENT)
                {
                FMLCommonHandler.instance().bus().register(this);
                Minecraft mc = Minecraft.getMinecraft();
                KeyBinding[] arrayToReplace = (KeyBinding[])ArrayUtils.addAll(new KeyBinding[] {mc.gameSettings.keyBindAttack, mc.gameSettings.keyBindUseItem, mc.gameSettings.keyBindForward, mc.gameSettings.keyBindLeft, mc.gameSettings.keyBindBack, mc.gameSettings.keyBindRight, mc.gameSettings.keyBindJump, mc.gameSettings.keyBindSneak, mc.gameSettings.keyBindDrop, mc.gameSettings.keyBindInventory, mc.gameSettings.keyBindChat, mc.gameSettings.keyBindPlayerList, mc.gameSettings.keyBindPickBlock, mc.gameSettings.keyBindCommand, mc.gameSettings.keyBindScreenshot, mc.gameSettings.keyBindTogglePerspective, mc.gameSettings.keyBindSmoothCamera, mc.gameSettings.keyBindSprint, mc.gameSettings.field_152396_an, mc.gameSettings.field_152397_ao, mc.gameSettings.field_152398_ap, mc.gameSettings.field_152399_aq, mc.gameSettings.field_152395_am}, mc.gameSettings.keyBindsHotbar);
            
                KeyBinding f5ToRemove = Minecraft.getMinecraft().gameSettings.keyBindTogglePerspective;
                KeyBinding guiKeyToRemove = EventHandler_Keyboard.key_Menu;
                List var1 = ObfuscationReflectionHelper.getPrivateValue(KeyBinding.class, guiKeyToRemove, new String[]{"keybindArray", "field_74516_a"});
                IntHashMap var2 = ObfuscationReflectionHelper.getPrivateValue(KeyBinding.class, guiKeyToRemove, new String[]{"hash", "field_75840_j"});
                Set var3 = ObfuscationReflectionHelper.getPrivateValue(KeyBinding.class, guiKeyToRemove, new String[]{"keybindSet", "field_151473_c"});
            
                for(int i = 0; i < mc.gameSettings.keyBindings.length; i++)
                System.out.println(mc.gameSettings.keyBindings*.getKeyDescription());
            
                var3.remove("GobBob's Mods");
            
                ObfuscationReflectionHelper.setPrivateValue(KeyBinding.class, guiKeyToRemove, "key.categories.misc", new String[] {"keyCategory", "field_151471_f"});//key.categories.misc
            
                for(int i = 0; i < var1.size(); i++)
                {
                if("Mo'Bends Menu".equals(((KeyBinding)var1.get(i)).getKeyDescription()))
                var1.remove(i);
                }
            
                if(var2.containsItem(34))
                var2.removeObject(34);
            
                arrayToReplace = ArrayUtils.removeElement(arrayToReplace, guiKeyToRemove);
                mc.gameSettings.keyBindings = arrayToReplace;
                }
               }
            
            

            Mais méfiance à certaines choses, tels que l’array au début, que j’avais redéfinie. Si tu utilises d’autres mods rajoutant des Keybindings, fais attention à les rajouter en dépendances, et à également rajouter leur keybindings dans l’array. Ensuite fais attention à bien vérifie tes mappings en fonction du build de forge. Et pour finir modifie certaines choses dans les conditions pour retirer ton keybinding et non mon ancien que j’avais mis (“GobBob’s Mods” et “Mo’Bends Menu”, ainsi que le 34 du removeObject, à changer selon tes paramètres d’enregistrement).
            Peut-être qu’un autre membre trouvera un moyen + facile de virer ton keybinding, moi c’est ma solution.

            Tu peux sinon empêcher son rendu, et ainsi tu gagneras en lisibilité dans ton code.

            1 Reply Last reply Reply Quote 0
            • P
              PotTime last edited by

              Merci d’avoir donné ce code, je vais éssayer de le comprendre 😉


              Ah, une seule erreur que je trouve dans le code ou une erreur de ma part, je vois EventHandler_Keyboard
              Cela n’existe pas pourtant x)

              1 Reply Last reply Reply Quote 0
              • Deleted
                Deleted last edited by

                J’ai commis une petite erreur, je pense. Tu n’as pas besoin de redéfinir toute l’array au début, mais dans ce cas, à la ligne :
                arrayToReplace = ArrayUtils.removeElement(arrayToReplace, guiKeyToRemove);
                Tu remplaceras par :
                arrayToReplace = ArrayUtils.removeElement(mc.gameSettings.keyBindings, guiKeyToRemove);

                1 Reply Last reply Reply Quote 0
                • P
                  PotTime last edited by

                  Il est possible de simplifier le code ?
                  Il est quand même très long x)

                  1 Reply Last reply Reply Quote 0
                  • Deleted
                    Deleted last edited by

                    Je reconnais. Tu peux sinon empêcher le rendu de otn keybind en customisant le GuiControls, avec event et tout le tralala, et ainsi éviter de retirer le keybind des données, avec un nombre de lignes qui te paraîent trop conséquent. Perso, je ne trouve pas que cette seconde solution soit + facile.

                    1 Reply Last reply Reply Quote 0
                    • P
                      PotTime last edited by

                      Bon,
                      Sans trop en demander est-ce que il serait possible que tu me fasses un code comme celui de au dessus mais en plus “récent”.

                      1 Reply Last reply Reply Quote 0
                      • Deleted
                        Deleted last edited by

                        Ca veut dire quoi en + récent ?
                        Il date déjà de la 1.7.10, je ne vois pas comment faire + récent.

                        1 Reply Last reply Reply Quote 0
                        • P
                          PotTime last edited by

                          Bas en refaire un pour moi 🙂
                          Et j’ai détecter une petite érreur ;
                          EventHandler_Keyboard.key_Menu;
                          ça n’existe pas EventHandler_Keyboard 😮

                          1 Reply Last reply Reply Quote 0
                          • Deleted
                            Deleted last edited by

                            Le nom de ma variable veut tout dire : guiKeyToRemove .
                            Tu dois changer son ancienne valeur, par ton keybind à virer.

                            1 Reply Last reply Reply Quote 0
                            • P
                              PotTime last edited by

                              Certe, mais pourquoi EventHandler_Keyboard.key_Menu;


                              ça existe pas


                              Ah nan, jcrois savoir

                              1 Reply Last reply Reply Quote 0
                              • Deleted
                                Deleted last edited by

                                Il s’agit d’une classe que j’avais créée, normal que tu ne la possède pas…
                                Désormais, il faut que tu renseignes ta variable KeyBinding que tu souhaites virer quand le bouton est cliqué.
                                EDIT = La solution avec le moins de risques, est celle d’ouvrir un custom GuiControls, plutôt que de retirer des éléments. Fais ce que tu veux, mais je sens que tu vas galérer avec la première méthode, surtout si tu as un lourd modpack…

                                1 Reply Last reply Reply Quote 0
                                • P
                                  PotTime last edited by

                                  Ok, je vais faire un CustomGuiControls 😄


                                  Je te tiens au courant, je laisse la discution ouverte.

                                  1 Reply Last reply Reply Quote 0
                                  • Deleted
                                    Deleted last edited by

                                    D’acc, tu as fait le bon choix selon moi.
                                    Du coup tu feras à la manière du custom GuiMainMenu avec l’event GuiOpenEvent
                                    Tu te rendras alors vite compte que tu devras créer une nouvelle classe fille de GuiKeyBindingList, et réécrire la méthode drawScreen pour ne pas dessiner ton keybinding si ton bouton a déjà été cliqué. Du coup faut également stocker un boolean quelque part.

                                    1 Reply Last reply Reply Quote 0
                                    • P
                                      PotTime last edited by

                                      Tu peux me dire si se que je que je fais c’est bien ;
                                      J’ai copier les class KeyBinding et GameSettings via le code source de Forge et je l’ai mis dans un package que j’ai créer se nommant : fr.pottime.controls
                                      J’ai mis les 2 fichier source et dans GameSettings j’ai rajouter ma KeyBinding et là je suis en train de faire se qui faut pour que lorsque que j’appuis sur le bouton la touche se supprime.

                                      1 Reply Last reply Reply Quote 0
                                      • Deleted
                                        Deleted last edited by

                                        Non, ce n’est pas correct. Tu dois recréer le GuiControls avec une nouvelle classe héritant de GuiKeyBindingList, comme l’indique mon message précédent.
                                        Ca ne sert à rien de copier-coller des classes déjà existantes. Les tiennes ne seront pas load à la place de celles de mojang.

                                        1 Reply Last reply Reply Quote 0
                                        • P
                                          PotTime last edited by

                                          Ok, donc tu me dis si se que j’ai fait c’est bon,
                                          J’ai créer un nouveau package et dedans j’ai mis le GuiControls,
                                          j’ai fait un extends GuiKeyBindingList

                                          et dedans il y a ;

                                          
                                          public GuiControls(net.minecraft.client.gui.GuiControls p_i45031_1_, Minecraft p_i45031_2_) {
                                          super(p_i45031_1_, p_i45031_2_);
                                          
                                          }
                                          
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • Deleted
                                            Deleted last edited by

                                            Non, ce que tu fais n’a aucun sens.

                                            1 Reply Last reply Reply Quote 0
                                            • 1
                                            • 2
                                            • 1 / 2
                                            • First post
                                              Last post
                                            Design by Woryk
                                            Contact / Mentions Légales

                                            MINECRAFT FORGE FRANCE © 2018

                                            Powered by NodeBB