import BlockBaseType from "./BlockBaseType";
import { BlockRenderType } from "./BlockRenderType";
import IBlockTypeData from "./IBlockTypeData";
import IJavaBlockTypeData from "./IJavaBlockTypeData";
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 { IBlocksMetadataBlockProperty } from "./IBlocksMetadata";
import { IBlockResource } from "./IBlocksCatalog";
export default class BlockType implements IManagedComponentSetItem {
    data: IBlockTypeData;
    javaData: IJavaBlockTypeData | null;
    private _baseType?;
    private _baseTypeId;
    private _isCustom;
    private _behaviorPackData;
    private _behaviorPackFile?;
    private _blockResource?;
    private _isLoaded;
    private _loadedWithComments;
    private _properties;
    behaviorPackBlockTypeDef?: IBlockTypeBehaviorPack;
    private _managed;
    private _onLoaded;
    private _onComponentAdded;
    private _onComponentRemoved;
    private _onComponentChanged;
    get numericId(): number | undefined;
    set numericId(newId: number | undefined);
    get baseTypeId(): string;
    get mapColor(): string | undefined;
    get isCustom(): boolean;
    get baseType(): BlockBaseType;
    get catalogResource(): IBlockResource | undefined;
    set baseType(baseType: BlockBaseType);
    get material(): string;
    renderType: BlockRenderType;
    get icon(): string;
    get title(): string;
    get friendlyName(): string;
    constructor(typeId: string);
    getIcon(): string;
    get id(): string;
    set id(newId: string);
    get onComponentAdded(): import("ste-events").IEvent<BlockType, IManagedComponent>;
    get onComponentRemoved(): import("ste-events").IEvent<BlockType, string>;
    get onComponentChanged(): import("ste-events").IEvent<BlockType, IManagedComponent>;
    get isLoaded(): boolean;
    get behaviorPackFile(): IFile | undefined;
    get onLoaded(): import("ste-events").IEvent<BlockType, BlockType>;
    set behaviorPackFile(newFile: IFile | undefined);
    get shortId(): string;
    getComponent(id: string): IManagedComponent;
    notifyComponentUpdated(id: string): void;
    getAllComponents(): IManagedComponent[];
    getComponents(): IManagedComponent[];
    ensurePropertyDefinition(propertyName: string, propertyDef: IBlocksMetadataBlockProperty): void;
    addComponent(id: string, componentOrData: ManagedComponent | IComponent | string | string[] | boolean | number[] | number | undefined): ManagedComponent;
    removeComponent(id: string): void;
    _ensureBehaviorPackDataInitialized(): 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>;
}
