001 package net.minecraft.src;
002
003 public class EntityAIRestrictOpenDoor extends EntityAIBase
004 {
005 private EntityCreature entityObj;
006 private VillageDoorInfo frontDoor;
007
008 public EntityAIRestrictOpenDoor(EntityCreature par1EntityCreature)
009 {
010 this.entityObj = par1EntityCreature;
011 }
012
013 /**
014 * Returns whether the EntityAIBase should begin execution.
015 */
016 public boolean shouldExecute()
017 {
018 if (this.entityObj.worldObj.isDaytime())
019 {
020 return false;
021 }
022 else
023 {
024 Village var1 = this.entityObj.worldObj.villageCollectionObj.findNearestVillage(MathHelper.floor_double(this.entityObj.posX), MathHelper.floor_double(this.entityObj.posY), MathHelper.floor_double(this.entityObj.posZ), 16);
025
026 if (var1 == null)
027 {
028 return false;
029 }
030 else
031 {
032 this.frontDoor = var1.findNearestDoor(MathHelper.floor_double(this.entityObj.posX), MathHelper.floor_double(this.entityObj.posY), MathHelper.floor_double(this.entityObj.posZ));
033 return this.frontDoor == null ? false : (double)this.frontDoor.getInsideDistanceSquare(MathHelper.floor_double(this.entityObj.posX), MathHelper.floor_double(this.entityObj.posY), MathHelper.floor_double(this.entityObj.posZ)) < 2.25D;
034 }
035 }
036 }
037
038 /**
039 * Returns whether an in-progress EntityAIBase should continue executing
040 */
041 public boolean continueExecuting()
042 {
043 return this.entityObj.worldObj.isDaytime() ? false : !this.frontDoor.isDetachedFromVillageFlag && this.frontDoor.isInside(MathHelper.floor_double(this.entityObj.posX), MathHelper.floor_double(this.entityObj.posZ));
044 }
045
046 /**
047 * Execute a one shot task or start executing a continuous task
048 */
049 public void startExecuting()
050 {
051 this.entityObj.getNavigator().setBreakDoors(false);
052 this.entityObj.getNavigator().setEnterDoors(false);
053 }
054
055 /**
056 * Resets the task
057 */
058 public void resetTask()
059 {
060 this.entityObj.getNavigator().setBreakDoors(true);
061 this.entityObj.getNavigator().setEnterDoors(true);
062 this.frontDoor = null;
063 }
064
065 /**
066 * Updates the task
067 */
068 public void updateTask()
069 {
070 this.frontDoor.incrementDoorOpeningRestrictionCounter();
071 }
072 }