import IFile from "../storage/IFile";
import IManagedComponentSetItem from "./IManagedComponentSetItem";
import IComponent from "./IComponent";
import { IEventHandler } from "ste-events";
import IItemTypeWrapper from "./IItemTypeWrapper";
import { ManagedComponent } from "./ManagedComponent";
import IManagedComponent from "./IManagedComponent";
import IDefinition from "./IDefinition";
import IItemTypeResourcePack from "./IItemTypeResourcePack";
export default class ItemTypeResourceDefinition implements IManagedComponentSetItem, IDefinition {
    wrapper: IItemTypeWrapper | null;
    private _behaviorPackFile?;
    private _id?;
    private _isLoaded;
    private _loadedWithComments;
    private _managed;
    private _data?;
    private _onLoaded;
    private _onComponentAdded;
    private _onComponentRemoved;
    private _onComponentChanged;
    get data(): IItemTypeResourcePack;
    get onComponentAdded(): import("ste-events").IEvent<ItemTypeResourceDefinition, IManagedComponent>;
    get onComponentRemoved(): import("ste-events").IEvent<ItemTypeResourceDefinition, string>;
    get onComponentChanged(): import("ste-events").IEvent<ItemTypeResourceDefinition, IManagedComponent>;
    get isLoaded(): boolean;
    get behaviorPackFile(): IFile | undefined;
    get onLoaded(): import("ste-events").IEvent<ItemTypeResourceDefinition, ItemTypeResourceDefinition>;
    set behaviorPackFile(newFile: IFile | undefined);
    get id(): string;
    set id(newId: string);
    get shortId(): string;
    getFormatVersionIsCurrent(): Promise<boolean>;
    getFormatVersion(): number[] | undefined;
    getComponent(id: string): IManagedComponent;
    notifyComponentUpdated(id: string): void;
    getAllComponents(): IManagedComponent[];
    getComponents(): IManagedComponent[];
    setResourcePackFormatVersion(versionStr: string): void;
    addComponent(id: string, componentOrData: ManagedComponent | IComponent | string | string[] | boolean | number[] | number | undefined): ManagedComponent;
    removeComponent(id: string): void;
    _ensureDataInitialized(): void;
    static ensureOnFile(file: IFile, loadHandler?: IEventHandler<ItemTypeResourceDefinition, ItemTypeResourceDefinition>): Promise<ItemTypeResourceDefinition>;
    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>;
}
