import { Bot, Effect, GameMode } from "mineflayer";
import { AABB } from "@nxg-org/mineflayer-util-plugin";
import { Vec3 } from "vec3";
import { getStatusEffectNamesForVersion } from "../../util/physicsUtils";
import { ControlStateHandler } from "../player/playerControls";
import { IEntityState } from ".";
import { IPhysics } from "../engines/IPhysics";
import type { Entity } from "prismarine-entity";
import { PlayerPoses } from "./poses";
import { Heading } from ".";
export declare function convInpToAxes(player: PlayerState): Heading;
export declare class EntityDimensions {
    readonly width: number;
    readonly height: number;
    readonly fixed: boolean;
    constructor(width: number, height: number, fixed: boolean);
    static scalable(f: number, f2: number): EntityDimensions;
    static fixed(f: number, f2: number): EntityDimensions;
    makeBoundingBox(vec3: Vec3): AABB;
    makeBoundingBoxCoords(d: number, d2: number, d3: number): AABB;
    scale(f: number): EntityDimensions;
    scaleRaw(f: number, f2: number): EntityDimensions;
    toString(): string;
}
/**
 * Looking at this code, it's too specified towards players.
 *
 * I will eventually split this code into PlayerState and bot.entityState, where bot.entityState contains fewer controls.
 */
export declare class PlayerState implements IEntityState {
    readonly bot: Bot;
    age: number;
    pos: Vec3;
    vel: Vec3;
    onGround: boolean;
    onClimbable: boolean;
    isInWater: boolean;
    isUnderWater: boolean;
    isInLava: boolean;
    isUnderLava: boolean;
    isInWeb: boolean;
    elytraFlying: boolean;
    elytraEquipped: boolean;
    fireworkRocketDuration: number;
    isCollidedHorizontally: boolean;
    isCollidedHorizontallyMinor: boolean;
    isCollidedVertically: boolean;
    supportingBlockPos: Vec3 | null;
    stuckSpeedMultiplier: Vec3;
    jumpTicks: number;
    jumpQueued: boolean;
    sprintTriggerTime: number;
    flyJumpTriggerTime: number;
    sneakCollision: boolean;
    attributes: Entity["attributes"];
    yaw: number;
    pitch: number;
    control: ControlStateHandler;
    prevControl: ControlStateHandler;
    heading: Heading;
    prevHeading: Heading;
    isUsingItem: boolean;
    isUsingMainHand: boolean;
    isUsingOffHand: boolean;
    jumpBoost: number;
    speed: number;
    slowness: number;
    dolphinsGrace: number;
    slowFalling: number;
    levitation: number;
    blindness: number;
    depthStrider: number;
    swiftSneak: number;
    soulSpeed: number;
    effects: Effect[];
    statusEffectNames: ReturnType<typeof getStatusEffectNamesForVersion>;
    pose: PlayerPoses;
    gameMode: GameMode;
    food: number;
    /**
     * TODO: proper impl.
     */
    mayFly: boolean;
    /**
     * TODO: proper impl.
     */
    flying: boolean;
    /**
     * TODO: proper impl.
     */
    swimming: boolean;
    /**
     * TODO: proper impl.
     */
    _sprinting: boolean;
    get sprinting(): boolean;
    set sprinting(value: boolean);
    /**
     * TODO: proper impl.
     */
    crouching: boolean;
    /**
     * TODO: proper impl.
     */
    fallFlying: boolean;
    /**
     * TODO: proper impl.
     */
    flySpeed: number;
    get onGroundWithoutSupportingBlock(): boolean;
    get height(): number;
    get eyeHeight(): number;
    get halfWidth(): number;
    readonly ctx: IPhysics;
    private readonly supportFeature;
    constructor(ctx: IPhysics, bot: Bot, control?: ControlStateHandler);
    update(bot: Bot, control?: ControlStateHandler): PlayerState;
    apply(bot: Bot): void;
    clone(): PlayerState;
    merge(other: PlayerState): this;
    getBB(): AABB;
    lookAt(vec3: Vec3): void;
    look(yaw: number, pitch: number): void;
}
export { ControlStateHandler };
