Jump to content

Mob AI!


wyler0

Recommended Posts

Hey Guys,

I am new here and I will begin my rampage of posts to follow this one with a question:

 

Are their any places to learn mob AI or could one of you help me?

 

 

My Problem:

 

I need to make a mob AI that, when called, will automatically find and follow the nearest mob. The AI Will always be being called (So no wandering AI) I have tried using a clone of the code that makes wolves attack sheep and pass it EntityLiving.class but this does not work. After further testing I have noticed that my script works... but only for Players. So any help would be greatly appreciated!

 

 

[glow=red,2,300]- wyler0/369951369951[/glow]

PS: I am just learning and I am not to bad (in-between moderate and advanced) and am still learning Mob AI to, in the future, create a robot making mod!

 

Link to comment
Share on other sites

After further testing I have noticed that my script works... but only for Players.

Then remove the player references in your code.

 

As for AI, there is no place to learn that.

You can read the AI classes from Minecraft, but an AI is mostly your own code anyway.

You don't have to follow the vanilla AI system either.

Link to comment
Share on other sites

What is your code? where are you declaring your AI class?

Here is my code:

 

package Wyler.Main.Mobs;

 

import java.util.Collections;

import java.util.Iterator;

import java.util.List;

 

import net.minecraft.command.IEntitySelector;

import net.minecraft.entity.Entity;

import net.minecraft.entity.EntityList;

import net.minecraft.entity.EntityLiving;

import net.minecraft.entity.player.EntityPlayer;

import net.minecraft.entity.ai.*;

 

public class aiFollowNearest extends EntityAITarget

{

    EntityLiving targetEntity;

    Class targetClass;

    int targetChance;

    private final IEntitySelector field_82643_g;

 

    /** Instance of EntityAINearestAttackableTargetSorter. */

    private aiFollowNearestSorter aiFollowNearestSorter;

 

    public aiFollowNearest(EntityLiving par1EntityLiving, Class par2Class, float par3, int par4, boolean par5)

    {

        this(par1EntityLiving, par2Class, par3, par4, par5, false);

    }

 

    public aiFollowNearest(EntityLiving par1EntityLiving, Class par2Class, float par3, int par4, boolean par5, boolean par6)

    {

        this(par1EntityLiving, par2Class, par3, par4, par5, par6, (IEntitySelector)null);

    }

 

    public aiFollowNearest(EntityLiving par1, Class par2, float par3, int par4, boolean par5, boolean par6, IEntitySelector par7IEntitySelector)

    {

        super(par1, par3, par5, par6);

        this.targetClass = par2;

        this.targetDistance = par3;

        this.targetChance = par4;

        this.aiFollowNearestSorter = new aiFollowNearestSorter(this, par1);

        this.field_82643_g = par7IEntitySelector;

        this.setMutexBits(1);

    }

 

    /**

    * Returns whether the EntityAIBase should begin execution.

    */

    public boolean shouldExecute()

    {

        if (this.targetChance <= 0) //&& this.taskOwner.getRNG().nextInt(this.targetChance) != 0)

        {

        System.out.println("Tada");

            return false;

        }

        else

        {

            if (this.targetClass == EntityPlayer.class)

            {

                EntityPlayer entityplayer = this.taskOwner.worldObj.getClosestVulnerablePlayerToEntity(this.taskOwner, (double)this.targetDistance);

                if (this.isSuitableTarget(entityplayer, false))

                {

                    this.targetEntity = entityplayer;

                    return true;

                }

            }

            else

            {

                List list = this.taskOwner.worldObj.selectEntitiesWithinAABB(this.targetClass, this.taskOwner.boundingBox.expand((double)this.targetDistance, 4.0D, (double)this.targetDistance), this.field_82643_g);

                Collections.sort(list, this.aiFollowNearestSorter);

                Iterator iterator = list.iterator();

 

                while (iterator.hasNext())

                {

                    Entity entity = (Entity)iterator.next();

                    EntityLiving entityliving = (EntityLiving)entity;

 

                    if (this.isSuitableTarget(entityliving, false))

                    {

                    //WEAIWERWPAJPWOEJPOAWJEOPAWEUPOAWEUPfor(int i = 0; )

                    this.taskOwner.worldObj.getEntityByID(i)

                        this.targetEntity = entityliving;

                        return true;

                    }

                }

            }

 

            return false;

        }

    }

 

    /**

    * Execute a one shot task or start executing a continuous task

    */

    public void startExecuting()

    {

   

        this.taskOwner.setAttackTarget(this.targetEntity);

        super.startExecuting();

    }

}

 

 

Link to comment
Share on other sites

Looks okay, but where do you add this custom AI to mobs?

 

Entity AI 'tasks' and 'targetTasks' are both public fields, so you can add new AI through the use of Events such as EntityConstructingEvent or EntityJoinWorldEvent.

 

If you don't know how to use Forge Events, check out my tutorial: http://www.minecraftforum.net/topic/1952901-eventhandler-and-iextendedentityproperties/

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.

Announcements



×
×
  • Create New...

Important Information

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