package net.minecraft.world.entity.ai.goal;

import net.minecraft.world.level.block.Block;
import net.minecraft.tags.Tag;
import net.minecraft.tags.BlockTags;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.LevelReader;
import java.util.EnumSet;
import net.minecraft.world.entity.PathfinderMob;
import net.minecraft.world.entity.animal.Cat;

public class CatLieOnBedGoal extends MoveToBlockGoal {
    private final Cat cat;
    
    public CatLieOnBedGoal(final Cat aym, final double double2, final int integer) {
        super(aym, double2, integer, 6);
        this.cat = aym;
        this.verticalSearchStart = -2;
        this.setFlags(EnumSet.<Flag>of(Flag.JUMP, Flag.MOVE));
    }
    
    @Override
    public boolean canUse() {
        return this.cat.isTame() && !this.cat.isOrderedToSit() && !this.cat.isLying() && super.canUse();
    }
    
    @Override
    public void start() {
        super.start();
        this.cat.setInSittingPose(false);
    }
    
    @Override
    protected int nextStartTick(final PathfinderMob apg) {
        return 40;
    }
    
    @Override
    public void stop() {
        super.stop();
        this.cat.setLying(false);
    }
    
    @Override
    public void tick() {
        super.tick();
        this.cat.setInSittingPose(false);
        if (!this.isReachedTarget()) {
            this.cat.setLying(false);
        }
        else if (!this.cat.isLying()) {
            this.cat.setLying(true);
        }
    }
    
    @Override
    protected boolean isValidTarget(final LevelReader bqd, final BlockPos fu) {
        return bqd.isEmptyBlock(fu.above()) && bqd.getBlockState(fu).getBlock().is(BlockTags.BEDS);
    }
}
