import IFile from "../storage/IFile";
import { IEventHandler } from "ste-events";
import IDefinition from "./IDefinition";
import Project from "../app/Project";
import ProjectItem from "../app/ProjectItem";
import RelationsIndex from "../app/RelationsIndex";
import MinecraftAggregateFeature from "@minecraft/bedrock-schemas/types/bp/features/MinecraftAggregateFeature";
import MinecraftBeardsAndShavers from "@minecraft/bedrock-schemas/types/bp/features/MinecraftBeardsAndShavers";
import MinecraftCaveCarverFeature from "@minecraft/bedrock-schemas/types/bp/features/MinecraftCaveCarverFeature";
import MinecraftFossilFeature from "@minecraft/bedrock-schemas/types/bp/features/MinecraftFossilFeature";
import MinecraftGeodeFeature from "@minecraft/bedrock-schemas/types/bp/features/MinecraftGeodeFeature";
import MinecraftGrowingPlantFeature from "@minecraft/bedrock-schemas/types/bp/features/MinecraftGrowingPlantFeature";
import MinecraftMultifaceFeature from "@minecraft/bedrock-schemas/types/bp/features/MinecraftMultifaceFeature";
import MinecraftNetherCaveCarverFeature from "@minecraft/bedrock-schemas/types/bp/features/MinecraftNetherCaveCarverFeature";
import MinecraftOreFeature from "@minecraft/bedrock-schemas/types/bp/features/MinecraftOreFeature";
import MinecraftPartiallyExposedBlobFeature from "@minecraft/bedrock-schemas/types/bp/features/MinecraftPartiallyExposedBlobFeature";
import MinecraftRectLayout from "@minecraft/bedrock-schemas/types/bp/features/MinecraftRectLayout";
import MinecraftScanSurface from "@minecraft/bedrock-schemas/types/bp/features/MinecraftScanSurface";
import MinecraftScatterFeature from "@minecraft/bedrock-schemas/types/bp/features/MinecraftScatterFeature";
import MinecraftSculkPatchFeature from "@minecraft/bedrock-schemas/types/bp/features/MinecraftSculkPatchFeature";
import MinecraftSearchFeature from "@minecraft/bedrock-schemas/types/bp/features/MinecraftSearchFeature";
import MinecraftSequenceFeature from "@minecraft/bedrock-schemas/types/bp/features/MinecraftSequenceFeature";
import MinecraftSingleBlockFeature from "@minecraft/bedrock-schemas/types/bp/features/MinecraftSingleBlockFeature";
import MinecraftSnapToSurfaceFeature from "@minecraft/bedrock-schemas/types/bp/features/MinecraftSnapToSurfaceFeature";
import MinecraftStructureTemplateFeature from "@minecraft/bedrock-schemas/types/bp/features/MinecraftStructureTemplateFeature";
import MinecraftSurfaceRelativeThresholdFeature from "@minecraft/bedrock-schemas/types/bp/features/MinecraftSurfaceRelativeThresholdFeature";
import MinecraftTreeFeature from "@minecraft/bedrock-schemas/types/bp/features/MinecraftTreeFeature";
import MinecraftUnderwaterCaveCarverFeature from "@minecraft/bedrock-schemas/types/bp/features/MinecraftUnderwaterCaveCarverFeature";
import MinecraftVegetationPatchFeature from "@minecraft/bedrock-schemas/types/bp/features/MinecraftVegetationPatchFeature";
import MinecraftWeightedRandomFeature from "@minecraft/bedrock-schemas/types/bp/features/MinecraftWeightedRandomFeature";
import MinecraftFeatureBase from "./jsoncommon/MinecraftFeatureBase";
export declare const FeatureTypes: string[];
export default class FeatureDefinition implements IDefinition {
    private _file?;
    private _id?;
    private _isLoaded;
    private _loadedWithComments;
    private _data?;
    private _onLoaded;
    get typeString(): string;
    get data(): MinecraftFeatureBase | MinecraftAggregateFeature | MinecraftBeardsAndShavers | MinecraftCaveCarverFeature | MinecraftFossilFeature | MinecraftGeodeFeature | MinecraftGrowingPlantFeature | MinecraftMultifaceFeature | MinecraftNetherCaveCarverFeature | MinecraftOreFeature | MinecraftPartiallyExposedBlobFeature | MinecraftRectLayout | MinecraftScanSurface | MinecraftScatterFeature | MinecraftSculkPatchFeature | MinecraftSearchFeature | MinecraftSequenceFeature | MinecraftSingleBlockFeature | MinecraftSnapToSurfaceFeature | MinecraftStructureTemplateFeature | MinecraftSurfaceRelativeThresholdFeature | MinecraftTreeFeature | MinecraftUnderwaterCaveCarverFeature | MinecraftVegetationPatchFeature | MinecraftWeightedRandomFeature;
    get isLoaded(): boolean;
    get file(): IFile | undefined;
    get onLoaded(): import("ste-events").IEvent<FeatureDefinition, FeatureDefinition>;
    set file(newFile: IFile | undefined);
    get id(): string | undefined;
    set id(newId: string | undefined);
    get shortId(): string;
    getFormatVersionIsCurrent(): Promise<boolean>;
    getFormatVersion(): number[] | undefined;
    setResourcePackFormatVersion(versionStr: string): void;
    _ensureDataInitialized(): void;
    static ensureOnFile(file: IFile, loadHandler?: IEventHandler<FeatureDefinition, FeatureDefinition>): Promise<FeatureDefinition>;
    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>;
    /**
     * Extracts all feature identifiers that this feature references/depends on.
     * Different feature types reference other features in different ways:
     * - aggregate_feature, sequence_feature: features[] array of strings
     * - weighted_random_feature: features[] array of [featureId, weight] tuples
     * - scatter_feature, search_feature, beards_and_shavers: places_feature string
     * - conditional_list: conditional_features[] array of objects with places_feature
     * - snap_to_surface_feature: feature_to_snap string
     * - surface_relative_threshold_feature: feature_to_place string
     * - vegetation_patch_feature: vegetation_feature string
     */
    getReferencedFeatureIds(): string[];
    addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex): Promise<void>;
}
