63 lines
2.0 KiB
Java
63 lines
2.0 KiB
Java
|
package net.minecraft.world.entity.ai.goal;
|
||
|
|
||
|
import net.minecraft.core.BlockPos;
|
||
|
import net.minecraft.tags.BlockTags;
|
||
|
import net.minecraft.world.entity.animal.Cat;
|
||
|
import net.minecraft.world.level.LevelReader;
|
||
|
import net.minecraft.world.level.block.BedBlock;
|
||
|
import net.minecraft.world.level.block.Blocks;
|
||
|
import net.minecraft.world.level.block.FurnaceBlock;
|
||
|
import net.minecraft.world.level.block.entity.ChestBlockEntity;
|
||
|
import net.minecraft.world.level.block.state.BlockBehaviour;
|
||
|
import net.minecraft.world.level.block.state.BlockState;
|
||
|
import net.minecraft.world.level.block.state.properties.BedPart;
|
||
|
|
||
|
public class CatSitOnBlockGoal extends MoveToBlockGoal {
|
||
|
private final Cat cat;
|
||
|
|
||
|
public CatSitOnBlockGoal(Cat p_25149_, double p_25150_) {
|
||
|
super(p_25149_, p_25150_, 8);
|
||
|
this.cat = p_25149_;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public boolean canUse() {
|
||
|
return this.cat.isTame() && !this.cat.isOrderedToSit() && super.canUse();
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void start() {
|
||
|
super.start();
|
||
|
this.cat.setInSittingPose(false);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void stop() {
|
||
|
super.stop();
|
||
|
this.cat.setInSittingPose(false);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void tick() {
|
||
|
super.tick();
|
||
|
this.cat.setInSittingPose(this.isReachedTarget());
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
protected boolean isValidTarget(LevelReader p_25153_, BlockPos p_25154_) {
|
||
|
if (!p_25153_.isEmptyBlock(p_25154_.above())) {
|
||
|
return false;
|
||
|
} else {
|
||
|
BlockState blockstate = p_25153_.getBlockState(p_25154_);
|
||
|
if (blockstate.is(Blocks.CHEST)) {
|
||
|
return ChestBlockEntity.getOpenCount(p_25153_, p_25154_) < 1;
|
||
|
} else {
|
||
|
return blockstate.is(Blocks.FURNACE) && blockstate.getValue(FurnaceBlock.LIT)
|
||
|
? true
|
||
|
: blockstate.is(
|
||
|
BlockTags.BEDS, p_25156_ -> p_25156_.getOptionalValue(BedBlock.PART).map(p_148084_ -> p_148084_ != BedPart.HEAD).orElse(true)
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|