• Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Solved Afficher du texte ou image sur le HUD d'un joueur

    1.7.x
    1.7.x
    2
    10
    2515
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • BlackDrag00n
      BlackDrag00n last edited by robin4002

      Bonjour a vous tous, je suis nouveau sur ce forum et je tiens avant tous a féliciter tous le travail fournit par la communauté.

      Grâce a vous tous, j’ai pu installer tous l’espace de travail nécessaire a la création de mod minecraft, j’ai fait le tour de tous le forum, mais je n’est trouver aucun information concernant mon problème, d’où le fait que je vienne demander de l’aide 🙂

      Alors mon problème est que je souhaite rajout du texte ou des images sur l’interface HUD des joueurs, j’ai fait plusieurs cherche sur internet et j’ai trouver ceci :

      FMLClientHandler.instance().getClient().fontRenderer.drawStringWithShadow(displayText(String), x(int), y(int), color(int));
      

      Qui visiblement fonctionnerai grâce à la méthode onRenderTick().

      C’est là que je bloque car je ne sais pas du tous ou insérer cette instance, d’après ce que j’ai compris il faudrait le mettre dans la méthode onRenderTick(), pour qu’il s’actualise a chaque TICK du jeu.

      Je ne cache pas j’ai jamais programmer en JAVA, je fait du C, C++, C#, PHP en tant qu’intermédiaire et la je me lance dans le JAVA, pour crée mon mod Minecraft.

      Je vous remercie par avance de toutes l’aides que vous pourriez m’apporter !

      1 Reply Last reply Reply Quote 0
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by robin4002

        Salut,
        Il y a deux événements qui permettent de faire ça. cpw.mods.fml.common.gameevent.TickEvent.RenderTickEvent de fml et net.minecraftforge.client.event.RenderGameOverlayEvent.Pre de Forge
        Pour les utiliser : https://www.minecraftforgefrance.fr/topic/636/utiliser-les-événements

        1 Reply Last reply Reply Quote 0
        • BlackDrag00n
          BlackDrag00n last edited by

          Merci je vais me renseigner et étudier ça je reviens dès que c’est fait

          1 Reply Last reply Reply Quote 0
          • BlackDrag00n
            BlackDrag00n last edited by

            Me revoilà bon bah merci ta piste ma guider sur la bonne voie 😛 j’arrive a afficher un texte (c’est un début :P), maintenant je cherche a affiche le biome actuel en fonction d’où se trouve le joueur, mais je rencontre une erreur, je place mes codes :

            MAIN :

            @EventHandler
            public void postInit(FMLPostInitializationEvent event)
            {
            MinecraftForge.EVENT_BUS.register(new InfoOverlay());
            }
            

            InfoOverlay() :

            import cpw.mods.fml.client.FMLClientHandler;
            import cpw.mods.fml.common.eventhandler.SubscribeEvent;
            import net.minecraft.client.Minecraft;
            import net.minecraft.client.gui.FontRenderer;
            import net.minecraft.tileentity.TileEntity;
            import net.minecraft.util.MathHelper;
            import net.minecraft.util.MovingObjectPosition;
            import net.minecraft.world.World;
            import net.minecraftforge.client.event.RenderGameOverlayEvent;
            import java.text.DateFormat;
            import java.text.SimpleDateFormat;
            import java.util.Date;
            
            //–----------------------------------------------------------------------------------------
            
            public class InfoOverlay
            {
            private Minecraft mc;
            private String biomeString, fpsString;
            
            @SubscribeEvent
            public void renderGameOverlay(RenderGameOverlayEvent.Post event)
            {
            int x = MathHelper.floor_double(mc.thePlayer.posX);
            int z = MathHelper.floor_double(mc.thePlayer.posZ);
            fpsString = mc.debug.split(",", 2)[0];
            biomeString = mc.theWorld.getBiomeGenForCoords(x, z).biomeName;
            
            FMLClientHandler.instance().getClient().fontRenderer.drawStringWithShadow("Fps : "+fpsString, 5, 15, 0xffffff);
            FMLClientHandler.instance().getClient().fontRenderer.drawStringWithShadow("Biome : "+biomeString, 5, 25, 0xffffff);
            }
            }
            

            Erreur lors de la tentive de joindre le monde :

            java.lang.NullPointerException: Unexpected error
            at fr.paramystick.testmod.client.InfoOverlay.renderGameOverlay(InfoOverlay.java:27)
            at cpw.mods.fml.common.eventhandler.ASMEventHandler_4_InfoOverlay_renderGameOverlay_Post.invoke(.dynamic)
            at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:51)
            at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:122)
            at net.minecraftforge.client.GuiIngameForge.post(GuiIngameForge.java:900)
            at net.minecraftforge.client.GuiIngameForge.renderHelmet(GuiIngameForge.java:263)
            at net.minecraftforge.client.GuiIngameForge.renderGameOverlay(GuiIngameForge.java:120)
            at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1121)
            at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1023)
            at net.minecraft.client.Minecraft.run(Minecraft.java:910)
            at net.minecraft.client.main.Main.main(Main.java:112)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
            at java.lang.reflect.Method.invoke(Unknown Source)
            at net.minecraft.launchwrapper.Launch.launch(Launch.java:134)
            at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
            

            Visiblement d’après mes premiers recherche et test les erreurs serait au niveau de ces 4 lignes :

            int x = MathHelper.floor_double(mc.thePlayer.posX);
            int z = MathHelper.floor_double(mc.thePlayer.posZ);
            fpsString = mc.debug.split(",", 2)[0];
            biomeString = mc.theWorld.getBiomeGenForCoords(x, z).biomeName;
            

            Pourtant autocompletion fonctionne correctement donc il trouve bien ce que je cherche, et me déclare aucune erreur avant compilation.

            1 Reply Last reply Reply Quote 0
            • robin4002
              robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

              java.lang.NullPointerException veut dire que un de tes objets est null.
              Et dans ton cas, c’est l’objet mc qui est null.
              private Minecraft mc;
              Remplace par :
              private Minecraft mc = FMLClientHandler.instance().getClient();

              1 Reply Last reply Reply Quote 0
              • BlackDrag00n
                BlackDrag00n last edited by

                Merci sa fonctionne mais j’aimerais comprendre pour l’auto-completion me dit que sa fonctionne alors qu’il manquait " = FMLClientHandler.instance().getClient(); " ???

                Et sinon l’affichage du FPS et Biome fonctionne mais sa ma déclencher un problème au niveau des barre de faim et au dessus de la barre de vie:

                Une idée ?

                1 Reply Last reply Reply Quote 0
                • robin4002
                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                  Car l’objet mc aurait pu être initialisé ailleurs (dans le constructeur par exemple). Eclipse ne peut pas deviner toutes les erreurs.

                  Pour le bug d’affichage, essaye comme ça :

                  @SubscribeEvent
                  public void renderGameOverlay(RenderGameOverlayEvent.Post event)
                  {
                  if(event.type != ElementType.EXPERIENCE)
                  {
                  return;
                  }
                  int x = MathHelper.floor_double(mc.thePlayer.posX);
                  int z = MathHelper.floor_double(mc.thePlayer.posZ);
                  fpsString = mc.debug.split(",", 2)[0];
                  biomeString = mc.theWorld.getBiomeGenForCoords(x, z).biomeName;
                  
                  FMLClientHandler.instance().getClient().fontRenderer.drawStringWithShadow("Fps : "+fpsString, 5, 15, 0xffffff);
                  FMLClientHandler.instance().getClient().fontRenderer.drawStringWithShadow("Biome : "+biomeString, 5, 25, 0xffffff);
                  }
                  }
                  
                  1 Reply Last reply Reply Quote 0
                  • BlackDrag00n
                    BlackDrag00n last edited by

                    D’accord je comprend pour le Minecraft mc = ….

                    Et comment se fait-il que cette commande à régler le bug d’affichage ?

                    if(event.type != ElementType.EXPERIENCE)
                    {
                    return;
                    }
                    

                    désoler de tant vous sollicitez, mais j’aime bien comprendre comment sa fonctionne et pourquoi sa fonctionne 😉

                    1 Reply Last reply Reply Quote 0
                    • robin4002
                      robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                      Normal que tu pose des questions ^^
                      En fait l’event RenderGameOverlayEvent est appelé plusieurs fois avec un type différent à chaque fois, et il se trouve que faire apparaître quelque chose avec un autre type que EXPERIENCE fait completement planter l’affichage, donc avec ce code, si le type n’est pas EXPERIENCE, il ne fait plus rien (return; dans un void stop le void).

                      1 Reply Last reply Reply Quote 0
                      • BlackDrag00n
                        BlackDrag00n last edited by

                        D’accord je comprend mieux si l’affichage et EXPERIENCE, il affiche, sinon non.

                        OK merci pour toutes ces informations je clôture mon sujet !

                        1 Reply Last reply Reply Quote 0
                        • 1 / 1
                        • First post
                          Last post
                        Design by Woryk
                        Contact / Mentions Légales

                        MINECRAFT FORGE FRANCE © 2018

                        Powered by NodeBB