MFF

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

    Créer un mob qui attaque les autres entités que le joueur ! (AI)

    Planifier Épinglé Verrouillé Déplacé Les entités
    1.7.2
    20 Messages 8 Publieurs 11.6k Vues 2 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.
    • GuguG Hors-ligne
      Gugu
      dernière édition par

      LA SYNTAXEEEEEEEEEEEEEEEEEE

      "If you have a comprehensive explanation for everything then it decreases uncertainty and anxiety and reduces your cognitive load. And if you can use that simplifying algorithm to put yourself on the side of moral virtue then you’re constantly a good person with a minimum of effort."
      ― Jordan B. Peterson

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

        Très bon tutoriel mais y’a plusieurs choses que je ne comprend pas :

        1. J’ai compris la liste mais si il y a EntityCreature à côté avec telle coordonnées alors qu’est ce qu’on fait ? On l’attaque? C’est dit où dans le tutoriel ? Excusez-moi si y à quelque chose qui m’a échappé …

        2. A quoi sert la boucle et surtout le “list.size” et surtout après à quoi sert d’incrémenter la variable i

        3)Et après la dernière condition si c’est le joueur qui est la Entity alors l’entity concernée le suit? “this.setTarget(entity);”, c’est ça? Elle ne l’attaque pas ?

        1 réponse Dernière réponse Répondre Citer 0
        • elias54E Hors-ligne
          elias54 Administrateurs
          dernière édition par

          1)Concernant EntityCreature, c’est les entités extends à cette classe que ton mob va attaquer (entitymob est descendante de cette classe)

          2)Ensuite, list.size = la taille de la liste, le contenu de la liste des entités à attaquer

          3)La boucle for est faite pour déclarer Entity

          Mon site | GitHub

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

            Très utile, par contre il y a vraiment un truc que je ne comprends pas: pourquoi fait on la “List Empty Check” dans la boucle for ???

            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
            • elias54E Hors-ligne
              elias54 Administrateurs
              dernière édition par

              La condition est nécessaire pour vérifier si la list n’est pas vide. Si on met pas cette condition -> Crash…

              Mon site | GitHub

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

                Oui ça j’avais compris, mais pourquoi dans la boucle for et pas avant ? (Désolé si c’est une question débile ^^)

                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
                • elias54E Hors-ligne
                  elias54 Administrateurs
                  dernière édition par

                  Quand je savais pas d’où venait le crash, j’ai du faire des tests.

                  Mon site | GitHub

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

                    Bonsoir, j’ai un petit problème avec mon mob :
                    J’ai bien suivi le tuto, et le problème, c’est que mon mob n’attaque pas les mobs souhaités, mais en plus, il prend des dégâts alors qu’aucun mob ne l’attaque. Voici mon code :

                    La liste :

                        public void updateEntityActionState()
                    
                        {
                            super.updateEntityActionState();
                            List list = worldObj.getEntitiesWithinAABB(Entity.class, AxisAlignedBB.getAABBPool().getAABB(posX, posY, posZ, posX + 1, posY + 1, posZ + 1).expand(16D, 4D, 16D));
                            for(int i = 0; i<list.size(); i++)<br="">        {
                                Entity entity = (Entity)list.get(i);
                                if(!list.isEmpty())
                                {
                                    this.setTarget(entity);
                    
                                    if(!(entity instanceof EntityChicken))
                                    {
                                    this.setTarget(entity);
                                    }
                    
                                    if(!(entity instanceof EntityCow))
                                    {
                                    this.setTarget(entity);
                                    }
                    
                                    if(!(entity instanceof EntityPig))
                                    {
                                    this.setTarget(entity);
                                    }
                                }
                            }
                        }
                    

                    PS : le getAABBPool() est barré dans mon code
                    Et j’ai pensé que cela viendrait du Entity.class, mais j’ai changer par toute les classes possible ça ne change rien

                    Class entière :

                    import java.util.List;
                    
                    import net.minecraft.entity.Entity;
                    import net.minecraft.entity.SharedMonsterAttributes;
                    import net.minecraft.entity.monster.EntityMob;
                    import net.minecraft.entity.passive.EntityChicken;
                    import net.minecraft.entity.passive.EntityCow;
                    import net.minecraft.entity.passive.EntityPig;
                    import net.minecraft.util.AxisAlignedBB;
                    import net.minecraft.world.World;
                    
                    public class EntityMobKevin extends EntityMob
                    {
                    
                        public EntityMobKevin(World world)
                        {
                            super(world);
                        }
                    
                        public void applyEntityAttributes()
                        {
                            super.applyEntityAttributes();
                            this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(40D);
                            this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(4D);
                            this.getEntityAttribute(SharedMonsterAttributes.knockbackResistance).setBaseValue(0D);
                            this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.99846372D);
                        }
                    
                        public void updateEntityActionState()
                        {
                            super.updateEntityActionState();
                            List list = worldObj.getEntitiesWithinAABB(Entity.class, AxisAlignedBB.getAABBPool().getAABB(posX, posY, posZ, posX + 1, posY + 1, posZ + 1).expand(16D, 4D, 16D));
                            for(int i = 0; i<list.size(); i++)<br="">        {
                                Entity entity = (Entity)list.get(i);
                                if(!list.isEmpty())
                                {
                                    this.setTarget(entity);
                    
                                    if(!(entity instanceof EntityChicken))
                                    {
                                    this.setTarget(entity);
                                    }
                    
                                    if(!(entity instanceof EntityCow))
                                    {
                                    this.setTarget(entity);
                                    }
                    
                                    if(!(entity instanceof EntityPig))
                                    {
                                    this.setTarget(entity);
                                    }
                                }
                            }
                        }
                    }
                    

                    Merci d’avance :)</list.size();></list.size();>

                    Joueur PC Master Race :D
                    Config : MSI B85-G43 GAMING - Intel Core i5 4460 @3.2GHz - be Quiet! Pure Rock - 8 Go DDR3 CAS 9 - Saegate SSHD 1 To - Zotac GTX 960 - Cooler Master G550M - Creative Sound Blaster Z - Logitech G230 - Razer DeathAdder Chroma - BlueStork KEYZ#1 (Azerty) - Zalman Z11+ - Asus VE247H

                    1 réponse Dernière réponse Répondre Citer 0
                    • elias54E Hors-ligne
                      elias54 Administrateurs
                      dernière édition par

                      Salut !
                      Pour commencer :
                      @‘zery59’:

                          public void updateEntityActionState()
                      
                          {
                              super.updateEntityActionState();
                              List list = worldObj.getEntitiesWithinAABB(Entity.class, AxisAlignedBB.getAABBPool().getAABB(posX, posY, posZ, posX + 1, posY + 1, posZ + 1).expand(16D, 4D, 16D));
                              for(int i = 0; i<list.size(); i++)<br="">        {
                                  Entity entity = (Entity)list.get(i);
                                  if(!list.isEmpty())
                                  {
                                      this.setTarget(entity);
                                      
                                      if(!(entity instanceof EntityChicken))
                                      {
                                      this.setTarget(entity);
                                      }
                                      
                                      if(!(entity instanceof EntityCow))
                                      {
                                      this.setTarget(entity);
                                      }
                                      
                                      if(!(entity instanceof EntityPig))
                                      {
                                      this.setTarget(entity);
                                      }
                                  }
                              }
                          }
                      ```</list.size();>
                      

                      Déjà là, tu as mis Entity.class tout en haut, c’est déconseillé… C’est une des principales raisons pour laquelle le mob s’attaque lui même.
                      La 2nde; est que si tu veux pas que ton mob s’attaque, ou attaque les autres monstre du même type que ton mob (en gros : que tous les MOBS_A ne s’attaquent pas entre eux) est de tout simplement faire une condition :

                      
                                      if(!(entity instanceof EntityTonMob))
                                      {
                                      this.setTarget(entity);
                                      }
                      

                      @‘zery59’:

                      PS : le getAABBPool() est barré dans mon code

                      Euh… Si tu es en 1.7.10, ce tuto est réservé uniquement pour la 1.7.2. Mais je peux te dire ce qui change en 1.7.10, il y a juste à faire AxisAlignedBB.getAxisAlignedBB(etc…) (ou un truc comme ça…)

                      Ensuite,
                      @‘zery59’:

                      
                                  if(!list.isEmpty())
                                  {
                                      this.setTarget(entity);
                                      
                                      if(!(entity instanceof EntityChicken))
                                      {
                                      this.setTarget(entity);
                                      }
                                      
                                      if(!(entity instanceof EntityCow))
                                      {
                                      this.setTarget(entity);
                                      }
                                      
                                      if(!(entity instanceof EntityPig))
                                      {
                                      this.setTarget(entity);
                                      }
                                  }
                      }
                      

                      Alors là, très gros fail…
                      Si tu veux que ton mob n’attaque pas les animaux, tu as juste à faire :

                      
                                      if(!(entity instanceof EntityAnimal))
                                      {
                                      this.setTarget(entity);
                                      }
                      

                      Et hop, problème reglé.
                      Mais ce n’est pas tout, tu as déjà mis un setTarget tout seul, juste après le if(!list.isEmpty())… Or, tu l’avais déjà mis dans plusieurs conditions (toutes inutiles, vu que je t’ai indiqué une solution simple et optimisé ci-dessus)

                      Essaye de corriger un peu le tout en suivant ce que je viens de te dire, si cela ne fonctionne pas, expliques-moi concrètement ce que tu cherches à faire, et je m’occuperais de te faire ça.

                      Mon site | GitHub

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

                        Ah, d’accord ! Débile comme j’étais, je croyais que je devais mettre dans la liste les mobs que mon mob devait ATTAQUER –’

                        J’ai corrigé tout ça, et tout fonctionne parfaitement ! Merci beaucoup elias54 !
                        Pour le .getAABBPool() barré, je suis bien en 1.7.2. et ma version de forge :  10.12.2.1131 et version FML : v7.2.213.1131 Bizzard

                        Joueur PC Master Race :D
                        Config : MSI B85-G43 GAMING - Intel Core i5 4460 @3.2GHz - be Quiet! Pure Rock - 8 Go DDR3 CAS 9 - Saegate SSHD 1 To - Zotac GTX 960 - Cooler Master G550M - Creative Sound Blaster Z - Logitech G230 - Razer DeathAdder Chroma - BlueStork KEYZ#1 (Azerty) - Zalman Z11+ - Asus VE247H

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

                          Salut, j’ai réussi à coder mon mob comme je le voulais et le seul problème c’est le getAxisAlignedBB qui est barré:

                          ​package fr.oeilomega.wozcontent.common;
                          
                          import java.util.List;
                          
                          import net.minecraft.entity.Entity;
                          import net.minecraft.entity.EntityCreature;
                          import net.minecraft.entity.SharedMonsterAttributes;
                          import net.minecraft.entity.monster.EntityMob;
                          import net.minecraft.entity.passive.EntityChicken;
                          import net.minecraft.entity.passive.EntityCow;
                          import net.minecraft.entity.passive.EntityPig;
                          import net.minecraft.entity.player.EntityPlayer;
                          import net.minecraft.util.AxisAlignedBB;
                          import net.minecraft.world.World;
                          
                          public class wozzombie extends EntityMob
                          {
                          public wozzombie(World world)
                          {
                          super(world);
                          }
                          
                          public void applyEntityAttributes()
                          {
                          super.applyEntityAttributes();
                          this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(20D);
                          this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(8D);
                          this.getEntityAttribute(SharedMonsterAttributes.knockbackResistance).setBaseValue(0D);
                          this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.8D);
                          
                          }
                          public void updateEntityActionState()
                          {
                          List list = worldObj.getEntitiesWithinAABB(EntityCreature.class, AxisAlignedBB.getAxisAlignedBB().getAABB(posX, posY, posZ, posX + 1, posY + 1, posZ + 1).expand(16D, 4D, 16D));
                          for(int i = 0; i< list.size(); i++)
                          {
                          Entity entity = (Entity)list.get(i);
                          if(!list.isEmpty())
                          {
                          if(!(entity instanceof EntityPlayer))
                          {
                          this.setTarget(entity);
                          }
                          }
                          }
                          super.updateEntityActionState();
                          }
                          }
                          

                          Merci d’avance !

                          1 réponse Dernière réponse Répondre Citer 0
                          • elias54E Hors-ligne
                            elias54 Administrateurs
                            dernière édition par

                            Quel build de forge utilises-tu ?

                            Mon site | GitHub

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

                              J’utilise le build 1180

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

                                Ce tuto est t-il utilisable pour 1.8.8?

                                1 réponse Dernière réponse Répondre Citer 0
                                • elias54E Hors-ligne
                                  elias54 Administrateurs
                                  dernière édition par

                                  Nope, il faut maintenant utiliser le système d’AI de Mojang.

                                  Mon site | GitHub

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

                                    Comment on fait? Y aura t-il un tuto :/?

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • elias54E Hors-ligne
                                      elias54 Administrateurs
                                      dernière édition par

                                      C’est un peu plus simple en 1.8. Si j’ai le temps je ferai un tuto. Bien qu’il y a deux manières de le faire en 1.8. Si c’est juste un mob qui attaque simplement un autre mobs sans autre conditions particulière, UNE ligne suffit dans les tasks.addTask.

                                      Mon site | GitHub

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

                                        C’est laquelle cette ligne? Mon mob est prêt mais il ne bouge pas et n’attaque pas. Je ne sais pas si le fait qu’il bouge provienne de l’IA, mais j’aimerai bien en savoir plus car j’ai cherché un peu partout je n’ai pas trouvé de tuto 1.8 sur l’IA d’un mob.
                                        Et je cherche aussi la commande pour qu’il puisse pop de jour. Mais on n’arrive pas à me répondre clairement à l’aide d’exemple.

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

                                          Bonjour mon getAABBPool() est en rouge method is cannot resolved
                                          Peut tu m aider stp

                                          1 réponse Dernière réponse Répondre Citer 0
                                          • robin4002R robin4002 a fait référence à ce sujet sur
                                          • robin4002R robin4002 a fait référence à ce sujet sur
                                          • robin4002R robin4002 a fait référence à ce sujet sur
                                          • 1 / 1
                                          • Premier message
                                            Dernier message
                                          Design by Woryk
                                          ContactMentions Légales

                                          MINECRAFT FORGE FRANCE © 2024

                                          Powered by NodeBB