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.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    }