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

    Résolu Probleme de touche

    1.7.x
    1.7.x
    4
    34
    5842
    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.
    • Fanor79
      Fanor79 dernière édition par

      Bonjour, je suis entrain de faire un mod avec des actions de touche, et je voudrais savoir si c’est possible de faire en sorte que même si un gui est ouvert la touche sois pris en compte du genre comme le F2 pour le screen, ? j’ai regarder dans le code mais ça ne marche pas chez moi, une solutions ?

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

        Le fait qu’un gui soit ouverte n’est pas sensé bloquer les touches si ?
        En tout cas l’event de tick fonctionne toujours donc …

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

          apparemment si, j’ai fait des test, genre ecrire dans le chat “salut” quand on appui sur la touche U par exemple ça marche sauf quand on es dans l’inventaire. et pour l’event de tick il y a moyen de tout modifier pour quelque sois le gui d’ouvert ?

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

            Envoies ton code. Car j’ai vérifiés la touche screenshot n’utilise rien de spécial.

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

              public ClientProxy()
              {
              FMLCommonHandler.instance().bus().register(this);
              keyScreen = new KeyBinding("Screen", Keyboard.KEY_U, "Ushare");
              keyGui = new KeyBinding("Gui", Keyboard.KEY_Y, "Ushare");
              
              ClientRegistry.registerKeyBinding(keyScreen);
              ClientRegistry.registerKeyBinding(keyGui);
              }
              
              @SubscribeEvent
                  public void onEvent(KeyInputEvent event)
                  {
                      int i = Keyboard.getEventKey() == 0 ? Keyboard.getEventCharacter() : Keyboard.getEventKey();
                      Minecraft mc = Minecraft.getMinecraft();
              
                      if (i != 0 && !Keyboard.isRepeatEvent())
                      {
                          if (!(mc.currentScreen instanceof GuiControls) || ((GuiControls)mc.currentScreen).time <= mc.getSystemTime() - 20L)
                          {
                              if (Keyboard.getEventKeyState())
                              {
                                  if(i == keyScreen.getKeyCode())
                                  {
              
                                    SendFile sfile = new SendFile("sendfile");
              
                                      sfile.start()
                                  }
                              }
                          }
                      }
                 }
              

              J’ai tester plusieurs de façon, mais là j’ai essayer d’un peut copier coller ce que mojang avais fait pour leurs screnshot

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

                Mets un System.out.println dans ta fonction pour vérifier que la méthode est bien appelée, je pense qu’il y a un problème dans tes conditions.

                Site web contenant mes scripts : http://SCAREXgaming.github.io

                Pas de demandes de support par MP ni par skype SVP.
                Je n'accepte sur skype que l…

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

                  Peut etre pour la condition oui, mais je ne vois pas ou 😕 mais j’avais déjà mis un system.out avant mais je l’ai enlever je ne sais pas pourquoi ^^’

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

                    Tu peux les remettre, çà prend 2 secondes…

                    Site web contenant mes scripts : http://SCAREXgaming.github.io

                    Pas de demandes de support par MP ni par skype SVP.
                    Je n'accepte sur skype que l…

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

                      j’ai remis c’est bon, mais ça m’aide toujours pas 😕

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

                        Envoie ton code avec les System.out.print et dit nous ce que tu vois dans les logs lorsque tu appuies sur ta touche.

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

                          @SubscribeEvent
                          public void onEvent(KeyInputEvent event)
                          {
                          int i = Keyboard.getEventKey() == 0 ? Keyboard.getEventCharacter() : Keyboard.getEventKey();
                          Minecraft mc = Minecraft.getMinecraft();
                          
                          if(i == keyScreen.getKeyCode())
                          {
                          System.out.println("ok!");
                          }
                          
                          if (i != 0 && !Keyboard.isRepeatEvent())
                          {
                          if (!(mc.currentScreen instanceof GuiControls) || ((GuiControls)mc.currentScreen).time <= mc.getSystemTime() - 20L)
                          {
                          if (Keyboard.getEventKeyState())
                          {
                          if(i == keyScreen.getKeyCode())
                          {
                          System.out.println("ok");
                          // SendFile sfile = new SendFile("sendfile");
                          // sfile.start();
                          }
                          }
                          }
                          }
                          
                          }
                          

                          Voilà j’ai fais deux test, et dans aucun des deux cas, quand je suis dans mon inventaire ça n’écrit ok ou ok! dans la console

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

                            Et comme ça :

                            @SubscribeEvent
                            public void onEvent(KeyInputEvent event)
                            {
                            System.out.println("debug 1");
                            int i = Keyboard.getEventKey() == 0 ? Keyboard.getEventCharacter() : Keyboard.getEventKey();
                            Minecraft mc = Minecraft.getMinecraft();
                            
                            if(i == keyScreen.getKeyCode())
                            {
                            System.out.println("debug 2");
                            }
                            
                            if (i != 0 && !Keyboard.isRepeatEvent())
                            {
                            System.out.println("debug 3");
                            if (!(mc.currentScreen instanceof GuiControls) || ((GuiControls)mc.currentScreen).time <= mc.getSystemTime() - 20L)
                            {
                            System.out.println("debug 4");
                            if (Keyboard.getEventKeyState())
                            {
                            if(i == keyScreen.getKeyCode())
                            {
                            System.out.println("debug 5");
                            // SendFile sfile = new SendFile("sendfile");
                            // sfile.start();
                            }
                            }
                            }
                            }
                            
                            }
                            

                            ?

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

                              ça va jusqu’au 5 quand je ne suis dans aucun gui, mais quand je suis dans un gui, rien ne fonctionne

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

                                J’ai regardé ou était déclenché l’event en question, mais je n’ai pas trouvé ce qui fait qu’il ne s’exécute pas quand tu es dans un gui.
                                J’ai trouvé ça :

                                if (this.currentScreen != null)
                                {
                                this.currentScreen.handleKeyboardInput();
                                }
                                

                                Mais il n’y a rien qui l’arrête après. En revanche dans GuiScreen.handleKeyboardInput() la fonction Minecraft.dispatchKeypresses() est appelé, et c’est elle qui gère la touche échap, F2, etc … (les touches qu’on peut faire dans un gui).

                                Donc tu avais raison, il semble bien que l’event ne se déclenche pas lorsqu’on est dans un gui.
                                Du-coup utilise plutôt l’event de tick (celui de rendu ou du joueur, peu importe). par contre si tu utilise celui du rendu pense bien à vérifier Minecraft.getMinecraft().theWorld ne soit pas null, sinon tu risque d’avoir des mauvaises surprise (du genre crash du jeu lorsqu’on est sur le menu est qu’on appuie sur la touche).

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

                                  ok je vais regarder merci ! 😄

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

                                    C’est bon affaire résolu, j’ai juste un petit problème de spam dans la console, mais je réglerais ça 😄

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

                                      Bon je dois avoir un gros probleme niveau algo, j’ai trouver une procédure qui permet d’executer uniquement une action, mais ça ne marche plus quand un gui est ouvert

                                      @SubscribeEvent
                                      public void onPlayerTick(PlayerTickEvent event)
                                      {
                                      int i = Keyboard.getEventKey() == 0 ? Keyboard.getEventCharacter() : Keyboard.getEventKey();
                                      
                                      if (!(mc.currentScreen instanceof GuiControls) || ((GuiControls)mc.currentScreen).time <= Minecraft.getSystemTime() - 20L)
                                      {
                                      if (Keyboard.getEventKeyState())
                                      {
                                      if(i == keyScreen.getKeyCode())
                                      {
                                      if(keyScreen.isPressed())
                                      {
                                      System.out.println("OK");
                                      }
                                      
                                      //SendFile sfile = new SendFile("sendfile");
                                      //sfile.start();
                                      }
                                      }
                                      }
                                      }
                                      

                                      isPressed marche uniquement quand je ne suis pas dans un gui, sinon il ne marche pas, et je ne vois pas comment faire, juste pour executer une action

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

                                        Oui car tu utilises le PlayerTick event, or certains Gui mettent en pause le jeu, donc à ce moment là le tickEvent n’est plus exécuté, utilises le ClientTickEvent (penses aussi à préciser si c’est le post ou le pre, avant ou après que le cleint fasses le tick, çà évite que la méthode soit appelée 2 fois par tick)

                                        Site web contenant mes scripts : http://SCAREXgaming.github.io

                                        Pas de demandes de support par MP ni par skype SVP.
                                        Je n'accepte sur skype que l…

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

                                          C’est bien les PHASE qui permete de déterminer non ?

                                          if(event.phase == Phase.START)
                                          

                                          ?

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

                                            Oui. Il y a toujours de phase de tick, au début et à la fin.

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

                                            MINECRAFT FORGE FRANCE © 2018

                                            Powered by NodeBB