import { BlockModel, PackMeta } from '@xmcl/resourcepack';
import { Object3D } from 'three/src/core/Object3D';
import { TextureLoader } from 'three/src/loaders/TextureLoader';
import { MeshBasicMaterial } from 'three/src/materials/MeshBasicMaterial';
import { Vector3 } from 'three/src/math/Vector3';
import type { Texture } from 'three/src/textures/Texture';
interface TextureData {
    url: string;
    animation?: PackMeta.Animation;
}
export interface TextureManager {
    hasTexture(path: string): boolean;
    loadTexture(path: string): Texture;
}
export declare class BasicTextureManager implements TextureManager {
    private textures;
    private loader;
    constructor(textures?: Record<string, TextureData>, loader?: TextureLoader);
    hasTexture(path: string): boolean;
    loadTexture(path: string): Texture;
}
export declare const DEFAULT_TRANSFORM: BlockModel.Transform;
export declare const DEFAULT_DISPLAY: BlockModel.Display;
export declare const BUILTIN_GENERATED: BlockModel.Resolved;
export declare class BlockModelObject extends Object3D {
    animationLoop: boolean;
    displayOption: BlockModel.Display;
    applyDisplay(option: string): void;
    getCenter(): Vector3;
}
export declare class BlockModelFactory {
    readonly textureManager: TextureManager;
    readonly option: {
        clipUVs?: boolean;
        modelOnly?: boolean;
    };
    static TRANSPARENT_MATERIAL: MeshBasicMaterial;
    private cachedMaterial;
    constructor(textureManager: TextureManager, option?: {
        clipUVs?: boolean;
        modelOnly?: boolean;
    });
    /**
       * Get threejs `Object3D` for that block model.
       */
    getObject(model: BlockModel.Resolved, options?: {
        uvlock?: boolean;
        y?: number;
        x?: number;
    }, fix?: number): BlockModelObject;
}
export {};
//# sourceMappingURL=block.d.ts.map