1.6.4 GuiContainer et boutons



  • Bonjours à toutes et à tous !

    Jusqu’à maintenant, j'ai travaillé avec des GuiScreen pour faire mes GUIs, j'ai créée mes propres boutons en faisant un extends de GuiButton, tout marchais nickel

    Mais, j'ai eu besoin de rajouter des slots à mon GUI, et je suis donc passé de GuiScreen à GuiContainer, malheureusement, lorsque j'appuis sur un bouton, la fonction event mouseReleased() de mes boutons n'est plus appelé, alors qu'avant elle l'était 😞

    Je précise qu'utiliser la fonction actionPerformed() n'est pas possible pour moi, vu que j'utilise des tableaux dynamique de boutons qui ne sont pas fixe, donc je ne peux pas savoir à quoi correspond l'id du bouton

    Voila, quelqu'un à-t'il deja eu ce problème ?

    Merci d'avance pour votre aide !


  • Moddeurs confirmés Rédacteurs Administrateurs

    On a eu le même problème kevin_68 et moi pour les sliders, on a contourné le problème comme ça :
    https://github.com/FFMT/FFMT-libs/blob/master/common/fr/minecraftforgefrance/ffmtlibs/gui/FFMTGuiContainerSliderBase.java#L19-L46



  • Oui, ça c'est dans le cas où tu peux utiliser les IDs des boutons, moi mon problème, c'est que chaque bouton peuvent être nimporte quoi (en gros, gros, gros, il change suivant les objets du player, ainsi que les blocs autours, etc … ), donc impossible de savoir à quoi correspond une ID extérieurement au bouton, mon bouton est identifié internement a lui même, de plus, j'ai créé un tableau qui peut être de plusieurs type de bouton, donc sans cette fonction qui marche correctement, je vais avoir une grosse dificulté

    Est-ce un bug de forge ?


  • Moddeurs confirmés Rédacteurs Administrateurs

    Non, ça vient de mc, GuiContainer ne reprend pas toute les fonctions de Gui.java
    Je vois pas comment résoudre ton problème 😕



  • 😞

    Jvai essayer de trouver quelque chose, jte tiens au courant



  • Essaye :

    
    protected void mouseClicked(int par1, int par2, int par3)
    {
    boolean buttonHover = false;
    
    if (par3 == 0)
    {
    for (int l = 0; l < this.buttonList.size(); ++l)
    {
    GuiButton guibutton = (GuiButton)this.buttonList.get(l);
    
    if (guibutton.mousePressed(this.mc, par1, par2))
    {
    this.selectedButton = guibutton;
    guibutton.func_146113_a(this.mc.getSoundHandler());
    this.actionPerformed(guibutton);
    buttonHover = true;
    }
    }
    }
    
    if(!buttonHover)
    {
    super.mouseClicked(par1, par2, par3);
    }
    }
    
    protected void mouseMovedOrUp(int p_146286_1_, int p_146286_2_, int p_146286_3_)
    {
    if (this.selectedButton != null && p_146286_3_ == 0)
    {
    this.selectedButton.mouseReleased(p_146286_1_, p_146286_2_);
    this.selectedButton = null;
    }
    
    super.mouseMovedOrUp(p_146286_1_, p_146286_2_, p_146286_3_);
    }
    
    private GuiButton selectedButton;
    
    


  • Ok, sinon j'ai trouvé une petite solution nul, mais qui marche 😄

    
    @Override
    protected void actionPerformed(GuiButton buttonClicked)
    {
    
    for(Object button : this.buttonList.toArray())
    {
    if(button != null && button instanceof GuiButton)
    {
    ((GuiButton)button).mouseReleased(buttonClicked.xPosition, buttonClicked.yPosition);
    }
    }
    
    }
    
    


  • Bon ba sa a l'air de marché nickel 🙂


Log in to reply