MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Comment récupérer la vie d'un joueur lorsqu'elle change ?

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    20 Messages 4 Publieurs 4.0k Vues 1 Watching
    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.
    • robin4002R Hors-ligne
      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
      dernière édition par

      Salut,
      Il faut utiliser LivingHealEvent et LivingHurtEvent dans ton cas.

      1 réponse Dernière réponse Répondre Citer 1
      • T Hors-ligne
        Toinou9120
        dernière édition par

        @‘robin4002’:

        Salut,
        Il faut utiliser LivingHealEvent et LivingHurtEvent dans ton cas.

        Merci pour cette réponse rapide 🙂 J’essaierai ça demain 
        Je suppose que ça marche aussi sur serveur ?

        1 réponse Dernière réponse Répondre Citer 0
        • SCAREXS Hors-ligne
          SCAREX
          dernière édition par

          Oui, normalement des 2 côtés

          Site web contenant mes scripts : http://SCAREXgaming.github.io

          Pas de demandes de support par MP ni par skype SVP.
          Je n'accepte sur skype que l…

          1 réponse Dernière réponse Répondre Citer 1
          • T Hors-ligne
            Toinou9120
            dernière édition par

            @‘SCAREX’:

            Oui, normalement des 2 côtés

            D’accord merci à vous deux pour vos conseils 🙂

            1 réponse Dernière réponse Répondre Citer 0
            • T Hors-ligne
              Toinou9120
              dernière édition par

              Bon alors j’ai essayé 2-3 trucs mais je ne sais pas si cela marche vraiment car j’envoie un message au joueur avec sa vie dedans mais je ne reçois aucun message alors je ne sais pas d’où cela vient 😕

              Le code :

              
              package com.Toinou.LifeBarMod;
              
              import net.minecraft.entity.EntityLivingBase;
              import net.minecraft.entity.player.EntityPlayer;
              import net.minecraft.util.ChatComponentTranslation;
              import net.minecraftforge.event.entity.living.LivingHealEvent;
              import net.minecraftforge.event.entity.living.LivingHurtEvent;
              import net.minecraftforge.fml.common.Mod;
              import net.minecraftforge.fml.common.Mod.EventHandler;
              import net.minecraftforge.fml.common.event.FMLInitializationEvent;
              import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
              import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
              
              @Mod(modid = Reference.MOD_ID, name = Reference.MOD_NAME, version = Reference.VERSION)
              public class MainClass {
              
                  @EventHandler
                  public void preInit(FMLPreInitializationEvent e) {
              
                  }
              
                  @EventHandler
                  public void init(FMLInitializationEvent e) {
              
                  }
              
                  @EventHandler
                  public void postInit(FMLPostInitializationEvent e) {
              
                  }
              
                  @EventHandler
                  public void onPlayerHeal(LivingHealEvent e) {
              
                      if(e.entity instanceof EntityPlayer) {
              
                          float Vie = ((EntityLivingBase) e.entity).getHealth();
                          String strVie = String.valueOf(Vie);
                          e.entity.addChatMessage(new ChatComponentTranslation(strVie));
                      }
                  }
              
                  @EventHandler
                  public void onPlayerHurt(LivingHurtEvent e) {
              
                      if(e.entity instanceof EntityPlayer) {
              
                          float Vie = ((EntityLivingBase) e.entity).getHealth();
                          String strVie = String.valueOf(Vie);
                          e.entity.addChatMessage(new ChatComponentTranslation(strVie));
                      }
                  }
              
              }
              
              

              Voilà, donc comme je l’ai dit je suis débutant et je m’excuse si c’est une erreur toute bête ou un alors que je ne me suispas assez renseigné.
              J’espère que vous pourrez m’aider 🙂

              1 réponse Dernière réponse Répondre Citer 0
              • DeletedD Hors-ligne
                Deleted
                dernière édition par

                Regarde le tuto du fofo sur les event.
                Déjà ton annotation est la mauvaise, sa devrait être @SubscribeEvent
                Vois aussi pour la ligne d enregistrement de ta classe comportant des event.

                1 réponse Dernière réponse Répondre Citer 1
                • SCAREXS Hors-ligne
                  SCAREX
                  dernière édition par

                  Tu dois enregistrer ta classe pour utiliser les événements avec MinecraftForge.EVENT_BUS.register(instanceDeLaClasse)

                  PS : Pense à utiliser les balises java plutôt

                  Site web contenant mes scripts : http://SCAREXgaming.github.io

                  Pas de demandes de support par MP ni par skype SVP.
                  Je n'accepte sur skype que l…

                  1 réponse Dernière réponse Répondre Citer 0
                  • T Hors-ligne
                    Toinou9120
                    dernière édition par

                    Merci pour tous ces conseils, je vais tester ça 🙂

                    PS : désolé de ne pas m’être assez renseigne, ce sont des erreurs bêtes que j’aurais pu remarquer

                    1 réponse Dernière réponse Répondre Citer 0
                    • T Hors-ligne
                      Toinou9120
                      dernière édition par

                      Bon, j’ai fait tout ce que vous m’avez dit et cela marche parfaitement mais que en solo 😕
                      Et là j’avoue que je ne vois plus quoi faire.

                      Le code de ma classe Main :

                      
                      package com.Toinou.LifeBarMod;
                      
                      import net.minecraftforge.common.MinecraftForge;
                      import net.minecraftforge.fml.common.Mod;
                      import net.minecraftforge.fml.common.Mod.EventHandler;
                      import net.minecraftforge.fml.common.event.FMLInitializationEvent;
                      import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
                      import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
                      
                      @Mod(modid = Reference.MOD_ID, name = Reference.MOD_NAME, version = Reference.VERSION)
                      public class MainClass {
                      
                          @EventHandler
                          public void preInit(FMLPreInitializationEvent e) {
                      
                          }
                      
                          @EventHandler
                          public void init(FMLInitializationEvent e) {
                      
                              MinecraftForge.EVENT_BUS.register(new EventClass());
                          }
                      
                          @EventHandler
                          public void postInit(FMLPostInitializationEvent e) {
                      
                          }
                      
                      }
                      
                      

                      Et celui de ma classe où il y a mes events :

                      
                      package com.Toinou.LifeBarMod;
                      
                      import net.minecraft.entity.EntityLivingBase;
                      import net.minecraft.entity.player.EntityPlayer;
                      import net.minecraft.util.ChatComponentTranslation;
                      import net.minecraftforge.event.entity.living.LivingHealEvent;
                      import net.minecraftforge.event.entity.living.LivingHurtEvent;
                      import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
                      
                      public class EventClass {
                      
                          @SubscribeEvent
                          public void onPlayerHeal(LivingHealEvent e) {
                      
                              if(e.entity instanceof EntityPlayer) {
                      
                                  EntityPlayer p = (EntityPlayer) e.entity;
                      
                                  float Vie = ((EntityLivingBase) p).getHealth();
                                  String strVie = String.valueOf(Vie);
                                  p.addChatMessage(new ChatComponentTranslation(strVie));
                              }
                          }
                      
                          @SubscribeEvent
                          public void onPlayerHurt(LivingHurtEvent e) {
                      
                              if(e.entity instanceof EntityPlayer) {
                      
                                  EntityPlayer p = (EntityPlayer) e.entity;
                      
                                  float Vie = ((EntityLivingBase) p).getHealth();
                                  String strVie = String.valueOf(Vie);
                                  p.addChatMessage(new ChatComponentTranslation(strVie));
                              }
                          }
                      
                      }
                      
                      

                      J’ai vu qu’il y avait un DataWatcher, il faudrait peut-être que j’utilise ça, je vais me renseigner un peu.

                      1 réponse Dernière réponse Répondre Citer 0
                      • DeletedD Hors-ligne
                        Deleted
                        dernière édition par

                        Ton message est-il affiché 2 fois ?
                        Si c’est le c’est le cas rajoute une condition de ce genre

                        
                        @SubscribeEvent
                        public void onPlayerHurt(LivingHurtEvent e) {
                        
                        if(e.entity instanceof EntityPlayer) {
                        
                        EntityPlayer p = (EntityPlayer) e.entity;
                        
                        float Vie = ((EntityLivingBase) p).getHealth();
                        String strVie = String.valueOf(Vie);
                        if(!world.isRemote)
                        p.addChatMessage(new ChatComponentTranslation(strVie));
                        }
                        }
                        
                        
                        1 réponse Dernière réponse Répondre Citer 0
                        • T Hors-ligne
                          Toinou9120
                          dernière édition par

                          Merci de ta réponse rapide, mais non mon message n’est pas affiché deux fois mais j’ai quand même essayé ton code mais Eclipse m’a d’abord souligné “world”. J’ai essayé avec une majuscule et j’ai importé " import net.minecraft.world.World; " mais maintenant “World.isRemote” est souligné et j’ai comme message d’erreur : Cannot make a static reference to the non-static field World.isRemote.
                          Du coup, je ne sais pas trop quoi faire.

                          1 réponse Dernière réponse Répondre Citer 0
                          • DeletedD Hors-ligne
                            Deleted
                            dernière édition par

                            SI ton message ne s’affiche pas 2 fois, oublie ce que j’ai dit.
                            A mon avis ton event n’est appelé que sur le side Server, la vie n’est géré que par le serveur.
                            Mais je ne comprends pas trop où est ton erreur. Le message est bien affiché ?

                            1 réponse Dernière réponse Répondre Citer 0
                            • T Hors-ligne
                              Toinou9120
                              dernière édition par

                              L’erreur est dans Eclipse en fait, “World.isRemote” est souligné et quand je passe ma souris dessus, j’ai comme erreur “: Cannot make a static reference to the non-static field World.isRemote”.
                              Et du coup j’aurais pas moyen de récupérer la vie avec les packets ou quelque chose dans ce style ?

                              1 réponse Dernière réponse Répondre Citer 0
                              • DeletedD Hors-ligne
                                Deleted
                                dernière édition par

                                Oui mais lis un peu mes messages…Si tu n’as pas le message t’indiquant ta vie qui apparaît 2 fois dans le chat, oublie la condition que je t’ai filée.

                                1 réponse Dernière réponse Répondre Citer 0
                                • T Hors-ligne
                                  Toinou9120
                                  dernière édition par

                                  J’avais lu tes mes messages, c’est juste que tu me demandais quand même d’où venait l’erreur et je voulais donc t’expliquer.
                                  Finalement, j’ai trouvé un moyen d’aussi récupérer la vie sur serveur avec l’event PlayerTickEvent.
                                  Merci quand même pour ton aide 🙂

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • DeletedD Hors-ligne
                                    Deleted
                                    dernière édition par

                                    Bon si tu voulais vraiment corriger ça, il suffisait de te servir de ton paramètre e en faisant e.entity.worldObj.isRemote 😉
                                    N’oublie pas la balise résolue 😉

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • T Hors-ligne
                                      Toinou9120
                                      dernière édition par

                                      Je ne mets pas encore le sujet en résolu parce qu’il se passe des choses très très étranges sur les serveurs, genre j’obtiens des chiffres bizarres. Je vais un peu explorer ça.

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • T Hors-ligne
                                        Toinou9120
                                        dernière édition par

                                        Bon, il se passe des trucs assez bizarres :

                                        • En solo, tout va bien, les nombres correspondent avec la vie :

                                        Mais en multi, les chiffres semblent complétement aléatoires à certains moments :

                                        Au début, tout va bien :

                                        Mais après j’ai des chiffres complétement étranges, à moitié en rapport avec ma vie :

                                        Mais par contre, sur les serveurs sans Bukkit, les serveurs vanilla, tout marche bien :

                                        Donc je pense que ça vient de Bukkit, ça serait un peu embêtant surtout que je ne vois pas de solutions  😕

                                        Voici le code de mon event, mais je ne pense pas que ce soit très utile :

                                        
                                        @SubscribeEvent
                                            public void onPlayerTickEvent(PlayerTickEvent e) {
                                        
                                                EntityPlayer p = e.player;
                                                Vie = p.getHealth();
                                                String strVie = String.valueOf(Vie);
                                                p.addChatMessage(new ChatComponentTranslation(strVie));
                                        
                                            }
                                        
                                        

                                        J’espère que quelqu’un a une solution …

                                        1 réponse Dernière réponse Répondre Citer 0
                                        • robin4002R Hors-ligne
                                          robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                                          dernière édition par

                                          Tes tests montrent clairement que le problème vient de bukkit …

                                          1 réponse Dernière réponse Répondre Citer 0
                                          • 1 / 1
                                          • Premier message
                                            Dernier message
                                          Design by Woryk
                                          ContactMentions Légales

                                          MINECRAFT FORGE FRANCE © 2024

                                          Powered by NodeBB