    001    package net.minecraft.src;
    002
    003    public class EntityAIBreakDoor extends EntityAIDoorInteract
    004    {
    005        private int breakingTime;
    006        private int field_75358_j = -1;
    007
    008        public EntityAIBreakDoor(EntityLiving par1EntityLiving)
    009        {
    010            super(par1EntityLiving);
    011        }
    012
    013        /**
    014         * Returns whether the EntityAIBase should begin execution.
    015         */
    016        public boolean shouldExecute()
    017        {
    018            return !super.shouldExecute() ? false : (!this.theEntity.worldObj.getGameRules().getGameRuleBooleanValue("mobGriefing") ? false : !this.targetDoor.isDoorOpen(this.theEntity.worldObj, this.entityPosX, this.entityPosY, this.entityPosZ));
    019        }
    020
    021        /**
    022         * Execute a one shot task or start executing a continuous task
    023         */
    024        public void startExecuting()
    025        {
    026            super.startExecuting();
    027            this.breakingTime = 0;
    028        }
    029
    030        /**
    031         * Returns whether an in-progress EntityAIBase should continue executing
    032         */
    033        public boolean continueExecuting()
    034        {
    035            double var1 = this.theEntity.getDistanceSq((double)this.entityPosX, (double)this.entityPosY, (double)this.entityPosZ);
    036            return this.breakingTime <= 240 && !this.targetDoor.isDoorOpen(this.theEntity.worldObj, this.entityPosX, this.entityPosY, this.entityPosZ) && var1 < 4.0D;
    037        }
    038
    039        /**
    040         * Resets the task
    041         */
    042        public void resetTask()
    043        {
    044            super.resetTask();
    045            this.theEntity.worldObj.destroyBlockInWorldPartially(this.theEntity.entityId, this.entityPosX, this.entityPosY, this.entityPosZ, -1);
    046        }
    047
    048        /**
    049         * Updates the task
    050         */
    051        public void updateTask()
    052        {
    053            super.updateTask();
    054
    055            if (this.theEntity.getRNG().nextInt(20) == 0)
    056            {
    057                this.theEntity.worldObj.playAuxSFX(1010, this.entityPosX, this.entityPosY, this.entityPosZ, 0);
    058            }
    059
    060            ++this.breakingTime;
    061            int var1 = (int)((float)this.breakingTime / 240.0F * 10.0F);
    062
    063            if (var1 != this.field_75358_j)
    064            {
    065                this.theEntity.worldObj.destroyBlockInWorldPartially(this.theEntity.entityId, this.entityPosX, this.entityPosY, this.entityPosZ, var1);
    066                this.field_75358_j = var1;
    067            }
    068
    069            if (this.breakingTime == 240 && this.theEntity.worldObj.difficultySetting == 3)
    070            {
    071                this.theEntity.worldObj.setBlockWithNotify(this.entityPosX, this.entityPosY, this.entityPosZ, 0);
    072                this.theEntity.worldObj.playAuxSFX(1012, this.entityPosX, this.entityPosY, this.entityPosZ, 0);
    073                this.theEntity.worldObj.playAuxSFX(2001, this.entityPosX, this.entityPosY, this.entityPosZ, this.targetDoor.blockID);
    074            }
    075        }
    076    }