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

    Résolu Récupérer le "lanceur" d'une flèche

    1.7.x
    1.7.x
    4
    17
    2855
    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.
    • Überfap
      Überfap dernière édition par robin4002

      Bonjour tout le monde, ça fait longtemps que je n’ai pas posté dans cette partie du forum mais là je suis vraiment bloqué et j’ai besoin de votre aide 😄

      donc, comme le titre l’indique, j’aurais besoin de pouvoir récupérer le joueur qui est à l’origine de l’envoi de la flèche. J’ai cherché dans la classe de la flèche mais il n’y a rien 😕

      mon code actuel :

      public class BowHandler {
      
          @SubscribeEvent
          public void onArrowSpawned(LivingSpawnEvent event) {
              if (event.entity instanceof EntityArrow) {
                  EntityArrow arrow = (EntityArrow) event.entity;
               }
          }
      }
      

      (pour ceux qui voudraient le savoir, je fais un mod qui rajoute des enchantements)

      Si je t'ai aidé, n'hésites pas à mettre un point de réputation positif !
      Si tu m'as aidé, je n'hésiterais pas à t'en donner à mon tour !

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

        Regarde dans les tags NBT de l’entité, je pense qu’il doit y avoir l’auteur de la flèche

        Moddeur à la retraite et développeur de trucs en Java.

        J'aide les gens comme je peux, alors si mon message v…

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

          Hum tu veux en faire quoi ? (L’enchantement permettra de faire quoi ?)
          J’ai déjà vu comment récupérer la flèche mais c’était côté client :s

          Edit pour utybo : apparemment cela n’y est pas dans les NBT

          ^^

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

            J’essaie de faire un enchant qui permet de faire en sorte que les flèches soit explosives 😉

            Si je t'ai aidé, n'hésites pas à mettre un point de réputation positif !
            Si tu m'as aidé, je n'hésiterais pas à t'en donner à mon tour !

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

              Je vois pas de rapport avec le player 😮
              Tu dis que si l’arc à l’enchant ça utilise une entité(flèche) qui explose ._. non ?

              ^^

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

                Effectivement pas besoin de traquer l’auteur de la flèche pour ça
                Si tu cherches à savoir si la flèche est sur le sol ou non, c’est un tag NBT, ça j’en suis sûr

                Moddeur à la retraite et développeur de trucs en Java.

                J'aide les gens comme je peux, alors si mon message v…

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

                  Si tu cherches à savoir si la flèche est sur le sol ou non, c’est un tag NBT, ça j’en suis sûr

                  Oui effectivement lorsque tu créera l’entité de la flèche explosive tu as :

                  
                  public void onUpdate()
                  {
                  super.onUpdate();
                  
                  if (this.inGround)
                  {
                  //Je te laisse deviner ^^
                  }
                  
                  }
                  

                  ^^

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

                    Tu condition ne sera jamais vrai car la flèche n’est pas extends EntityLiving.
                    Et dans la classe de la flèche tu as ça :
                    public Entity shootingEntity;
                    Vérifie juste que l’entity n’est pas null, si elle est tiré par un dispenser, elle sera null.

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

                      Robin : ma condition est vrai parce que le event.entity retourne une Entity, pas une EntityLivingBase 😉

                      mais merci à toi et a tous les autres 😄

                      Si je t'ai aidé, n'hésites pas à mettre un point de réputation positif !
                      Si tu m'as aidé, je n'hésiterais pas à t'en donner à mon tour !

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

                        Non, ça ne fonctionnera pas non plus, l’événement LivingSpawnEvent n’est que appelé dans les entités vivantes.
                        En revanche, ça :

                        @SubscribeEvent
                        public void onArrowSpawned(EntityJoinWorldEvent event)
                        {
                        if(event.entity instanceof EntityArrow)
                        {
                        EntityArrow arrow = (EntityArrow)event.entity;
                        System.out.println("flèche");
                        }
                        }
                        

                        ça fonctionne

                        1 réponse Dernière réponse Répondre Citer 0
                        • Überfap
                          Überfap dernière édition par robin4002

                          Ah ok merci 😄


                          Edit : il se passe un truc assez bizarre 😕

                          avec ce code :

                              @SubscribeEvent
                              public void onArrowSpawned(EntityJoinWorldEvent event) {
                              if (event.entity instanceof EntityArrow) {
                                  EntityArrow arrow = (EntityArrow) event.entity;
                                      if (arrow.shootingEntity != null) {
                                          System.out.println("flèche" + arrow.shootingEntity);
                                      } else {
                                          System.out.println("flèche sans lanceur :'(");
                                      }
                                  }
                              }
                          

                          dans les logs ça donne ça :

                          flèche EntityPlayerMP['Player867'/193, l='New World', x=-941,55, y=4,00, z=603,81]
                          flèche sans lanceur :'(
                          

                          en gros, il fait le if et le else ? o_O on m’explique s’ils vous plait ?

                          Si je t'ai aidé, n'hésites pas à mettre un point de réputation positif !
                          Si tu m'as aidé, je n'hésiterais pas à t'en donner à mon tour !

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

                            Client / Serveur …

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

                              ah ok x)


                              Edit : merci beaucoup tout le monde, spécialement Robin, mais maintenant je me trouve confronté à un autre problème : commet détecter si la flèche a atteint sa cible (entité ou bloc) ?

                              Si je t'ai aidé, n'hésites pas à mettre un point de réputation positif !
                              Si tu m'as aidé, je n'hésiterais pas à t'en donner à mon tour !

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

                                NBTTag : “inTile” (sur un bloc) et
                                arrow.isDead (entité, il me semble)
                                ^^

                                ^^

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

                                  J’ai testé ça, mais je ne peux tester ça qu’une seule fois dès le début de l’event (donc ça ne marcheras pas). Une boucle while semble adaptée mais fait complètement bugger le jeu 😢

                                  Si je t'ai aidé, n'hésites pas à mettre un point de réputation positif !
                                  Si tu m'as aidé, je n'hésiterais pas à t'en donner à mon tour !

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

                                    La seule solution que je vois, c’est mettre un tag dans l’entity data lors du lancement si le joueur à l’enchantement.
                                    Ensuite avec un event fml :

                                    @SubscribeEvent
                                    public void onWorldTick(TickEvent.WorldTickEvent event)
                                    {
                                    for(Object o : event.world.loadedEntityList)
                                    {
                                    if(o instanceof EntityArrow)
                                    {
                                    EntityArrow arrow = (EntityArrow)o;
                                    if(arrow.getEntityData().hasKey("explosion"));
                                    {
                                    // …
                                    }
                                    }
                                    }
                                    }
                                    

                                    C’est la seule solution que je vois, et niveau performance ça risque d’être pas génial 😕

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

                                      d’accord, j’essaye 😉


                                      Edit : bon ben je laisse tomber hein ^^

                                      Si je t'ai aidé, n'hésites pas à mettre un point de réputation positif !
                                      Si tu m'as aidé, je n'hésiterais pas à t'en donner à mon tour !

                                      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