Barre de saturation



  • Salut,
    je cherche à faire une sorte de barre de faim pour la saturation. J'ai cherché   sur google mais je n'ai pas trouvé ce que je cherche.
    J'ai remarqué que dans la super doc de forge il y a la classe GUIIngame, je ne sais pas si ça pourrait m'être utile.


  • Administrateurs

    Salut,
    Pour ajouter des éléments sur le GuiInGame il faut passer par l'event RenderGameOverlayEvent de forge.



  • Je vais voir ça de plus près merci !



  • Maintenant que j'ai regardé de plus près, je n'ai pas trouvé ce qui m'intéresse, j'ai réussi à draw un String sauf que il y a un bug graphique au niveau de la barre de bouffe et de vie. Et je me demande comment on peut draw une image.



  • En fait j'ai pas trouvé comment faire, une fois que je suis dans le RenerGameOverlayEvent, j'ai réussi à draw un String mais ça fait bugger la barre de vie et la barre de faim. J'ai donc fait si le type==FOOD||HEALTH ca return. Maks la ca met tout en noir !!!


  • Administrateurs

    Il faut utiliser RenderGameOverlayEvent.Post pour éviter ce genre de problème, ou encore RenderGameOverlayEvent.Text



  • Salut,
    j'ai essayé avec le RenderGameOverlayEvent.POST. Voici mon code java :

        @SubscribeEvent
        public void postRenderGameOverlay(RenderGameOverlayEvent.Post event){
            if(type(event))
                return;
            GuiIngame.drawRect(0, 0, 10, 10, Color.RED.getRGB());
        }
    
        private boolean type(RenderGameOverlayEvent.Post event){
            if(event.type==ElementType.HEALTH||event.type==ElementType.HEALTHMOUNT||event.type==ElementType.FOOD)
                return true;
            return false;
        }
    

    Ma barre de vie et ma barre de faim sont rouges.

    Edit :
    en fait c'est bon à la place de faire des conditions exclusives, il faut faire une condition inclusive :

    @SubscribeEvent
        public void postRenderGameOverlay(RenderGameOverlayEvent.Post event){
            if(event.type==ElementType.ALL)
                Minecraft.getMinecraft().ingameGUI.drawRect(0, 0, 10, 10, Color.RED.getRGB());
        }
    

    Maintenant que j'ai réussi à faire ça, je voudrais savoir comment dessiner une icone dans le inGameGUI


  • Administrateurs

    Il faut simplement bind la texture avant de faire un drawRect.



  • J'ai fait ça :

    
    RsourceLocation location=new ResourceLocation("tuto", "textures/gigot.png");
    Minecraft.getMinecraft().renderEngine.bind(location);
    Minecraft.getMinecraft().ingameGui.drawTexturedModalRect(10, 10, 5, 5, 9, 10);
    
    

    L'image fait 9 pixels de largeur pour 10 pixels de longueur. Je suis sous linux. Mon mod s'appelle tuto. gigot.png est placé dans le dossier #src/main/resources/assets/tuto/textures/(src/main/resources/assets/tuto/textures/)
    Et ça ne ma'affiche rien.


  • Administrateurs

    L'image doit avoir comme longueur et largeur un multiple de 2.



  • Ok je vais voir ça.



  • Toujours pas !
    Jai redimensionné l'image en 8 par 8, voici mon code

    
    RsourceLocation location=new ResourceLocation("tuto","textures/gigot.png");
    mc.renderEngine.bindTexture(location);
    mc.ingameGUI.drawTexturedModalRect(10, 10, 0, 0, 8, 8);
    
    

    Je suis sur d'avoir mis la bonne resourceLocation autrement ca m'aurait fait un carre rose en haut à gauche.


  • Administrateurs

    Je ne vois pas trop d'où ça peut venir 😕



  • Moi non plus. Surtout que ça ne me met même pas de message d'erreur.



  • Je suis même pas sur que ce soit bon ta taille d'image, pour moi c'est un multiple de 16 qu'il faut, mais t'aurais un message d'erreur normalement…



  • Je vais essayer, je vous tient au courant.



  • Bon bah ça ne marche toujours pas, avec une image de 16/16. 
    EDIT : enfaîte c'est bon, il fallait utiliser drawTexturedModalRectWithSpecialSize (ou un truc comme ça), mais maintenant je voudrais pouvoir l'afficher à un endroit précis de l'écran, j'ai utilisé currentScreen.width mais currentScreen vaut null. Donc je me demandais q'il n'y avait pas un autre moyen de get la width (et la height)



  • Tu peux utiliser mc.displayWidth pour avoir le largeur de l'écran (existe aussi avec la hauteur).



  • Merci !
    EDIT : Par contre pour afficher une icone au centre de l'écran (je joue en petit écran) je suis obligé de faire displayWidth/4 et displayHeight/4, c'est normal ? J'ai essayé de mettre le jeu en pleine écran et ça ne fait absolument pas le résultat attendu
    EDIT 2 : Je crois que les réglages de la taille de l'interface jouent. Lorceque c'est en auto mais qu'on est en plein écran ça ne marche pas alors que quand la taille de l'interface est en normal ça marche.



  • Il faut que tu mettes mc.displayWidth/2 - lalargeurdetonicone/2 pour l'avoir bien au milieu dans tous les cas (et la même chose en hauteur).


Log in to reply