import { Location } from "../lib/index";
import { ScoreRange, GameMode, EntityId, Entity } from 'mdk-nbt';
import { Objective } from "../../../mdk-command/src";
import { SingleArrayResult, LiteralUnion } from "../tools/typings";
export declare function selector(): Selector;
export declare function selector(name: string): Selector;
export declare function selector(selector: SelectorProps): Selector;
/**
 * 选择器
 */
export declare class Selector {
    #private;
    constructor(selector?: SelectorProps | string);
    get objective(): Objective;
    get props(): SelectorProps;
    private arrayHandle;
    private scopeHandle;
    private rangeHandle;
    private mapRangeHandle;
    private normalHandle;
    private mapHandle;
    private handle;
    /**
     * 选择一个objective
     */
    select(objective: string): Objective;
    exacted(): void;
    unexacted(): void;
    /**
     * 格式化选择器
     * @param objectived 是否启用objective
     */
    toString(objectived?: boolean): string;
}
export interface SelectorProps {
    /** 目标选择器 */
    target?: TargetSelector;
    /** 坐标 */
    location?: Location;
    /** 体积尺寸 */
    range?: Range;
    /** 顺序 */
    sort?: SingleArrayResult<SortType>;
    /** 数量 */
    limit?: number;
    /** 距离 */
    distance?: ScoreRange;
    /** 经验等级 */
    level?: ScoreRange;
    /** 垂直旋转角度 */
    x_rotation?: ScoreRange;
    /** 水平旋转角度 */
    y_rotation?: ScoreRange;
    /** 记分板标签 */
    tag?: SingleArrayResult<string>;
    /** 队伍名称 */
    team?: SingleArrayResult<string>;
    /** 游戏模式 */
    gamemode?: SingleArrayResult<GameMode>;
    /** 实体名称 */
    name?: SingleArrayResult<string>;
    /** 实体类型 */
    type?: SingleArrayResult<LiteralUnion<EntityId, string>>;
    /** 谓词 */
    predicate?: string;
    /** nbt数据标签 */
    nbt?: Entity;
    /** 分数 */
    scores?: {
        [name: string]: ScoreRange;
    };
    /** 进度 */
    advancements?: string;
}
interface Range {
    dx: number;
    dy: number;
    dz: number;
}
/**
 * @param random 随机排序
 * @param nearest 将目标由近到远排序
 * @param furthest 将目标由远到近排序
 * @param arbitrary 不进行排序
 *
 */
declare type SortType = 'nearest' | 'furthest' | 'random' | 'arbitrary' | '!nearest' | '!furthest' | '!random' | '!arbitrary';
/**
 * 目标选择器
 * '@p' 最近的玩家，
 * '@r' 随机玩家，
 * '@a' 所有的玩家，
 * '@e' 所有实体，
 * '@s' 执行者自身，
 */
declare type TargetSelector = '@p' | '@r' | '@a' | '@e' | '@s';
export {};
