minecraft-src/net/minecraft/world/entity/ai/util/DefaultRandomPos.java
2025-07-04 01:41:11 +03:00

48 lines
2.1 KiB
Java

package net.minecraft.world.entity.ai.util;
import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.PathfinderMob;
import net.minecraft.world.phys.Vec3;
import org.jetbrains.annotations.Nullable;
public class DefaultRandomPos {
@Nullable
public static Vec3 getPos(PathfinderMob mob, int radius, int verticalDistance) {
boolean bl = GoalUtils.mobRestricted(mob, radius);
return RandomPos.generateRandomPos(mob, () -> {
BlockPos blockPos = RandomPos.generateRandomDirection(mob.getRandom(), radius, verticalDistance);
return generateRandomPosTowardDirection(mob, radius, bl, blockPos);
});
}
@Nullable
public static Vec3 getPosTowards(PathfinderMob mob, int radius, int yRange, Vec3 vectorPosition, double amplifier) {
Vec3 vec3 = vectorPosition.subtract(mob.getX(), mob.getY(), mob.getZ());
boolean bl = GoalUtils.mobRestricted(mob, radius);
return RandomPos.generateRandomPos(mob, () -> {
BlockPos blockPos = RandomPos.generateRandomDirectionWithinRadians(mob.getRandom(), radius, yRange, 0, vec3.x, vec3.z, amplifier);
return blockPos == null ? null : generateRandomPosTowardDirection(mob, radius, bl, blockPos);
});
}
@Nullable
public static Vec3 getPosAway(PathfinderMob mob, int radius, int yRange, Vec3 vectorPosition) {
Vec3 vec3 = mob.position().subtract(vectorPosition);
boolean bl = GoalUtils.mobRestricted(mob, radius);
return RandomPos.generateRandomPos(mob, () -> {
BlockPos blockPos = RandomPos.generateRandomDirectionWithinRadians(mob.getRandom(), radius, yRange, 0, vec3.x, vec3.z, (float) (Math.PI / 2));
return blockPos == null ? null : generateRandomPosTowardDirection(mob, radius, bl, blockPos);
});
}
@Nullable
private static BlockPos generateRandomPosTowardDirection(PathfinderMob mob, int radius, boolean shortCircuit, BlockPos pos) {
BlockPos blockPos = RandomPos.generateRandomPosTowardDirection(mob, radius, mob.getRandom(), pos);
return !GoalUtils.isOutsideLimits(blockPos, mob)
&& !GoalUtils.isRestricted(shortCircuit, mob, blockPos)
&& !GoalUtils.isNotStable(mob.getNavigation(), blockPos)
&& !GoalUtils.hasMalus(mob, blockPos)
? blockPos
: null;
}
}