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

    Ajouter des touches personalisées

    Autres
    1.7.2
    19
    51
    13773
    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.
    • R
      rafoudiablol dernière édition par robin4002

      Vous saurez après avoir lu ce petit tuto comment créer vos touches personalisées et comment les gérer 😛

      Bug de la 1.7.2: Si jamais le joueur modifie les touches, elles ne sont pas enregistrées. C’est un bug dû à Minecraft (source) et j’espère qu’il sera corrigé rapidement.
      En attendant, il faudra mettre dans votre fichier de configuration la touche à utiliser…

      Sommaire

      1. Création d’une nouvelle touche
      2. Gestion de la touche
      3. Localization

      Création d’une nouvelle touche

      ProxyClient.java

      package test;
      
      import org.lwjgl.input.Keyboard;
      
      import cpw.mods.fml.client.registry.ClientRegistry;
      import net.minecraft.client.settings.KeyBinding;
      
      public class ProxyClient
      {
          private static KeyBinding keyBindTest;
      
          public ProxyClient()
          {
              keyBindTest = new KeyBinding("modtest.key", Keyboard.KEY_T, "key.categories.gameplay");
              ClientRegistry.registerKeyBinding(keyBindTest);
          }
      }
      

      Explications:

      Les contrôles ne sont disponibles que du côté client, donc il s’agit là de la classe client de votre proxy.
      Et puis on voit rarement un proxy serveur s’appeler ProxyClient.

      Voici le constructeur de KeyBinding:

      KeyBinding(String description, int keyId, String category);
      

      description: C’est le texte à afficher dans le gui des contrôles. Vous devrez l’ajouter dans votre fichier de langue.
      keyId: ID de la touche de l’api LWJGL. Liste complète des touches disponibles

      Pour vous, il vaut mieux prendre une constante de la classe Keyboard, pour mieux expliciter le code. Vous pouvez aussi directement saisir la valeur de la touche (pas conseillé…)

      category: catégorie à laquelle appartient votre nouvelle touche. Les catégories disponibles sont les mêmes que dans le Gui des contrôles, soit:

      • key.categories.movement (“mouvement”)
      • key.categories.inventory
      • key.categories.gameplay
      • key.categories.multiplayer ("multijoueur)
      • key.categories.misc (“utilitaires”, par exemple prendre un screenshot)

      J’ai décidé de mettre la nouvelle touche dans la catégorie gameplay, car elle servira à… afficher un message dans le chat. Oui c’est tout 😛

      Vous savez maintenant ajouter une touche au GUI des touches !
      C’est bien, mais on va voir comment l’utiliser.

      Gestion de la touche

      Il faudra traiter un évènement de FML pour vérifier si la touche est enfoncée ou non.
      Rajoutez déjà dans le constructeur de votre ProxyClient:

      FMLCommonHandler.instance().bus().register(this);
      

      Vous allons traiter l’évènement KeyInputEvent, qui est en fait un simple tick Minecraft.

      Comment savoir si une KeyBinding est enfoncée ?

      Il existe deux méthodes qui ont chacun leur utilité.

      final boolean hasBeenPressed = keyBindTest.isPressed();
      final boolean pressed = keyBindTest.getIsKeyPressed();
      

      La première méthode vérifie si la touche vient d’être appuyée. Même si le joueur laisse la touché enfoncé, la méthode ne renverra true qu’une seul fois par appui.
      La seconde vérifie si la touche est en train d’être appuyée, c’est à dire qu’elle renverra true tant que le joueur laisse la touche enfoncé. C’est l’option à choisir si vous voulez créer une touche de mouvement par exemple. Dans notre cas, pour un message dans le chat, nous ne sommes pas des floodeurs donc nous allons préférer la première option.

      
      @SubscribeEvent
      public void onEvent(KeyInputEvent event)
      {
          // Si vous remplacez isPressed() par getIsKeyPressed()
          // Le chat sera inondé à chaque fois que vous presserez la touche
      
          if(keyBindTest.isPressed())
          {
              keyTestTyped(); // Traitement de la touche
          }
      }
      
      private void keyTestTyped()
      {
          // La touche vient d'être appuyé !!
          Minecraft.getMinecraft().thePlayer.addChatComponentMessage(new ChatComponentText("lol, it works"));
      }
      

      ProxyClient.java

      package test;
      
      import net.minecraft.client.Minecraft;
      import net.minecraft.client.settings.KeyBinding;
      import net.minecraft.util.ChatComponentText;
      
      import org.lwjgl.input.Keyboard;
      
      import cpw.mods.fml.client.registry.ClientRegistry;
      import cpw.mods.fml.common.FMLCommonHandler;
      import cpw.mods.fml.common.eventhandler.SubscribeEvent;
      import cpw.mods.fml.common.gameevent.InputEvent.KeyInputEvent;
      
      public class ProxyClient
      {
          private static KeyBinding keyBindTest;
      
          public ProxyClient()
          {
              FMLCommonHandler.instance().bus().register(this);
              keyBindTest = new KeyBinding("modtest.key", Keyboard.KEY_T, "key.categories.gameplay");
              ClientRegistry.registerKeyBinding(keyBindTest);
          }
      
          @SubscribeEvent
          public void onEvent(KeyInputEvent event)
          {
              if(keyBindTest.isPressed())
              {
                  keyTestTyped();
              }
          }
      
          private void keyTestTyped()
          {
              Minecraft.getMinecraft().thePlayer.addChatComponentMessage(new ChatComponentText("lol, it works"));
          }
      }
      

      Localization

      Rajoutez enfin dans votre fichier de localization:

      en_US.lang

      modtest.key="Afficher un message utile dans le chat"
      

      Fin du tutoriel 🙂

      1 réponse Dernière réponse Répondre Citer 0
      • isador
        isador Moddeurs confirmés Modérateurs dernière édition par

        ou l’on met KeyBinding(String description, int keyId, String category); ?

        1 réponse Dernière réponse Répondre Citer 0
        • Superloup10
          Superloup10 Modérateurs dernière édition par

          Nulle part, c’est le constructeur de la class Keybinding.java

          Si vous souhaitez me faire un don, il vous suffit de cliquer sur le bouton situé en dessous.

          Je suis un membre apprécié et joueur, j'ai déjà obtenu 17 points de réputation.

          1 réponse Dernière réponse Répondre Citer 0
          • isador
            isador Moddeurs confirmés Modérateurs dernière édition par

            a ok autant pour moi

            tout les truc se mettent dans le client proxy?

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

              Apparemment il y avait aussi un second bug qui vient juste d’être corrigé avec le chargement des key :
              https://github.com/MinecraftForge/FML/commit/e8b60441ccca8cccdc130560b4c8bf400aebc605

              Sinon super tutoriel, bravo ! Je pense le déplacer lorsqu’un minimum de tutoriel 1.7 seront fait.

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

                Un très bon tutoriel ! 😮

                Mon site | GitHub

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

                  Up: l’évènement à gérer est maintenant KeyInputEvent, au lieu de RenderTickEvent.

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

                    Merci beaucoup pour ce tutoriel ! Je prévoyais de faire un mod Kamikaze (no-spoil) fallait donc un keybind ! Bref, merci beaucoup 😄

                    Si je t'ai aidé, n'hésites pas à mettre un point de réputation positif !
                    Si tu m'as aidé, je n'hésiterais pas à t'en donner à mon tour !

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

                      Je validerai le tutoriel quand j’aurai plus avancé dans le tutoriel de base pour 1.7.

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

                        Désolé de BIG up mais j’ai une question : quand je veux que l’event ait lieu sur le coté serveur, je fais comment ?

                        Si je t'ai aidé, n'hésites pas à mettre un point de réputation positif !
                        Si tu m'as aidé, je n'hésiterais pas à t'en donner à mon tour !

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

                          Paquet. Pas d’autres solutions, les touches ne sont que détecté en client.

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

                            D’accord je laisse tomber xD

                            Si je t'ai aidé, n'hésites pas à mettre un point de réputation positif !
                            Si tu m'as aidé, je n'hésiterais pas à t'en donner à mon tour !

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

                              J’ai un soucis avec le keyBinding et l’appliaction de son fonctionnement pour un jetpack.

                              J’ai ça actuellement:

                              @SubscribeEvent
                                  public void onEvent(KeyInputEvent event)
                                  {
                                      if(ModPg2.keyBindJetPack.getIsKeyPressed())
                                      {
                                          keyJetPackTyped();
                                      }
                                  }
                              
                                  private void keyJetPackTyped()
                                  {
                                      if(!Minecraft.getMinecraft().thePlayer.capabilities.isCreativeMode && Minecraft.getMinecraft().thePlayer.getEquipmentInSlot(3).getItem() == ModPg2.itemJetPack)
                                      {
                                          Minecraft.getMinecraft().thePlayer.getEquipmentInSlot(3).damageItem(1, Minecraft.getMinecraft().thePlayer);
                                          Minecraft.getMinecraft().thePlayer.motionY += 1.3;
                                      }
                                  }
                              

                              Donc quand j’appuie sur la touche je décolle. Mais il faut spammer la touche…
                              Ensuite j’ai utilisé une valeur booléenne enregistrée dans les tags de l’item mais je n’ai su que mettre la valeur true en ayant appuyé et du coup je décollais sans plus m’arrêter.

                              J’aimerais savoir comment obtenir un mouvement logique avec un jetpack.
                              Tant que j’appuie sur le bouton le joueur quitte le sol, quand on relâche la touche il retombe.
                              Le fonctionnement des touches personnalisées le permet-il vraiment?

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

                                je crois que la fonction n’est pas getIsKeyPressed dans ce cas mais une autre fonction : isPressed (à vérifier)

                                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
                                • Folgansky
                                  Folgansky Correcteurs dernière édition par

                                  Il existe deux méthodes qui ont chacun leur utilité.

                                  
                                  final boolean hasBeenPressed = keyBindTest.isPressed();
                                  final boolean pressed = keyBindTest.getIsKeyPressed();
                                  
                                  

                                  La première méthode vérifie si la touche vient d’être appuyée. Même si le joueur laisse la touché enfoncé, la méthode ne renverra true qu’une seul fois par appui.
                                  La seconde vérifie si la touche est en train d’être appuyée, c’est à dire qu’elle renverra true tant que le joueur laisse la touche enfoncé. C’est l’option à choisir si vous voulez créer une touche de mouvement par exemple. Dans notre cas, pour un message dans le chat, nous ne sommes pas des floodeurs donc nous allons préférer la première option.

                                  Y’a rien qui permet de détecter quand on relâche la touche.
                                  Et j’ai testé les deux méthodes, dans les deux cas ça ne permet pas le fonctionnement d’un jetpack, la méthode n’est appelée qu’une fois, aussi longtemps qu’on reste appuyé ou non.

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

                                    C’est à cause de ton event, lui n’est appelé que quand tu appuie, pas quand tu maintient, il faudrait que t’essaye avec le ClientTickEvent.

                                    Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                                    AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                                    Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                                    Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

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

                                      cette fonction renvoie true tant que la touche est appuyée il me semble, ou alors tu peux utiliser le temps pendant lequel elle est pressée sinon

                                      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
                                      • robin4002
                                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                                        @‘AymericRed’:

                                        C’est à cause de ton event, lui n’est appelé que quand tu appuie, pas quand tu maintient, il faudrait que t’essaye avec le ClientTickEvent.

                                        +1

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

                                          Bonjour,
                                          Après avoir faits comme le tuto j’ai remarqué que ça ne prenait pas les commande du type “/etpyes, /clear etc.”.
                                          J’aimerais savoir si quelqu’un pourrait m’aider à faire cette manip . Que quand j’appuie exemple sur ma touche “F” sa me fasse la commande “/clear”.
                                          Merci.

                                          EDIT: Version du mod: 1.7.10   🙂

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

                                            Minecraft.getMinecraft().thePlayer.addChatComponentMessage(new ChatComponentText(“message”)
                                            permet d’envoyer un message dans le chat du client, pas d’exécuter une commande.
                                            Pour exécuter une commande il faut envoyer un message au serveur :
                                            Minecraft.getMinecraft().thePlayer.sendChatMessage(“message ou commande”);

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

                                            MINECRAFT FORGE FRANCE © 2018

                                            Powered by NodeBB