GuiTextField password et exécutant une commande



  • Bonjour, c'est encore moi.
    J'aurais quelques requètes.

    Premièrement j'ai implanté une commande dans mon mod.
    Le souci c'est que je voudrais faire un menu GUI (Que j'ai fait d'allieur) qui exécute cette commande suivie de l'argument dans le GuiTextField.
    Mais mon problème est que ça ne fonctionne pas (Alors que dans mon debug sa éxécute ma commande mais en jeux sa ne fonctionne pas, alors que si je fait la commande moi même sa fonctionne sans le GuiTextField).

    Ensuite j'aimerais aussi remplacer le texte d'un GuiTextField par des étoiles!
    Et je ne sais pas du tout comment faire. (Pour un Login).

    Merci de votre aide.



  • Salut, c'est encore moi,
    Alors pour ton premier problème, pourrions nous profiter de ta classe du Gui afin de mieux visualiser tes possibles bloquages, merci 😉

    Deuxièmement, pour ton menu login, peut-être en isolant chaque caractère écrit dans un String puis en les remplaçant après par des étoiles, non ?



  • @'Plaigon':

    Salut, c'est encore moi,
    Alors pour ton premier problème, pourrions nous profiter de ta classe du Gui afin de mieux visualiser tes possibles bloquages, merci 😉

    Deuxièmement, pour ton menu login, peut-être en isolant chaque caractère écrit dans un String puis en les remplaçant après par des étoiles, non ?

    Aha merci a toi de me répondre ! 🙂

    Voila la classe du GUI de ma commande:

    package fr.playflop.extania.client.menu;
    
    import java.util.Map.Entry;
    
    import net.minecraft.client.Minecraft;
    import net.minecraft.client.gui.FontRenderer;
    import net.minecraft.client.gui.GuiButton;
    import net.minecraft.client.gui.GuiScreen;
    import net.minecraft.client.gui.GuiTextField;
    import net.minecraft.client.resources.I18n;
    import net.minecraft.util.EnumChatFormatting;
    import net.minecraft.util.ResourceLocation;
    import org.lwjgl.input.Keyboard;
    import org.lwjgl.opengl.GL11;
    import cpw.mods.fml.client.config.GuiSlider;
    
    public class GuiParticules extends GuiScreen
    {
    private GuiTextField textfield;
    int guiWidth= 250; // Taille du gui (largeur)
    int guiHeight= 250;// Taille du gui (hauteur)
    public void initGui() {
    
    int posX = (this.width - guiWidth) / 2;
    int posY = (this.height - guiHeight) / 2;
    this.textfield = new GuiTextField(this.fontRendererObj, this.width / 2 - 78, this.height / 2 - 75, 150, 20);
           this.buttonList.add(new GuiButton(10, this.width / 2 - 80, this.height / 2 - 45, 155, 20, I18n.format(EnumChatFormatting.GOLD + "Valider")));
    
    textfield.setMaxStringLength(25);
    textfield.setText("");
           this.textfield.setFocused(false);
    
        }
    
    protected void actionPerformed(GuiButton button) {
            switch (button.id) {
                case 10:
                String mdp = textfield.getText();
                //Minecraft.getMinecraft().thePlayer.sendChatMessage("/particlemod " + mdp);
                    this.mc.displayGuiScreen((GuiScreen) null);
                    this.mc.setIngameFocus();
                    break;
    
            }
        }
    @Override                                                               
    public void drawScreen(int x, int y, float ticks )
    {
    int guix =(width - guiWidth) /2 ;
    int guiy =(height - guiHeight) /2;
    
    GL11.glColor4f(1,1,1,1);
    //drawDefaultBackground();
    
    mc.renderEngine.bindTexture(new ResourceLocation("extania:textures/gui/guiparticules.png")); // Le chemin de ton GUI
    
    drawTexturedModalRect(guix, guiy, 0, 0, guiWidth, guiHeight);
    
    //this.drawDefaultBackground();
    
    this.textfield.drawTextBox(); // On met ton textfield ici
    
    super.drawScreen(x, y, ticks);
    }
    @Override
    public boolean doesGuiPauseGame()
    {
    return false;
    }
    protected void keyTyped(char par1, int par2)
        {
            super.keyTyped(par1, par2);
            this.textfield.textboxKeyTyped(par1, par2);
        }
    
    public void updateScreen()
        {
            super.updateScreen();
        }
    protected void mouseClicked(int x, int y, int btn) 
    {
           super.mouseClicked(x, y, btn);
           this.textfield.mouseClicked(x, y, btn);
    }
    
        //Minecraft.getMinecraft().displayGuiScreen(null);
    }
    

    et pour les étoiles j'ai trouvé un code mais je n'arrive pas a l'adapter..

    public void drawTextBox() {
    if (this.getVisible()) {
    if (this.getEnableBackgroundDrawing()) {
    drawRect(this.xPosition - 1, this.yPosition - 1, this.xPosition + this.width + 1, this.yPosition + this.height + 1, -6250336);
    drawRect(this.xPosition, this.yPosition, this.xPosition + this.width, this.yPosition + this.height, -16777216);
    }
    
    int i = this.isEnabled ? this.enabledColor : this.disabledColor;
    int j = this.cursorPosition - this.lineScrollOffset;
    int k = this.selectionEnd - this.lineScrollOffset;
    String s = this.fontRendererInstance.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.xPosition + 4 : this.xPosition;
    int i1 = this.enableBackgroundDrawing ? this.yPosition + (this.height - 8) / 2 : this.yPosition;
    int j1 = l;
    
    if (k > s.length()) {
    k = s.length();
    }
    
    if (s.length() > 0) {
    String s1 = flag ? s.substring(0, j) : s;
    if (s1.matches(".*[a-z].*") || s1.matches(".*[A-Z].*") || s1.matches(".*[0-9].*") || s1.matches(".*[^a-zA-Z0-9].*")) {
    j1 = this.fontRendererInstance.drawStringWithShadow(s1.replaceAll(".", "*"), (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.length() > 0 && flag && j < s.length()) {
    if (s.matches(".*[a-z].*") || s.matches(".*[A-Z].*") || s.matches(".*[0-9].*") || s.matches(".*[^a-zA-Z0-9].*")) {
    j1 = this.fontRendererInstance.drawStringWithShadow(s.substring(j).replaceAll(".", "*"), (float) j1, (float) i1, i);
    }
    }
    
    if (flag1) {
    if (flag2) {
    Gui.drawRect(k1, i1 - 1, k1 + 1, i1 + 1 + this.fontRendererInstance.FONT_HEIGHT, -3092272);
    } else {
    this.fontRendererInstance.drawStringWithShadow("_", (float) k1, (float) i1, i);
    }
    }
    
    if (k != j) {
    int l1 = l + this.fontRendererInstance.getStringWidth(s.substring(0, k));
    this.drawCursorVertical(k1, i1 - 1, l1 - 1, i1 + 1 + this.fontRendererInstance.FONT_HEIGHT);
    }
    }
    }
    


  • Pourquoi ta commande ne marche pas, ta ligne 45 semblait bon. La console indique-t-elle quelque chose ?
    Et pour ton second problème, tu peux essayer de créer un GuiTextField custom et d'y override cette fonction que tu nous as montrée.

    PS: Pense aussi à renommer le titre de ce topic car pour le moment, c'est trop implicite. Tu pourrais par exemple mettre: "GuiTextField password et exécutant une commande" 😃



  • @'Plaigon':

    Pourquoi ta commande ne marche pas, ta ligne 45 semblait bon. La console indique-t-elle quelque chose ?
    Et pour ton second problème, tu peux essayer de créer un GuiTextField custom et d'y override cette fonction que tu nous as montrée.

    PS: Pense aussi à renommer le titre de ce topic car pour le moment, c'est trop implicite. Tu pourrais par exemple mettre: "GuiTextField password et exécutant une commande" 😃

    Le debut fonctionne, sa éxécute bien ma commande 😕
    mais en jeu sa dit invalid command fin le texte de minecraft de base alors que la commande fonctionne, c'est pour sa que je comprend pas



  • Essaie de print ta variable mdp, aucune raison qu'une commande envoyée manuellement par ton chat, ne soit également pas envoyable par sendChatMessage.

    PS: Pense aussi à renommer le titre de ce topic car pour le moment, c'est trop implicite. Tu pourrais par exemple mettre: "GuiTextField password et exécutant une commande".



  • @'Plaigon':

    Essaie de print ta variable mdp, aucune raison qu'une commande envoyée manuellement par ton chat, ne soit également pas envoyable par sendChatMessage.

    PS: Pense aussi à renommer le titre de ce topic car pour le moment, c'est trop implicite. Tu pourrais par exemple mettre: "GuiTextField password et exécutant une commande".

    Comment je fais pour modifier le titre ?

    et print comment sa ?
    Quand je print en débug sa fonctionne



  • En éditant ton poste initial



  • @'Plaigon':

    En éditant ton poste initial

    merci et voila je sais pas comment faire du coup pour ma commande 😕



  • Envoie la en brute sans variable mdp dans le sendChatMessage. Si elle fonctionne, alors le problème doit venir de ta variable mdp.



  • @'Plaigon':

    Envoie la en brute sans variable mdp dans le sendChatMessage. Si elle fonctionne, alors le problème doit venir de ta variable mdp.

    Voila, sa ne marche pas et sa marque Unknown command. Try /help for a list of commands
    Alors que ma commande existe bien



  • Peut-être que les commandes customs ne marchent pas par sendChatMessage, ça m'étonnerait mais bon. Essaie sinon d'envoyer un packet au serveur afin qu'il s'en charge seul.



  • @'Plaigon':

    Peut-être que les commandes customs ne marchent pas par sendChatMessage, ça m'étonnerait mais bon. Essaie sinon d'envoyer un packet au serveur afin qu'il s'en charge seul.

    Mais ça a rien avoir coté serveur enfait…



  • Tu n'as pas l'air de comprendre. Remonte la fonction sendChatMessage tout seul pour voir d'où vient l'erreur.



  • @'Plaigon':

    Tu n'as pas l'air de comprendre. Remonte la fonction sendChatMessage tout seul pour voir d'où vient l'erreur.

    Mais je ne sais pas comment faire ça moi ^^



  • Quelqu'un pourrais m'aider pour les étoiles dans mon GuiLogin
    et faire un KeyPress qui a la meme fonction que mon bouton mais que dans le GUI



  • Tu as la fonction keyPressed
    Pour les étoiles, je t'ai déjà indiqué comment faire. Un peu d'initiative ne serait pas de refus, tu donnes l'impression de mendier du code 😕



  • @'Plaigon':

    Tu as la fonction keyPressed
    Pour les étoiles, je t'ai déjà indiqué comment faire. Un peu d'initiative ne serait pas de refus, tu donnes l'impression de mendier du code 😕

    if(Keyboard.isKeyDown(KeyEvent.VK_ENTER))
            {
            String mdp = textfield.getText();
            Minecraft.getMinecraft().thePlayer.sendChatMessage("/login " + mdp);
                this.mc.displayGuiScreen((GuiScreen) null);
                this.mc.setIngameFocus();
            }
    

    j'ai fait ça mais sa ne fonctionne pas



  • Qu'est-ce qui ne fonctionne pas, faut détailler.
    Par ailleurs où as-tu mis ce code ? Et on avait déjà conclu au bout d'une quinzaine de messages que sendChatMessage avait du mal avec ta commande, pourquoi le remettre alors?



  • @'Plaigon':

    Qu'est-ce qui ne fonctionne pas, faut détailler.
    Par ailleurs où as-tu mis ce code ? Et on avait déjà conclu au bout d'une quinzaine de messages que sendChatMessage avait du mal avec ta commande, pourquoi le remettre alors?

    Ce qui ne fonctionne pas c'est que j'ai l'impression que sa ne détecte pas quand j'appuye sur la touche enter, j'ai mit ce code dans la classe du guilogin c'est un autre gui, la je parle pas du sendChatMessage