minecraft-src/net/minecraft/world/entity/ai/util/HoverRandomPos.java
2025-07-04 02:00:41 +03:00

35 lines
1.3 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 HoverRandomPos {
/**
* Tries to generate a random position a couple different ways, and if failing, sees if swimming vertically is an option.
*/
@Nullable
public static Vec3 getPos(PathfinderMob mob, int radius, int yRange, double x, double z, float amplifier, int maxSwimUp, int minSwimUp) {
boolean bl = GoalUtils.mobRestricted(mob, radius);
return RandomPos.generateRandomPos(
mob,
() -> {
BlockPos blockPos = RandomPos.generateRandomDirectionWithinRadians(mob.getRandom(), radius, yRange, 0, x, z, amplifier);
if (blockPos == null) {
return null;
} else {
BlockPos blockPos2 = LandRandomPos.generateRandomPosTowardDirection(mob, radius, bl, blockPos);
if (blockPos2 == null) {
return null;
} else {
blockPos2 = RandomPos.moveUpToAboveSolid(
blockPos2, mob.getRandom().nextInt(maxSwimUp - minSwimUp + 1) + minSwimUp, mob.level().getMaxY(), blockPosx -> GoalUtils.isSolid(mob, blockPosx)
);
return !GoalUtils.isWater(mob, blockPos2) && !GoalUtils.hasMalus(mob, blockPos2) ? blockPos2 : null;
}
}
}
);
}
}