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 }