Jump to content

[1.8] [SOLVED] Custom Mob AI problems


Brickfix

Recommended Posts

Hi,

I have a custom entity that shall attack Zombies. But I only can make it run to the next Zombie, but not to attack it.

 

 

This is my Entity Constructor:


public EntityTestMob(World worldIn) 
{
	super(worldIn);

	this.setSize(1.0F, 2.0F);

	this.setEntityToolsAndArmor();


	this.tasks.addTask(0, new EntityAIWander(this, 0.5D));
	//this.tasks.addTask(1, new EntityAIPanic(this, 0.9D));
	this.tasks.addTask(2, new EntityAILookIdle(this));
	this.tasks.addTask(3, new EntityAISwimming(this));
	this.tasks.addTask(4, new EntityAITempt(this, 0.6D, Items.apple, false));
	this.tasks.addTask(5, new EntityAIAvoidEntity(this, new Predicate()
	{
		public boolean shallAvoid(Entity entity)
            {
                return entity instanceof EntityCreeper;
            }
            public boolean apply(Object entityObject)
            {
                return this.shallAvoid((Entity)entityObject);
            }
	}, 6.0F, 1.0D, 1.2D));

	this.tasks.addTask(1, new EntityAIAttackOnCollide(this, EntityZombie.class, 1.0D, true));

        this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntityZombie.class, true));
        this.targetTasks.addTask(2, new EntityAIHurtByTarget(this, false, new Class[0]));
}

 

BTW, I noticed that a lot of minecraft Mobs have several tasks assigned with the same value, e.g.


this.tasks.addTask(2, new EntityAILookIdle(this));
this.tasks.addTask(2, new EntityAISwimming(this))

 

Is the integer (the '2' in this case) a unique ranking or a propability value?

 

Thanks for any response (:

Link to comment
Share on other sites

The int value is for ranking an AI above another (I think). For example, if I understand this right, AIAvoidEntity could be ranked above AIWanader so it avoids an entity before it wanders.

 

If I understand you right, your mob isn't attacking the zombie? Do you override onUpdate()? If so make sure to call the super. If not, override onUpdate() and call the super, it should help.

Link to comment
Share on other sites

I didn't override onUptade(), but I did so now as you sad


@Override
public void onUpdate()
{
	super.onUpdate();
}

 

The problem persists, they still only follow the Zomiey (which looks funny enough), but they do not attack it. The only damage the Zombie is taking is from the sunlight.

 

But thanks for the explanation about the AI, now that I look at it it does make sense :D

Link to comment
Share on other sites

The EntityAIAttackOnCollide task is on the same ranking as EntityAINearestAttackableTarget. Try shifting them down like this:

this.tasks.addTask(1, new EntityAIAttackOnCollide(this, EntityZombie.class, 1.0D, true));
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityZombie.class, true));
this.targetTasks.addTask(3, new EntityAIHurtByTarget(this, false, new Class[0]));

 

Edit: Oh wait, sorry I didn't look very hard. Those are different: task and targetTasks. :) But there is still a problem there, try changing:

this.tasks.addTask(1, new EntityAIAttackOnCollide(this, EntityZombie.class, 1.0D, true));

to:

this.tasks.addTask(6, new EntityAIAttackOnCollide(this, EntityZombie.class, 1.0D, true));

Link to comment
Share on other sites

Okay, first of all there are a few things going on with how different AI work with each other. First of all, within each list (tasks and targetTasks) there is the priority value. It will check if each AI should start based on the priority. The lower the number, the higher the priority. If two have the same priority, then they'll be checked in the order they were added to the list.

 

You can have multiple AI running at the same time, but sometimes you don't want that (you don't want it wandering at the same time it is attacking), so there are the "mutex" bits. This is a masking system which indicates which tasks should be prevented from running together. This is why the priority matters -- if two AI are prevented by the mutex from running simultaneously, then the one that starts first will always get precedence.

 

Lastly, there are two lists that are both simultaneously active: tasks and targetTasks. The priority list is independent in each, so they don't interact. Technically the targetTasks should simply be setting targets and the tasks should be acting on that information, but practically they can be mixed up -- they are just two lists of functionality running side by side.

 

I have a tutorial on this here: http://jabelarminecraft.blogspot.com/p/minecraft-forge-1721710-custom-entity-ai.html

 

Okay, however the original poster's problem is probably not related to the AI. There are a couple other things that can prevent custom entities from successfully attacking. You should read my tutorial on custom entity attacks: http://jabelarminecraft.blogspot.com/p/minecraft-forge-1721710-custom-entity.html

 

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

Link to comment
Share on other sites

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.



×
×
  • Create New...

Important Information

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