Search in sources :

Example 56 with BetterBlockPos

use of baritone.api.utils.BetterBlockPos in project baritone by cabaletta.

the class PathingBehavior method estimatedTicksToGoal.

public Optional<Double> estimatedTicksToGoal() {
    BetterBlockPos currentPos = ctx.playerFeet();
    if (goal == null || currentPos == null || startPosition == null) {
        return Optional.empty();
    }
    if (goal.isInGoal(ctx.playerFeet())) {
        resetEstimatedTicksToGoal();
        return Optional.of(0.0);
    }
    if (ticksElapsedSoFar == 0) {
        return Optional.empty();
    }
    double current = goal.heuristic(currentPos.x, currentPos.y, currentPos.z);
    double start = goal.heuristic(startPosition.x, startPosition.y, startPosition.z);
    if (current == start) {
        // can't check above because current and start can be equal even if currentPos and startPosition are not
        return Optional.empty();
    }
    double eta = Math.abs(current - goal.heuristic()) * ticksElapsedSoFar / Math.abs(start - current);
    return Optional.of(eta);
}
Also used : BetterBlockPos(baritone.api.utils.BetterBlockPos)

Example 57 with BetterBlockPos

use of baritone.api.utils.BetterBlockPos in project baritone by cabaletta.

the class PathingBehavior method pathStart.

/**
 * See issue #209
 *
 * @return The starting {@link BlockPos} for a new path
 */
public BetterBlockPos pathStart() {
    // TODO move to a helper or util class
    BetterBlockPos feet = ctx.playerFeet();
    if (!MovementHelper.canWalkOn(ctx, feet.down())) {
        if (ctx.player().onGround) {
            double playerX = ctx.player().posX;
            double playerZ = ctx.player().posZ;
            ArrayList<BetterBlockPos> closest = new ArrayList<>();
            for (int dx = -1; dx <= 1; dx++) {
                for (int dz = -1; dz <= 1; dz++) {
                    closest.add(new BetterBlockPos(feet.x + dx, feet.y, feet.z + dz));
                }
            }
            closest.sort(Comparator.comparingDouble(pos -> ((pos.x + 0.5D) - playerX) * ((pos.x + 0.5D) - playerX) + ((pos.z + 0.5D) - playerZ) * ((pos.z + 0.5D) - playerZ)));
            for (int i = 0; i < 4; i++) {
                BetterBlockPos possibleSupport = closest.get(i);
                double xDist = Math.abs((possibleSupport.x + 0.5D) - playerX);
                double zDist = Math.abs((possibleSupport.z + 0.5D) - playerZ);
                if (xDist > 0.8 && zDist > 0.8) {
                    // can't possibly be sneaking off of this one, we're too far away
                    continue;
                }
                if (MovementHelper.canWalkOn(ctx, possibleSupport.down()) && MovementHelper.canWalkThrough(ctx, possibleSupport) && MovementHelper.canWalkThrough(ctx, possibleSupport.up())) {
                    // logDebug("Faking path start assuming player is standing off the edge of a block");
                    return possibleSupport;
                }
            }
        } else {
            // we're in the middle of a jump
            if (MovementHelper.canWalkOn(ctx, feet.down().down())) {
                // logDebug("Faking path start assuming player is midair and falling");
                return feet.down();
            }
        }
    }
    return feet;
}
Also used : IPathingBehavior(baritone.api.behavior.IPathingBehavior) Helper(baritone.api.utils.Helper) PathCalculationResult(baritone.api.utils.PathCalculationResult) IGoalRenderPos(baritone.api.utils.interfaces.IGoalRenderPos) MovementHelper(baritone.pathing.movement.MovementHelper) ArrayList(java.util.ArrayList) GoalXZ(baritone.api.pathing.goals.GoalXZ) AStarPathFinder(baritone.pathing.calc.AStarPathFinder) Favoring(baritone.utils.pathing.Favoring) AbstractNodeCostSearch(baritone.pathing.calc.AbstractNodeCostSearch) baritone.api.event.events(baritone.api.event.events) BlockPos(net.minecraft.util.math.BlockPos) CalculationContext(baritone.pathing.movement.CalculationContext) LinkedBlockingQueue(java.util.concurrent.LinkedBlockingQueue) Goal(baritone.api.pathing.goals.Goal) BetterBlockPos(baritone.api.utils.BetterBlockPos) Objects(java.util.Objects) PathingCommand(baritone.api.process.PathingCommand) PathingCommandContext(baritone.utils.PathingCommandContext) IPath(baritone.api.pathing.calc.IPath) PathRenderer(baritone.utils.PathRenderer) Baritone(baritone.Baritone) Optional(java.util.Optional) PathExecutor(baritone.pathing.path.PathExecutor) Comparator(java.util.Comparator) BetterBlockPos(baritone.api.utils.BetterBlockPos) ArrayList(java.util.ArrayList)

Aggregations

BetterBlockPos (baritone.api.utils.BetterBlockPos)57 IBlockState (net.minecraft.block.state.IBlockState)15 Goal (baritone.api.pathing.goals.Goal)14 BlockPos (net.minecraft.util.math.BlockPos)10 CommandInvalidStateException (baritone.api.command.exception.CommandInvalidStateException)9 IWaypoint (baritone.api.cache.IWaypoint)6 GoalBlock (baritone.api.pathing.goals.GoalBlock)6 Waypoint (baritone.api.cache.Waypoint)5 Rotation (baritone.api.utils.Rotation)5 EnumFacing (net.minecraft.util.EnumFacing)5 IBaritone (baritone.api.IBaritone)4 Command (baritone.api.command.Command)4 IArgConsumer (baritone.api.command.argument.IArgConsumer)4 ForBlockOptionalMeta (baritone.api.command.datatypes.ForBlockOptionalMeta)4 RelativeBlockPos (baritone.api.command.datatypes.RelativeBlockPos)4 RelativeGoal (baritone.api.command.datatypes.RelativeGoal)4 CommandException (baritone.api.command.exception.CommandException)4 CommandInvalidTypeException (baritone.api.command.exception.CommandInvalidTypeException)4 IPath (baritone.api.pathing.calc.IPath)4 PathingCommand (baritone.api.process.PathingCommand)4