import BlockBaseType from "./BlockBaseType";
import { BlockRenderType } from "./BlockRenderType";
import { IEventHandler } from "ste-events";
import IFile from "../storage/IFile";
import IComponent from "./IComponent";
import IBlockTypeBehaviorPack from "./IBlockTypeBehaviorPack";
import IManagedComponentSetItem from "./IManagedComponentSetItem";
import IManagedComponent from "./IManagedComponent";
import { ManagedComponent } from "./ManagedComponent";
import IDefinition from "./IDefinition";
import ManagedPermutation from "./ManagedPermutation";
import Project from "../app/Project";
import ProjectItem from "../app/ProjectItem";
import RelationsIndex from "../app/RelationsIndex";
import { IBlockResource } from "./IBlocksCatalog";
import { IBlockTypeCreationData } from "./IBlockTypeCreationData";
import { ITerrainTextureDataItem } from "./ITerrainTextureCatalog";
export declare enum BlockStateType {
    string = 0,
    boolean = 1,
    number = 2
}
export default class BlockTypeDefinition implements IManagedComponentSetItem, IDefinition {
    private _typeId;
    private _typeData;
    private _baseType?;
    private _baseTypeId;
    private _material;
    private _isCustom;
    private _wrapper;
    private _file?;
    private _id?;
    private _isLoaded;
    private _loadedWithComments;
    _data?: IBlockTypeBehaviorPack;
    private _managed;
    private _onLoaded;
    private _onComponentAdded;
    private _onComponentRemoved;
    private _onComponentChanged;
    get data(): IBlockTypeBehaviorPack;
    get numericId(): number;
    get baseTypeId(): string;
    get mapColor(): string;
    get isCustom(): boolean;
    get baseType(): BlockBaseType;
    /**
     * Returns true if this block uses a unit cube geometry.
     * Unit cube blocks can be rendered with textures from blocks.json or material_instances.
     *
     * A block is considered a unit cube if:
     * 1. It has minecraft:unit_cube component (legacy)
     * 2. It has geometry = "minecraft:geometry.full_block" or "geometry.full_block"
     * 3. It has no geometry component at all (defaults to unit cube)
     */
    get isUnitCube(): boolean;
    get geometryIdentifier(): any;
    /**
     * Gets the blocks.json catalog resource for this block, if it exists.
     * Returns the IBlockResource which contains texture references for unit cube blocks.
     */
    getBlockCatalogResource(project: Project): Promise<IBlockResource | undefined>;
    setBlockCatalogTexture(project: Project, sideId: "north" | "east" | "west" | "south" | "up" | "down", textureId: string): Promise<void>;
    setTerrainTexture(project: Project, terrainTextureId: string, textureData: ITerrainTextureDataItem): Promise<void>;
    ensureBlockAndTerrainLinks(project: Project, creationData: IBlockTypeCreationData): Promise<void>;
    getFormatVersionIsCurrent(): Promise<boolean>;
    getMissingPermutations(): string[];
    addNextPermutation(): void;
    addPermutation(condition: string): void;
    ensurePermutations(): void;
    hasCustomPermutationConditions(): boolean;
    ensureDescription(): void;
    getManagedPermutations(): ManagedPermutation[];
    getPermutations(): import("./IBlockTypeBehaviorPack").IBlockPermutation[];
    getPlacementDirectionTrait(): import("./IBlockTraits").IPlacementDirectionBlockTrait;
    getPlacementPositionTrait(): import("./IBlockTraits").IPlacementPositionBlockTrait;
    ensurePlacementDirectionTrait(): void;
    removePlacementDirectionTrait(): void;
    ensurePlacementPositionTrait(): void;
    removePlacementPositionTrait(): void;
    ensureBlockTraits(): void;
    removeState(stateName: string): void;
    get formatVersion(): string | undefined;
    getFormatVersion(): number[] | undefined;
    getStateValues(stateId: string): string[] | number[] | boolean[];
    getStates(): {
        [id: string]: string[] | number[] | boolean[];
    };
    addState(stateName: string, stateType: BlockStateType): void;
    getExpandedStateList(): any[];
    getStateList(): any[];
    set baseType(baseType: BlockBaseType);
    get material(): string;
    renderType: BlockRenderType;
    get icon(): string;
    get typeId(): string;
    get shortTypeName(): string;
    get title(): string;
    constructor(name: string);
    get id(): string;
    set id(newId: string);
    get onComponentAdded(): import("ste-events").IEvent<BlockTypeDefinition, IManagedComponent>;
    get onComponentRemoved(): import("ste-events").IEvent<BlockTypeDefinition, string>;
    get onComponentChanged(): import("ste-events").IEvent<BlockTypeDefinition, IManagedComponent>;
    get isLoaded(): boolean;
    get behaviorPackFile(): IFile | undefined;
    get onLoaded(): import("ste-events").IEvent<BlockTypeDefinition, BlockTypeDefinition>;
    set behaviorPackFile(newFile: IFile | undefined);
    _handleFileUpdated(file: IFile, fileB: IFile): void;
    get shortId(): string;
    getPermutationByCondition(permutationCondition: string): import("./IBlockTypeBehaviorPack").IBlockPermutation;
    static getComponentFromBaseFileName(name: string): string;
    ensureComponent(id: string, defaultData?: IComponent | string | string[] | boolean | number[] | number | undefined): IManagedComponent | ManagedComponent;
    getComponent(id: string): IManagedComponent;
    getComponentsInBaseAndPermutations(id: string): IManagedComponent[];
    notifyComponentUpdated(id: string): void;
    getAllComponents(): IManagedComponent[];
    getComponents(): IManagedComponent[];
    addComponent(id: string, componentOrData: ManagedComponent | IComponent | string | string[] | boolean | number[] | number | undefined): ManagedComponent;
    removeComponent(id: string): void;
    getTextureItems(blockTypeProjectItem: ProjectItem, project?: Project): Promise<{
        [name: string]: ProjectItem;
    } | undefined>;
    getGeometryList(): any[];
    /**
     * Gets the list of texture IDs used by this block.
     * Checks both material_instances component and blocks.json catalog.
     */
    getTextureList(): string[];
    /**
     * Gets texture IDs from blocks.json catalog for this block.
     * Used for unit cube blocks that define textures via blocks.json.
     */
    getTextureListFromBlocksCatalog(project: Project): Promise<string[]>;
    _ensureBehaviorPackDataInitialized(): void;
    getPackRootFolder(): any;
    getCustomComponentIds(): string[];
    getLootTablePaths(): string[];
    addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex): Promise<void>;
    static ensureOnFile(file: IFile, loadHandler?: IEventHandler<BlockTypeDefinition, BlockTypeDefinition>, preserveComments?: boolean): Promise<BlockTypeDefinition>;
    addCustomComponent(blockTypeItem: ProjectItem, componentName: string): Promise<void>;
    persist(): boolean;
    /**
     * Loads the definition from the file.
     * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.
     *                         If false (default), uses efficient standard JSON parsing.
     *                         Can be called again with true to "upgrade" a read-only load to read/write.
     */
    load(preserveComments?: boolean): Promise<void>;
}
