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

-
@‘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 ?] -
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
-
@‘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… -
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 -
@‘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 stpprotected 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('*')); } -
Le setText à virer, la boucle for idem et le writeText dans le if.
-
@‘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…
-
C’est un peu le principe d’un champ de mot de passe
-
@‘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 ********
-
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.
-
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.
-
Au moins, on peut être sûr qu’il y aura satisfaction car du code vient de lui tomber du ciel

-
Au moins ça fonctionnera et le sujet 1.7.10 disparaîtra de la section Support pour les “moddeurs”
A vrai dire tu n’aurai jamais du lui proposer la seconde technique qui est assez peu viable avec le problème que tu as souligné concernant toutes les autres possibilités qu’offre cette classe (comme déplacer le curseur)
-
Comme s’il s’agissait du dernier à être posté ici xD
Si tu veux tous les faire disparaître, alors la prochaine fois, file leur à tous un code parfait mais en 1.12 par-exemple, nan ? Il y a des chances ainsi que certains devs fassent l’update.
Sur le coup, je n’y ai pas pensé, mais ce n’était pas une raison non- plus pour lui filer la méthode toute prête, il n’attendait que ça
-
Et effectivement c’est pas très instructif mais je compte sur PlayFlop_ pour comprendre le code, ne pas le copier/coller et ré-essayer seul
-
Moi je compte plutôt sur tes jolis commentaires plutôt que sur PlayFlop_

-
@‘Plaigon’:
Moi je compte plutôt sur tes jolis commentaires plutôt que sur PlayFlop_

En tout cas merci Plaigon du temps passé a m’aidé !
-
Plaigon, c’est vrai que j’ai pas vraiment réfléchi en donnant le code, d’autant plus que je me suis juré que dans mes prochains tutoriels il y aurai le moins de code apparant pour éviter justement le copier/coller. Si on ne comprend pas le tutoriel entièrement, on ne pourra pas le faire.
-
@‘BrokenSwing’:
Plaigon, c’est vrai que j’ai pas vraiment réfléchi en donnant le code, d’autant plus que je me suis juré que dans mes prochains tutoriels il y aurai le moins de code apparant pour éviter justement le copier/coller. Si on ne comprend pas le tutoriel entièrement, on ne pourra pas le faire.
Et merci a toi de m’avoir donné ça