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 }