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