package minefantasy.entity.ai; /** * * @author Anonymous Productions * * Sources are provided for educational reasons. * though small bits of code, or methods can be used in your own creations. */ import net.minecraft.entity.EntityLiving; import net.minecraft.entity.ai.EntityAIDoorInteract; public class EntityAIBreakDoorAnimate extends EntityAIUseDoorMF { private EntityLiving hoster; private int breakTime; public EntityAIBreakDoorAnimate(EntityLiving host) { super(host); hoster = host; } /** * Returns whether the EntityAIBase should begin execution. */ public boolean shouldExecute() { return !super.shouldExecute() ? false : !this.targetDoor.isDoorOpen(this.theEntity.worldObj, this.entityPosX, this.entityPosY, this.entityPosZ); } /** * Execute a one shot task or start executing a continuous task */ public void startExecuting() { super.startExecuting(); this.breakTime = 240; } /** * Returns whether an in-progress EntityAIBase should continue executing */ public boolean continueExecuting() { double var1 = this.theEntity.getDistanceSq((double)this.entityPosX, (double)this.entityPosY, (double)this.entityPosZ); return this.breakTime >= 0 && !this.targetDoor.isDoorOpen(this.theEntity.worldObj, this.entityPosX, this.entityPosY, this.entityPosZ) && var1 < 4.0D; } /** * Updates the task */ public void updateTask() { super.updateTask(); if (this.theEntity.getRNG().nextInt(20) == 0) { hoster.swingItem(); this.theEntity.worldObj.playAuxSFX(1010, this.entityPosX, this.entityPosY, this.entityPosZ, 0); } if (--this.breakTime == 0 && this.theEntity.worldObj.difficultySetting == 3) { this.theEntity.worldObj.setBlockToAir(this.entityPosX, this.entityPosY, this.entityPosZ); this.theEntity.worldObj.playAuxSFX(1012, this.entityPosX, this.entityPosY, this.entityPosZ, 0); this.theEntity.worldObj.playAuxSFX(2001, this.entityPosX, this.entityPosY, this.entityPosZ, this.targetDoor.blockID); } } }