    001package net.minecraft.entity.ai;
    002
    003import net.minecraft.entity.EntityLiving;
    004import net.minecraft.entity.monster.EntityIronGolem;
    005import net.minecraft.village.Village;
    006
    007public class EntityAIDefendVillage extends EntityAITarget
    008{
    009    EntityIronGolem irongolem;
    010
    011    /**
    012     * The aggressor of the iron golem's village which is now the golem's attack target.
    013     */
    014    EntityLiving villageAgressorTarget;
    015
    016    public EntityAIDefendVillage(EntityIronGolem par1EntityIronGolem)
    017    {
    018        super(par1EntityIronGolem, 16.0F, false, true);
    019        this.irongolem = par1EntityIronGolem;
    020        this.setMutexBits(1);
    021    }
    022
    023    /**
    024     * Returns whether the EntityAIBase should begin execution.
    025     */
    026    public boolean shouldExecute()
    027    {
    028        Village village = this.irongolem.getVillage();
    029
    030        if (village == null)
    031        {
    032            return false;
    033        }
    034        else
    035        {
    036            this.villageAgressorTarget = village.findNearestVillageAggressor(this.irongolem);
    037
    038            if (!this.isSuitableTarget(this.villageAgressorTarget, false))
    039            {
    040                if (this.taskOwner.getRNG().nextInt(20) == 0)
    041                {
    042                    this.villageAgressorTarget = village.func_82685_c(this.irongolem);
    043                    return this.isSuitableTarget(this.villageAgressorTarget, false);
    044                }
    045                else
    046                {
    047                    return false;
    048                }
    049            }
    050            else
    051            {
    052                return true;
    053            }
    054        }
    055    }
    056
    057    /**
    058     * Execute a one shot task or start executing a continuous task
    059     */
    060    public void startExecuting()
    061    {
    062        this.irongolem.setAttackTarget(this.villageAgressorTarget);
    063        super.startExecuting();
    064    }
    065}