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

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

    1.7.x
    1.7.10
    4
    20
    3390
    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.
    • T
      Toinou9120 dernière édition par

      Bonjour
      Je suis un novice avec Forge mais j’ai des bases plutôt solides avec Bukkit. Avec un ami, on a un projet en tête et pour ce projet on a besoin de récupérer la vie d’un jouer lorsque celui prend des dégâts ou récupère de la vie. J’ai donc pensé aux events mais comme c’est du côte client, c’est un peu différent. Et donc je n’ai trouvé qu’un seul event concluant : LivingAttackEvent. Mais je n’ai pas trouvé d’autres events qui sont appelés quand le joueur regagne de la vie. Donc voila, je demande votre aide. J’aimerais un moyen qui marche aussi sur serveur ( je ne sais pas si c’est possible mais ça me paraitrait logique que ça le soit, peut-être que c’est possible avec les packets, mais je n’y ai jamais vraiment touché )
      Merci d’avance pour vos réponses ^^

      1 réponse Dernière réponse Répondre Citer 0
      • robin4002
        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
          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
          • SCAREX
            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
              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
                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
                • Deleted
                  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
                  • SCAREX
                    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
                      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
                        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
                        • Deleted
                          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
                            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
                            • Deleted
                              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
                                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
                                • Deleted
                                  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
                                    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
                                    • Deleted
                                      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
                                        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
                                          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
                                          • robin4002
                                            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
                                            Contact / Mentions Légales

                                            MINECRAFT FORGE FRANCE © 2018

                                            Powered by NodeBB