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

                                C’est bon affaire résulu, je bidouiller dans l’algo, j’ai trouver une solution merci pour votre aide !

                                1 réponse Dernière réponse Répondre Citer 0
                                • jglrxavpokJ Hors-ligne
                                  jglrxavpok Modérateurs
                                  dernière édition par

                                  Poste la solution au cas où quelqu’un en ait besoin 😉

                                  Sent from my GT-I9000 using Tapatalk 2

                                  Modérateur sur MFF. 
                                  Mon Github: http://github.com/jglrxavpok
                                  Mon compte Steam si vous voulez jouer à CS:GO ou TF2 avec moi: https://steamcommunity.com/id/jglrxavpok/

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

                                    ​    @SubscribeEvent
                                        public void onClientTickEvent(ClientTickEvent event)
                                        {
                                            if(event.phase == Phase.END)
                                            {
                                                int i = Keyboard.getEventKey() == 0 ? Keyboard.getEventCharacter() : Keyboard.getEventKey();
                                    
                                                if(i != 0 && !Keyboard.isRepeatEvent())
                                                {
                                                    if(!(mc.currentScreen instanceof GuiControls) || ((GuiControls)mc.currentScreen).time <= Minecraft.getSystemTime() - 20L)
                                                    {
                                                        if(Keyboard.getEventKeyState())
                                                        {
                                                            if(i == keyScreen.getKeyCode())
                                                            {
                                                                if(!press)
                                                                {
                                                                   //Action
                                                                }
                                                            }
                                                        }
                                                        else
                                                        {
                                                            this.press = false;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    

                                    press un boolean init a false au début 😄

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

                                    MINECRAFT FORGE FRANCE © 2024

                                    Powered by NodeBB