package net.minecraft.entity.ai; import net.minecraft.entity.EntityCreature; import net.minecraft.util.MathHelper; import net.minecraft.village.Village; import net.minecraft.village.VillageDoorInfo; public class EntityAIRestrictOpenDoor extends EntityAIBase { private EntityCreature entityObj; private VillageDoorInfo frontDoor; private static final String __OBFID = "CL_00001610"; public EntityAIRestrictOpenDoor(EntityCreature p_i1651_1_) { this.entityObj = p_i1651_1_; } /** * Returns whether the EntityAIBase should begin execution. */ public boolean shouldExecute() { if (this.entityObj.worldObj.isDaytime()) { return false; } else { Village village = this.entityObj.worldObj.villageCollectionObj.findNearestVillage(MathHelper.floor_double(this.entityObj.posX), MathHelper.floor_double(this.entityObj.posY), MathHelper.floor_double(this.entityObj.posZ), 16); if (village == null) { return false; } else { this.frontDoor = village.findNearestDoor(MathHelper.floor_double(this.entityObj.posX), MathHelper.floor_double(this.entityObj.posY), MathHelper.floor_double(this.entityObj.posZ)); 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; } } } /** * Returns whether an in-progress EntityAIBase should continue executing */ public boolean continueExecuting() { return this.entityObj.worldObj.isDaytime() ? false : !this.frontDoor.isDetachedFromVillageFlag && this.frontDoor.isInside(MathHelper.floor_double(this.entityObj.posX), MathHelper.floor_double(this.entityObj.posZ)); } /** * Execute a one shot task or start executing a continuous task */ public void startExecuting() { this.entityObj.getNavigator().setBreakDoors(false); this.entityObj.getNavigator().setEnterDoors(false); } /** * Resets the task */ public void resetTask() { this.entityObj.getNavigator().setBreakDoors(true); this.entityObj.getNavigator().setEnterDoors(true); this.frontDoor = null; } /** * Updates the task */ public void updateTask() { this.frontDoor.incrementDoorOpeningRestrictionCounter(); } }