36 lines
1.4 KiB
Java
36 lines
1.4 KiB
Java
package net.minecraft.world.entity.ai.goal;
|
|
|
|
import net.minecraft.core.BlockPos;
|
|
import net.minecraft.core.SectionPos;
|
|
import net.minecraft.server.level.ServerLevel;
|
|
import net.minecraft.world.entity.PathfinderMob;
|
|
import net.minecraft.world.entity.ai.behavior.BehaviorUtils;
|
|
import net.minecraft.world.entity.ai.util.DefaultRandomPos;
|
|
import net.minecraft.world.phys.Vec3;
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
public class MoveBackToVillageGoal extends RandomStrollGoal {
|
|
private static final int MAX_XZ_DIST = 10;
|
|
private static final int MAX_Y_DIST = 7;
|
|
|
|
public MoveBackToVillageGoal(PathfinderMob mob, double speedModifier, boolean checkNoActionTime) {
|
|
super(mob, speedModifier, 10, checkNoActionTime);
|
|
}
|
|
|
|
@Override
|
|
public boolean canUse() {
|
|
ServerLevel serverLevel = (ServerLevel)this.mob.level();
|
|
BlockPos blockPos = this.mob.blockPosition();
|
|
return serverLevel.isVillage(blockPos) ? false : super.canUse();
|
|
}
|
|
|
|
@Nullable
|
|
@Override
|
|
protected Vec3 getPosition() {
|
|
ServerLevel serverLevel = (ServerLevel)this.mob.level();
|
|
BlockPos blockPos = this.mob.blockPosition();
|
|
SectionPos sectionPos = SectionPos.of(blockPos);
|
|
SectionPos sectionPos2 = BehaviorUtils.findSectionClosestToVillage(serverLevel, sectionPos, 2);
|
|
return sectionPos2 != sectionPos ? DefaultRandomPos.getPosTowards(this.mob, 10, 7, Vec3.atBottomCenterOf(sectionPos2.center()), (float) (Math.PI / 2)) : null;
|
|
}
|
|
}
|