export interface BlockStateModelHolder {
    model: string;
    x?: number;
    y?: number;
    uvlock?: boolean;
    weight?: number;
}
type BlockStateDefinitionModel = BlockStateModelHolder | (BlockStateModelHolder & {
    weight?: number;
})[];
export type BlockStateDefinitionVariant<T> = {
    [variant: string]: T;
};
export interface BlockStateDefinition {
    variants?: BlockStateDefinitionVariant<BlockStateDefinitionModel>;
    multipart?: {
        apply: BlockStateDefinitionModel;
        when?: {
            OR?: BlockStateDefinitionVariant<string>[];
        } & BlockStateDefinitionVariant<string>;
    }[];
}
export type Vector = [number, number, number];
export declare const POSSIBLE_FACES: readonly ["south", "north", "east", "west", "up", "down"];
export type Faces = (typeof POSSIBLE_FACES)[number] | 'bottom';
export interface BlockModel {
    parent?: string;
    ambientocclusion?: boolean;
    display?: {
        Position?: {
            rotation?: Vector;
            translation?: Vector;
            scale?: Vector;
        };
    };
    textures?: {
        particle?: string;
        [texture: string]: string;
    };
    elements: {
        from?: Vector;
        to?: Vector;
        rotation?: {
            origin?: Vector;
            axis?: 'x' | 'y' | 'z';
            angle?: number;
            rescale?: boolean;
        };
        shade?: boolean;
        faces?: {
            [face in Faces]: {
                uv?: [number, number, number, number];
                texture?: string;
                cullface?: Faces;
                rotation?: number;
                tintindex?: number;
            };
        };
    }[];
}
export interface BlockModelData {
    name: string;
    models: {
        options: {
            holder: BlockStateModelHolder;
            weight: number;
        }[];
    }[];
}
export interface BlockModelOption {
    name: string;
    holders: BlockStateModelHolder[];
}
export {};
