Créer un mob qui attaque les autres entités que le joueur ! (AI)
-
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 rienClass 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();>
-
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.
-
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 -
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 !
-
Quel build de forge utilises-tu ?
-
J’utilise le build 1180
-
Ce tuto est t-il utilisable pour 1.8.8?
-
Nope, il faut maintenant utiliser le système d’AI de Mojang.
-
Comment on fait? Y aura t-il un tuto :/?
-
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.
-
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. -
Bonjour mon getAABBPool() est en rouge method is cannot resolved
Peut tu m aider stp -
R robin4002 a fait référence à ce sujet sur
-
R robin4002 a fait référence à ce sujet sur
-
R robin4002 a fait référence à ce sujet sur