Jump to content

Recommended Posts

Posted

I added:

 

this.getAttributeMap().registerAttribute(SharedMonsterAttributes.attackDamage);

this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(4.0D);

 

To applyEntityAttrivutes() but when it goes to attack something it just rubs against it :P

 

Here is the ai code:

 

public EntityBlockGuardianStone(World world) {

 

super(world);

 

this.setSize(0.85F, 0.91F);

 

this.getNavigator().setAvoidsWater(true);

this.getNavigator().setCanSwim(false);

this.tasks.addTask(0, new EntityAIAttackOnCollide(this, 1.0D, true));

        this.tasks.addTask(1, new EntityAIFollowOwner(this, 1.0D, 8.0F, 2.0F));

        this.tasks.addTask(2, new EntityAIPanic(this, 1.5D));

        this.targetTasks.addTask(0, new EntityAIOwnerHurtByTarget(this));

        this.targetTasks.addTask(1, new EntityAIOwnerHurtTarget(this));

        this.targetTasks.addTask(2, new EntityAIAttackOnCollide(this, 1.0D, true));

        this.setTamed(false);

       

}

Posted

The damage done during an attack is actually very convoluted in the Minecraft code.  It is done in the attackEntityAsMob() method which you need to override (it is inherited in EntityLivingBase class where it does nothing but update the last attacker)

 

In the EntityWolf class I think it does something like:

    @Override
public boolean attackEntityAsMob(Entity par1Entity)
    {
        int i = isTamed() ? 4 : 2;
        return par1Entity.attackEntityFrom(DamageSource.causeMobDamage(this), i);
    }

 

However that isn't really good coding because it should really call the super method to ensure the last attacker is updated and also it should get the damage value from the attribute instead of hard-coded as 2 (or 4 if tamed).

 

However, the weird thing is that I think the EntityLivingBase attackEntityAsMob() method has an error in it -- it has this.setLastAttacker(par1Entity) but that is backwards I think -- should be par1Entity.setLastAttacker(this).  Anyone else agree.

 

Anyway, since the wolf class seems to not care about setting last attacker and because it seems backwards to me, I guess just leave it out.  But normally you'd want to consider calling or copying the super method.

 

Overall, to get damage occurring you can modify the method to be something like:

    @Override
public boolean attackEntityAsMob(Entity par1Entity)
    {
        return par1Entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue());
    }

 

As you can see, this doesn't deal damage directly because it wants to let the entity that is hit fully process the attack (for example maybe it has hurt resistance in effect) before fully deciding the damage to deal.

 

Anyway, hope this helps.

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Posted

Correction, previously the code I posted I put in the movementSpeed attribute when of course it should be the attackDamage attribute.  I've corrected it above.  I'll all PM you to make sure you are aware of the correction.

 

public boolean attackEntityAsMob(Entity par1Entity) {

 

this.attackTimer = 50;

 

        return par1Entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue());

       

}

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.