MFF

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

    Probleme de touche

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.x
    34 Messages 4 Publieurs 6.5k 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

      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
      • Fanor79F Hors-ligne
        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
        • robin4002R Hors-ligne
          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
          • Fanor79F Hors-ligne
            Fanor79
            dernière édition par

            ok je vais regarder merci ! 😄

            1 réponse Dernière réponse Répondre Citer 0
            • Fanor79F Hors-ligne
              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
              • Fanor79F Hors-ligne
                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
                • SCAREXS Hors-ligne
                  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
                  • Fanor79F Hors-ligne
                    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
                    • robin4002R Hors-ligne
                      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
                      • Fanor79F Hors-ligne
                        Fanor79
                        dernière édition par

                        Ca limite effictement le System.out.println() mais quand on laisse appuyer ça continue quand meme, et ça m’envoie toujours deux par deux mais avec un lapse de temps plus grand ;/

                        :::

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

                        :::

                        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

                          Oui car ClientTickEvent n’est pas prévu pour cette usage à la base …

                          Sur un des mods que je dev avec Kévin on fait comme ça :
                          https://github.com/FFMT/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotechmod/ultimategravisuite/client/UGSClientEventHandler.java#L20-L24
                          https://github.com/FFMT/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotechmod/ultimategravisuite/client/UGSKeyboardClient.java#L30-L36
                          En fait on enregistre dans une variable quelle touche ont été pressé au tick précédent, et donc si la touche a déjà été appuyé en envoie pas le packet (et après le reste est géré côté serveur). Tu devrais utiliser ce même principe, vérifier que la touche a déjà été pressé au tick précédent et si oui ne rien faire.

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

                            OK, je vais y jeté un œil merci :D___humm ça limite (même si ça s’envoie toujours pas paire, une fois qu’on appuie, mais du coup ça ne marche toujours pas dans une interface___ça fonctionne mais pas dans les interfaces 😕

                            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

                              Toujours pas ? Pas possible, ClientTickEvent est appelé à chaque tick …

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

                                bha …. j’ai l’impressions que le isPressed marche pas quand le gui est ouvert.

                                ​public class ClientProxy extends CommonProxy{
                                
                                    public static KeyBinding keyScreen;
                                    private int lastKeyState = 0;
                                
                                    public ClientProxy()
                                    {
                                        FMLCommonHandler.instance().bus().register(this);
                                        keyScreen = new KeyBinding("Screen", Keyboard.KEY_U, "Ushare");
                                
                                        ClientRegistry.registerKeyBinding(keyScreen);
                                    }
                                
                                    @SubscribeEvent
                                    public void onClientTickEvent(ClientTickEvent event)
                                    {
                                        if(event.phase == Phase.END)
                                        {
                                            sendKeyUpdate();
                                
                                            //SendFile sfile = new SendFile("sendfile");
                                            //sfile.start();
                                        }
                                
                                    }
                                
                                    public void sendKeyUpdate()
                                    {
                                        int currentKeyState = (keyScreen.isPressed() ? 1 : 0) << 0;
                                        if(currentKeyState != this.lastKeyState)
                                        {
                                            lastKeyState = currentKeyState;
                                            System.out.println("ok");
                                        }
                                    }
                                
                                }
                                
                                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

                                  Sinon faut faire comme Minecraft :

                                  ​    public void dispatchKeypresses()
                                      {
                                          int i = Keyboard.getEventKey() == 0 ? Keyboard.getEventCharacter() : Keyboard.getEventKey();
                                  
                                          if (i != 0 && !Keyboard.isRepeatEvent())
                                          {
                                              if (!(this.currentScreen instanceof GuiControls) || ((GuiControls)this.currentScreen).time <= getSystemTime() - 20L)
                                              {
                                                  if (Keyboard.getEventKeyState())
                                                  {
                                                      if (i == this.gameSettings.keyBindStreamStartStop.getKeyCode())
                                                      {
                                                          if (this.getTwitchStream().func_152934_n())
                                                          {
                                                              this.getTwitchStream().func_152914_u();
                                                          }
                                                          else if (this.getTwitchStream().func_152924_m())
                                                          {
                                                              this.displayGuiScreen(new GuiYesNo(new GuiYesNoCallback()
                                                              {
                                                                  private static final String __OBFID = "CL_00001852";
                                                                  public void confirmClicked(boolean result, int id)
                                                                  {
                                                                      if (result)
                                                                      {
                                                                          Minecraft.this.getTwitchStream().func_152930_t();
                                                                      }
                                  
                                                                      Minecraft.this.displayGuiScreen((GuiScreen)null);
                                                                  }
                                                              }, I18n.format("stream.confirm_start", new Object[0]), "", 0));
                                                          }
                                                          else if (this.getTwitchStream().func_152928_D() && this.getTwitchStream().func_152936_l())
                                                          {
                                                              if (this.theWorld != null)
                                                              {
                                                                  this.ingameGUI.getChatGUI().printChatMessage(new ChatComponentText("Not ready to start streaming yet!"));
                                                              }
                                                          }
                                                          else
                                                          {
                                                              GuiStreamUnavailable.func_152321_a(this.currentScreen);
                                                          }
                                                      }
                                                      else if (i == this.gameSettings.keyBindStreamPauseUnpause.getKeyCode())
                                                      {
                                                          if (this.getTwitchStream().func_152934_n())
                                                          {
                                                              if (this.getTwitchStream().isPaused())
                                                              {
                                                                  this.getTwitchStream().func_152933_r();
                                                              }
                                                              else
                                                              {
                                                                  this.getTwitchStream().func_152916_q();
                                                              }
                                                          }
                                                      }
                                                      else if (i == this.gameSettings.keyBindStreamCommercials.getKeyCode())
                                                      {
                                                          if (this.getTwitchStream().func_152934_n())
                                                          {
                                                              this.getTwitchStream().func_152931_p();
                                                          }
                                                      }
                                                      else if (i == this.gameSettings.keyBindStreamToggleMic.getKeyCode())
                                                      {
                                                          this.stream.func_152910_a(true);
                                                      }
                                                      else if (i == this.gameSettings.keyBindFullscreen.getKeyCode())
                                                      {
                                                          this.toggleFullscreen();
                                                      }
                                                      else if (i == this.gameSettings.keyBindScreenshot.getKeyCode()) // screenshot ici
                                                      {
                                                          this.ingameGUI.getChatGUI().printChatMessage(ScreenShotHelper.saveScreenshot(this.mcDataDir, this.displayWidth, this.displayHeight, this.framebufferMc));
                                                      }
                                                  }
                                                  else if (i == this.gameSettings.keyBindStreamToggleMic.getKeyCode())
                                                  {
                                                      this.stream.func_152910_a(false);
                                                  }
                                              }
                                          }
                                      }
                                  
                                  1 réponse Dernière réponse Répondre Citer 0
                                  • Fanor79F Hors-ligne
                                    Fanor79
                                    dernière édition par

                                    c’est ce que j’avais essayer de faire au début

                                    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

                                      Si tu utilises tickEvent + ces 3 conditions :

                                             int i = Keyboard.getEventKey() == 0 ? Keyboard.getEventCharacter() : Keyboard.getEventKey();
                                             if (i != 0 && !Keyboard.isRepeatEvent())
                                             {
                                                 if (!(this.currentScreen instanceof GuiControls) || ((GuiControls)this.currentScreen).time <= getSystemTime() - 20L)
                                                 {
                                                     if (Keyboard.getEventKeyState())
                                      
                                      • celle pour ta touche bien sûr
                                        ça donne quoi ?
                                      1 réponse Dernière réponse Répondre Citer 0
                                      • Fanor79F Hors-ligne
                                        Fanor79
                                        dernière édition par

                                        ça marche mais ça spam toujours 😕

                                        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

                                          Et avec un if(Keyboard.next()) en plus ?

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

                                            ça ne marche plus apres je ne sais pas si ou il se trouve dans l’imbrication a de l’importance …

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

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB