Message sur l'écran



  • bonjour,
    je viens à vous après de nombreuses heures de recherches sur internet.

    Ce que je voudrais faire c'est afficher des texture lors des votes et en haut à droite afficher des informations, mais je n'ai aucune idée de comme je pourrais faire ceci…
    Si vous pouviez m'apporter un peu d'aide je serais vraiment content et je vous remercie d'avance !


  • Administrateurs

    Salut,
    Il faut utiliser l'event RenderGameOverlay pour faire cela.



  • Je te remercie je vais voir cela et je vous dit quoi ! 🙂


    Oui mais je n'ai aucune idée de comment faire… Peux-tu m'envoyer un code ? Pour que je puisse voir ( je souhaiterais pour l'exemple qu'un message au milieu de l'écran s'affiche 10 seconds en faisant par exemple /test) ..


  • Administrateurs

    Pour ça il va falloir cumuler plusieurs choses.
    Pour le /test, il faut une commande. L'action de la commande s'exécute côté serveur et l'affichage est côté client, donc il faut envoyer un paquet vers le client.

    Ensuite une fois que le client reçoit le paquet, il faut mettre une variable de timer sur 10*20 (10 secondes * 20 ticks) et dans la fonction de l'event RenderGameOverlay la diminuer de 1 à chaque appel de la fonction. En même temps tu draw le texte.

    Pour les commandes : https://www.minecraftforgefrance.fr/showthread.php?tid=299 (il peut avoir quelques différences en 1.7.10 par rapport à la 1.6.4).
    Pour les paquets : https://www.minecraftforgefrance.fr/showthread.php?tid=1118
    Et pour les événements : https://www.minecraftforgefrance.fr/showthread.php?tid=716

    Voila à quoi devrait ressemble ta classe d'event :

    package fr.minecraftforgefrance.tutoriel.common;
    
    import net.minecraftforge.clien.event.RenderGameOverlay;
    import net.minecraft.client.Minecraft;
    import cpw.mods.fml.common.eventhandler.SubscribeEvent;
    
    public class RenderEventHandler
    {
          public static final RenderEventHandler INSTANCE = new RenderEventHandler();
          private String text;
          private int timer;
          private Minecraft mc = Minecraft.getMinecraft();
    
         @SubscribeEvent
         public void onEntityJoin(RenderGameOverlay.Post event)
         {
              if(this.timer > 0 && this.text != null)
              {
                   // on décrémente le timer
                   this.timer–;
                   // affiche le texte au centre de la largeur, en y 20 et avec la couleur 0xFFFFFF -> blanc
                   this.mc.fontRenderer.drawString(text, (event.resolution.getWitdh() - this.mc.fontRenderer.getStringWitdh(text)) / 2, 20, 0xFFFFFF);
              }
         }
    
         public void setText(String text)
         {
             this.text = text;
             this.timer = 10*20;
         }
    
    }
    

    Pour enregistrer l'event, il faudra mettre dans ta classe principale MinecraftForge.EVENT_BUS.register(RenderEventHandler.INSTANCE);
    Comme c'est un event client seulement, attention à bien le mettre dans une condition if(event.getSide().isClient()).

    Pour mettre le texte, il te suffit de faire RenderEventHandler.INSTANCE.setText("exemple"); depuis ton paquet (où n'importe quelles autres classes)



  • Salut, je te remercie du temps passé à me répondre, mais j'ai une petite question je ne comprend pas comme cela se fait que quand on execute /test et bien que le texte s'affiche au milieu de l'écran je regardais le code et j'ai pas trouvé.

    Aussi j'ai des erreurs au niveau: 
    [font=monospaceprivate] [font=monospaceMinecraft][font=monospace mc ][font=monospace=] [font=monospaceMinecraft][font=monospace.][font=monospacegetMinecraft]font=monospace;

    [font=monospaceIl m'affiche une erreur sur "mc"]

    [font=monospaceDésolé pour le dérangement ! :)]



  • Tu ne peux pas passer un objet de type Minecraft en "private"



  • Si on peut le mettre en private (comme nimporte quel objet en java), quel est l'erreur qu'eclipse te met ? L'as-tu bien importé ?


  • Administrateurs

    La partie du code que j'ai donné c'est juste pour le rendu.
    Pour la commande /test il faut faire la commande en suivant le tutoriel que je t'ai envoyé.



  • @'AymericRed':

    Si on peut le mettre en private (comme nimporte quel objet en java), quel est l'erreur qu'eclipse te met ? L'as-tu bien importé ?

    Pas à tout les endroits



  • @MrCupCakeMonster:

    Pas à tout les endroits

    Ah bon, on ne peut pas toujours mettre de private dans les fields d'une classe ? Donnes moi en exemple s'il te plait 🙂



  • Peut-être fait-il référence aux fichiers .class de mc, et non à ses propres .java ?