Mob qui attaque que si on l'attaque
-
va voir c’elle du pigman pour tester
je pense qu’elle doivent être du même genre
malheuresement -
J’ai regardé mais je n’arrives pas à le mettre a mes mobs
-
Comment ça?
T’as trouvé quoi comme bout de code? -
C est avec les ia que cela se joue et je pense que tu dois extends ton entity en entityCreature a confirmer ?
-
Le morceau ou il y as le angrymode. A oui peut etre car la j’ai extends entitymob
-
@‘Degraduck’:
Le morceau ou il y as le angrymode. A oui peut etre car la j’ai extends entitymob
Nan ne fais pas trop comme le chien car lui il a aussi un autre code qui permet aux autres a proximité d attaquer celui qui est angry
Fais plus comme je t ai dit tu crees une nouvelle entity et dans sa classe tu mets le strict c est a dire ses attributs (vie - attaque - vitesse……) et que tu as précédemment extends entityCreature perso c ce que j ai fait dans mon mod mais ne l ayant pas sous mes yeux je peux me tromper si c le cas dis moi l erreur je t aiderai
Edit : penses a ajouter les ia qui le rendent neutres si je pe souviens bien
Tu vas dans l EntityZombie et tu copie colles les 2 ia ou l Entityvillager.java est concernée et tu les remets ds ton entity en corrigeant par entityplayer en m occurrence -
D’accord je test cela de suite, n’ayant jamais travaillé avec les Ia je risque d’avoir du mal
-
Est ceci qui faut que je copie: ```java
public boolean attackEntityFrom(DamageSource par1DamageSource, float par2)
{
if (!super.attackEntityFrom(par1DamageSource, par2))
{
return false;
}
else
{
EntityLivingBase var3 = this.getAttackTarget();if (var3 == null && this.getEntityToAttack() instanceof EntityLivingBase)
{
var3 = (EntityLivingBase)this.getEntityToAttack();
}if (var3 == null && par1DamageSource.getEntity() instanceof EntityLivingBase)
{
var3 = (EntityLivingBase)par1DamageSource.getEntity();
}if (var3 != null && this.worldObj.difficultySetting == EnumDifficulty.HARD && (double)this.rand.nextFloat() < this.getEntityAttribute(field_110186_bp).getAttributeValue())
{
int var4 = MathHelper.floor_double(this.posX);
int var5 = MathHelper.floor_double(this.posY);
int var6 = MathHelper.floor_double(this.posZ);
EntityZombie var7 = new EntityZombie(this.worldObj);for (int var8 = 0; var8 < 50; ++var8)
{
int var9 = var4 + MathHelper.getRandomIntegerInRange(this.rand, 7, 40) * MathHelper.getRandomIntegerInRange(this.rand, -1, 1);
int var10 = var5 + MathHelper.getRandomIntegerInRange(this.rand, 7, 40) * MathHelper.getRandomIntegerInRange(this.rand, -1, 1);
int var11 = var6 + MathHelper.getRandomIntegerInRange(this.rand, 7, 40) * MathHelper.getRandomIntegerInRange(this.rand, -1, 1);if (World.doesBlockHaveSolidTopSurface(this.worldObj, var9, var10 - 1, var11) && this.worldObj.getBlockLightValue(var9, var10, var11) < 10)
{
var7.setPosition((double)var9, (double)var10, (double)var11);if (this.worldObj.checkNoEntityCollision(var7.boundingBox) && this.worldObj.getCollidingBoundingBoxes(var7, var7.boundingBox).isEmpty() && !this.worldObj.isAnyLiquid(var7.boundingBox))
{
this.worldObj.spawnEntityInWorld(var7);
var7.setAttackTarget(var3);
var7.onSpawnWithEgg((IEntityLivingData)null);
this.getEntityAttribute(field_110186_bp).applyModifier(new AttributeModifier(“Zombie reinforcement caller charge”, -0.05000000074505806D, 0));
var7.getEntityAttribute(field_110186_bp).applyModifier(new AttributeModifier(“Zombie reinforcement callee charge”, -0.05000000074505806D, 0));
break;
}
}
}
}return true;
}
} -
tu a essayé sa ?
/** * Called when the entity is attacked. */ public boolean attackEntityFrom(DamageSource p_70097_1_, float p_70097_2_) { if (this.isEntityInvulnerable()) { return false; } else { Entity entity = p_70097_1_.getEntity(); if (entity instanceof EntityPlayer) { List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand(32.0D, 32.0D, 32.0D)); for (int i = 0; i < list.size(); ++i) { Entity entity1 = (Entity)list.get(i); if (entity1 instanceof EntityPigZombie) { EntityPigZombie entitypigzombie = (EntityPigZombie)entity1; entitypigzombie.becomeAngryAt(entity); } } this.becomeAngryAt(entity); } return super.attackEntityFrom(p_70097_1_, p_70097_2_); } } /** * Causes this PigZombie to become angry at the supplied Entity (which will be a player). */ private void becomeAngryAt(Entity p_70835_1_) { this.entityToAttack = p_70835_1_; this.angerLevel = 400 + this.rand.nextInt(400); this.randomSoundDelay = this.rand.nextInt(40); }je pense qu’il faut juste que tu enleve la partie ou tout les autres entity PigZombie passent en mode Angry si t’en tape un
-
public boolean attackEntityFrom(DamageSource p_70097_1_, float p_70097_2_) { if (this.isEntityInvulnerable()) { return false; } else { Entity entity = p_70097_1_.getEntity(); if (entity instanceof EntityPlayer) { List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand(32.0D, 32.0D, 32.0D)); for (int i = 0; i < list.size(); ++i) } } return super.attackEntityFrom(p_70097_1_, p_70097_2_); } ``` Comme ceci? -
Nan enleve juste la boucle for et son contenu tout le reste tu le garde et fait des test
-
/** * Called when the entity is attacked. */ public boolean attackEntityFrom(DamageSource p_70097_1_, float p_70097_2_) { if (this.isEntityInvulnerable()) { return false; } else { Entity entity = p_70097_1_.getEntity(); if (entity instanceof EntityPlayer) { List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand(32.0D, 32.0D, 32.0D)); this.becomeAngryAt(entity); } return super.attackEntityFrom(p_70097_1_, p_70097_2_); } } /** * Causes this PigZombie to become angry at the supplied Entity (which will be a player). */ private void becomeAngryAt(Entity p_70835_1_) { this.entityToAttack = p_70835_1_; this.angerLevel = 400 + this.rand.nextInt(400); this.randomSoundDelay = this.rand.nextInt(40); } ``` J'ai essayé ceci sans succès, je verrais demain ta réponse car je vais au lit, bonne soirée. -
Il te faut utiliser les fonctions isAngry, SetAngry …. Que tu pourra trouver dans EntityZombiePigMen
-
Vire cette ligne :
%(#000000)[[size=xx-small]List]%(#000000)[[size=xx-small] list ]%(#666600)[[size=xx-small]=] %(#7f0055)[[size=xx-small]**this**]%(#666600)[[size=xx-small].]%(#000000)[[size=xx-small]worldObj]%(#666600)[[size=xx-small].]%(#000000)[[size=xx-small]getEntitiesWithinAABBExcludingEntity]%(#666600)[[size=xx-small](]%(#7f0055)[[size=xx-small]**this**]%(#666600)[[size=xx-small],] %(#7f0055)[[size=xx-small]**this**]%(#666600)[[size=xx-small].]%(#000000)[[size=xx-small]boundingBox]%(#666600)[[size=xx-small].]%(#000000)[[size=xx-small]expand]%(#666600)[[size=xx-small](]%(#646464)[[size=xx-small]32.0D]%(#666600)[[size=xx-small],] %(#646464)[[size=xx-small]32.0D]%(#666600)[[size=xx-small],] %(#646464)[[size=xx-small]32.0D]%(#666600)[[size=xx-small]));]Elle ne te sert plus a rien a part faire des calculs inutiles
Personnellement j’ai déjà essayé d’utiliser les AI, mais je ne suis pas arrivé a quelque chose de concluant.
Il faut que je me penche un peu plus la dessus. -
J’ai viré cette ligne ```java
List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand(32.0D, 32.0D, 32.0D));après plusieurs tests ce n'est toujours pas concluant, je vais fouiller ce soir en rentrant du travail. -
Après de nombreuses recherches je bloques encore ici, voici la classe de mon mob:
package com.degraduck.mobdofus.common; import java.util.List; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; import net.minecraft.world.World; public class EntityBouftou extends EntityMob { private int angerLevel; private int randomSoundDelay; public EntityBouftou(World par1World) { super(par1World); // TODO Auto-generated constructor stub } public void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(20D); this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(2D); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(1); } public boolean attackEntityFrom(DamageSource par1DamageSource, float par2) { if (this.isEntityInvulnerable()) { return false; } else { Entity var3 = par1DamageSource.getEntity(); if (var3 instanceof EntityPlayer) { List var4 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand(32.0D, 32.0D, 32.0D)); for (int var5 = 0; var5 < var4.size(); ++var5) { Entity var6 = (Entity)var4.get(var5); if (var6 instanceof EntityBouftou) { EntityBouftou var7 = (EntityBouftou)var6; var7.becomeAngryAt(var3); } } this.becomeAngryAt(var3); } return super.attackEntityFrom(par1DamageSource, par2); } } private void becomeAngryAt(Entity par1Entity) { this.entityToAttack = par1Entity; this.angerLevel = 400 + this.rand.nextInt(400); this.randomSoundDelay = this.rand.nextInt(40); } protected void dropFewItems(boolean par1, int par2) { int var3 = this.rand.nextInt(2 + par2); int var4; for (var4 = 0; var4 < var3; ++var4) { this.func_145779_a(Mobdofus.morceaudekamas, 1); } var3 = this.rand.nextInt(2 + par2); for (var4 = 0; var4 < var3; ++var4) { this.func_145779_a(Mobdofus.lainebouftou, 1); } } public EntityItem func_145779_a(Item p_145779_1_, int p_145779_2_) { return this.func_145778_a(p_145779_1_, p_145779_2_, 0.0F); } public EntityItem func_145778_a(Item p_145778_1_, int p_145778_2_, float p_145778_3_) { return this.entityDropItem(new ItemStack(p_145778_1_, p_145778_2_, 0), p_145778_3_); } } -
var1, var2, var3, var4 … omg
-
Oui tu penses que je devrais supprimer une partie de mon code?
-
Ça j’en sais rien, par contre donner un nom explicite a tes variables serait une bonne chose

Sinon pourquoi ne pas faire des Class1, Class2, func1, func2 etc… -
Pas faut, mais c’est du code que j’avais copié dans le code de base du jeu donc j’ai pas renommé.