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 }