• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Résolu Afficher du texte ou image sur le HUD d'un joueur

    1.7.x
    1.7.x
    2
    10
    2704
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • BlackDrag00n
      BlackDrag00n dernière édition par 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 réponse Dernière réponse Répondre Citer 0
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 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 réponse Dernière réponse Répondre Citer 0
        • BlackDrag00n
          BlackDrag00n dernière édition par

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

          1 réponse Dernière réponse Répondre Citer 0
          • BlackDrag00n
            BlackDrag00n dernière édition par

            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 réponse Dernière réponse Répondre Citer 0
            • robin4002
              robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

              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 réponse Dernière réponse Répondre Citer 0
              • BlackDrag00n
                BlackDrag00n dernière édition par

                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 réponse Dernière réponse Répondre Citer 0
                • robin4002
                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                  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 réponse Dernière réponse Répondre Citer 0
                  • BlackDrag00n
                    BlackDrag00n dernière édition par

                    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 réponse Dernière réponse Répondre Citer 0
                    • robin4002
                      robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                      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 réponse Dernière réponse Répondre Citer 0
                      • BlackDrag00n
                        BlackDrag00n dernière édition par

                        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 réponse Dernière réponse Répondre Citer 0
                        • 1 / 1
                        • Premier message
                          Dernier message
                        Design by Woryk
                        Contact / Mentions Légales

                        MINECRAFT FORGE FRANCE © 2018

                        Powered by NodeBB