Navigation

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

    SOLVED GuiTextField password

    1.7.x
    1.7.10
    3
    27
    2687
    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
      PlayFlop_ last edited by

      Bonjour a vous communauté de MFF.

      Je voudrais que Graphiquement, mon texte dans le GuiTextField soit remplacé par des étoiles.

      J’ai essayé de faire un .replaceAll mais du coup sa remplace le mdp ^^

      Je voudrais que ce soit graphique qu’on ne voit pas le mot de passe.

      Merci de votre aide !

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

        Salut, tu peux créer une classe custom de GuiTextField, et override la méthode drawTextBox.
        Ou bien garder la classe vanilla mais à chaque appel de keyTyped sur ton GuiScreen, t’isoles les caractères tappés (normalement dans ton GuiTextField) vers un autre String, pour les remplacer ensuite par des étoiles.
        Voilà tu as ces deux solutions qui se valent selon moi.

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

          Je pense faire le custom field

          Envoyé de mon ZTE BLADE V7 LITE en utilisant Tapatalk


          @‘Plaigon’:

          Salut, tu peux créer une classe custom de GuiTextField, et override la méthode drawTextBox.
          Ou bien garder la classe vanilla mais à chaque appel de keyTyped sur ton GuiScreen, t’isoles les caractères tappés (normalement dans ton GuiTextField) vers un autre String, pour les remplacer ensuite par des étoiles.
          Voilà tu as ces deux solutions qui se valent selon moi.

          Car je sais pas comment isoler chaque caractère vers un string …

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

            Déjà il faut récupérer le caractère tappé à l’appel de keyTyped. Tu as deux paramètres, peut-être que l’un peut intéresser.
            Pour ce qui est de la concaténation, cela fait partie des bases, revois les si tu n’y arrives pas.

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

              @‘Plaigon’:

              Déjà il faut récupérer le caractère tappé à l’appel de keyTyped. Tu as deux paramètres, peut-être que l’un peut intéresser.
              Pour ce qui est de la concaténation, cela fait partie des bases, revois les si tu n’y arrives pas.

              Donc quelque chose comme ça

              @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"));
                  }
              
              1 Reply Last reply Reply Quote 0
              • Deleted
                Deleted last edited by

                Non, revois mes messages et dis moi si j’ai parlé une seule fois de l’event KeyInputEvent ?

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

                  @‘Plaigon’:

                  Non, revois mes messages et dis moi si j’ai parlé une seule fois de l’event KeyInputEvent ?

                  protected void keyTyped(char par1, int par2)
                      {
                          super.keyTyped(par1, par2);
                          this.textfield.textboxKeyTyped(par1, par2);
                      }
                  

                  Je suppose que c’est “char par1” ?
                  mais que faire avec

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

                    C’est le caractère tappé. A toi de voir quoi en faire avec toutes les instructions précédentes 😉

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

                      @‘Plaigon’:

                      C’est le caractère tappé. A toi de voir quoi en faire avec toutes les instructions précédentes 😉

                      [font=monospace, monospace  ```java
                      ] protected void keyTyped(char par1, int par2)
                         {%(#000000)[
                             super].keyTyped(par1, par2);
                             this.textfield.textboxKeyTyped(par1, par2);
                             if ([color=#000000textfield].isFocused()) {%(#000000)[
                                 pass ]+= par1;
                             }
                             for (int p = 0; p < [color=#000000textfield].getText().length(); p++) {
                                 //mask += “*”;
                             }
                             //[color=#000000textfield].setText(mask);%(#000000)[
                             textfield].setText(pass);

                      %(#666600)[}

                      %(#272a34)[[font=monospace, monospace]Mais pour le masquer, je le fait comment ?]
                      1 Reply Last reply Reply Quote 0
                      • Deleted
                        Deleted last edited by

                        C’est déjà un bon début. A ta place désormais, je retirerais le textBoxKeyTyped car celui va sinon écrire le caractère tappé à la suite du champ de texte. La boucle for n’est pas utile. Et dans ta condition, je rajouterai à la suite de ta concaténation ceci:
                        textfield.writeText(Character.toString(’*’));

                        EDIT: Mais du coup ce n’est pas optimal dans la mesure où si tu souhaites déplacer le curseur avec les flèches directionnelles, ou même effacer un caractère, la fonction GuiScreen#textboxKeyTyped ne pourra désormais plus gérer ce genre de fonctionnalités. Le mieux aurait donc été de créer une classe du genre GuiPasswordField heritant de GuiTextField, mais avec des fonctions surchargées. En revanche si tu souhaites rester avec le plan B, tu peux faire une suite de conditions checkant le keyCode de la touché pressée pour handle les différent cas de figures précisés + haut.

                        EEDIT: Et au passag, évite de spam plusieurs dév de deux forums différent pour un même problème. On a recours à ce genre de “technique” quand on n’obtient aucune réponse. Mais dans le cas présent, j’estime que je suis suffisamment actif pour t’aider alors ne va pas déranger ceux D’IC, surtout qu’ils ne risquent pas d’avoir la même patience que moi mdrr

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

                          @‘Plaigon’:

                          C’est déjà un bon début. A ta place désormais, je retirerais le textBoxKeyTyped car celui va sinon écrire le caractère tappé à la suite du champ de texte. La boucle for n’est pas utile. Et dans ta condition, je rajouterai à la suite de ta concaténation ceci:
                          textfield.writeText(Character.toString(’*’));

                          EDIT: Mais du coup ce n’est pas optimal dans la mesure où si tu souhaites déplacer le curseur avec les flèches directionnelles, ou même effacer un caractère, la fonction GuiScreen#textboxKeyTyped ne pourra désormais plus gérer ce genre de fonctionnalités. Le mieux aurait donc été de créer une classe du genre GuiPasswordField heritant de GuiTextField, mais avec des fonctions surchargées. En revanche si tu souhaites rester avec le plan B, tu peux faire une suite de conditions checkant le keyCode de la touché pressée pour handle les différent cas de figures précisés + haut.

                          EEDIT: Et au passag, évite de spam plusieurs dév de deux forums différent pour un même problème. On a recours à ce genre de “technique” quand on n’obtient aucune réponse. Mais dans le cas présent, j’estime que je suis suffisamment actif pour t’aider alors ne va pas déranger ceux D’IC, surtout qu’ils ne risquent pas d’avoir la même patience que moi mdrr

                          Le truc c’est que je ne sais pas comment faire le gui custom pour ça… donc normal que j’essaie de demandé de l’aide un peut partout ^^.
                          Et avec le code que tu ma donné ça ne fonctionne pas sa met le mdp+* juste après.
                          Pour créer le GuiTextFieldCustom je sais pas du tout comment faire ça…

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

                            C’est bien ce que je te reproche de demander de l’aide à tout le monde, MFF suffit amplement, tu ne penses pas ?!
                            Refilé ta méthode keyTyped stp

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

                              @‘Plaigon’:

                              C’est bien ce que je te reproche de demander de l’aide à tout le monde, MFF suffit amplement, tu ne penses pas ?!
                              Refilé ta méthode keyTyped stp

                              
                              protected void keyTyped(char par1, int par2)
                                 {
                                     super.keyTyped(par1, par2);
                                     if (textfield.isFocused()) {
                                         pass += par1;
                                     }
                                     for (int p = 0; p < textfield.getText().length(); p++) {
                                         //mask += "*";
                                     }
                                     //textfield.setText(mask);
                                     textfield.setText(pass);
                                     textfield.writeText(Character.toString('*'));
                              
                                 } 
                              
                              1 Reply Last reply Reply Quote 0
                              • Deleted
                                Deleted last edited by

                                Le setText à virer, la boucle for idem et le writeText dans le if.

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

                                  @‘Plaigon’:

                                  Le setText à virer, la boucle for idem et le writeText dans le if.

                                  Oui mais du coup quand je met mon mot de passe bha sa met juste les étoiles… donc…

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

                                    C’est un peu le principe d’un champ de mot de passe

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

                                      @‘Plaigon’:

                                      C’est un peu le principe d’un champ de mot de passe

                                      Non mais de base le mot de passe il doit pas changé, jhe te parle en jeu quand je fait la commande, sa fait login ********

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

                                        Le mot de passe est contenu dans le String pass, pour le moment il ne changerai donc aucunement. Si tu souhaitais un préfixe “/login”, il faudrait clairement une classe custom.

                                        1 Reply Last reply Reply Quote 0
                                        • BrokenSwing
                                          BrokenSwing Moddeurs confirmés Rédacteurs last edited by

                                          En vrai fait un copié/collé de la classe GuiTextField parce que là tu t’embête vraiment trop pour rien. Et après tu remplaces la fonction draw de la classe par celle-ci :

                                          
                                          public void drawTextBox()
                                          {
                                          if (this.getVisible())
                                          {
                                          if (this.getEnableBackgroundDrawing())
                                          {
                                          drawRect(this.x - 1, this.y - 1, this.x + this.width + 1, this.y + this.height + 1, -6250336);
                                          drawRect(this.x, this.y, this.x + this.width, this.y + this.height, -16777216);
                                          }
                                          
                                          // La fonction affiche le texte contenu dans la variable this.text, donc il suffit de changer le contenu de cette variable juste avant de l'afficher puis remettre sa velur
                                          int tempText = this.text; // On stock le mot de passe entrée par l'utilisateur dans une variable temporaire
                                          this.text = ""; // On vide le texte à afficher
                                          for(int i = 0; i < tempText.length; i++) // Pour chaque caractère du mot de passe
                                          this.text += "*"; //On ajoute une étoile au texte à afficher
                                          
                                          // Le code va s'occuper d'afficher le contenu de this.text comme pour le GuiTextField de base, or ici on a remplacé chaque caractère par une étoile
                                          
                                          int i = this.isEnabled ? this.enabledColor : this.disabledColor;
                                          int j = this.cursorPosition - this.lineScrollOffset;
                                          int k = this.selectionEnd - this.lineScrollOffset;
                                          String s = this.fontRenderer.trimStringToWidth(this.text.substring(this.lineScrollOffset), this.getWidth());
                                          boolean flag = j >= 0 && j <= s.length();
                                          boolean flag1 = this.isFocused && this.cursorCounter / 6 % 2 == 0 && flag;
                                          int l = this.enableBackgroundDrawing ? this.x + 4 : this.x;
                                          int i1 = this.enableBackgroundDrawing ? this.y + (this.height - 8) / 2 : this.y;
                                          int j1 = l;
                                          
                                          if (k > s.length())
                                          {
                                          k = s.length();
                                          }
                                          
                                          if (!s.isEmpty())
                                          {
                                          String s1 = flag ? s.substring(0, j) : s;
                                          j1 = this.fontRenderer.drawStringWithShadow(s1, (float)l, (float)i1, i);
                                          }
                                          
                                          boolean flag2 = this.cursorPosition < this.text.length() || this.text.length() >= this.getMaxStringLength();
                                          int k1 = j1;
                                          
                                          if (!flag)
                                          {
                                          k1 = j > 0 ? l + this.width : l;
                                          }
                                          else if (flag2)
                                          {
                                          k1 = j1 - 1;
                                          –j1;
                                          }
                                          
                                          if (!s.isEmpty() && flag && j < s.length())
                                          {
                                          j1 = this.fontRenderer.drawStringWithShadow(s.substring(j), (float)j1, (float)i1, i);
                                          }
                                          
                                          if (flag1)
                                          {
                                          if (flag2)
                                          {
                                          Gui.drawRect(k1, i1 - 1, k1 + 1, i1 + 1 + this.fontRenderer.FONT_HEIGHT, -3092272);
                                          }
                                          else
                                          {
                                          this.fontRenderer.drawStringWithShadow("_", (float)k1, (float)i1, i);
                                          }
                                          }
                                          
                                          if (k != j)
                                          {
                                          int l1 = l + this.fontRenderer.getStringWidth(s.substring(0, k));
                                          this.drawSelectionBox(k1, i1 - 1, l1 - 1, i1 + 1 + this.fontRenderer.FONT_HEIGHT);
                                          }
                                          
                                          this.text = tempText; // On oublie pas de remettre le mot de passe entré par le joueur comme valeur du GuiTextField pour que le mot de passe soit bien modifié lorsque le joueur tape du texte
                                          }
                                          }
                                          
                                          

                                          Le mot de passe est ensuite récupérable via la simple fonction GuiTextField#getText. J’ai pas testé le code mais ça devrait fonctionner.

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

                                            Au moins, on peut être sûr qu’il y aura satisfaction car du code vient de lui tomber du ciel 😉

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

                                            MINECRAFT FORGE FRANCE © 2018

                                            Powered by NodeBB