@minecraft/creator-tools
Version:
Minecraft Creator Tools command line and libraries.
117 lines (116 loc) • 4.17 kB
TypeScript
/**
* ARCHITECTURE DOCUMENTATION: ModelDesignDefinition
* ==================================================
*
* This class persists model design data as an accessory file alongside the
* generated geometry file. It enables:
* 1. Design iteration - update existing models without creating duplicates
* 2. Context restoration - AI can reload the design spec to understand/modify it
* 3. Preview regeneration - re-render from saved design on demand
*
* ## Accessory Folder Pattern
*
* For a geometry file at:
* resource_packs/my_pack/models/entity/disco_pig.geo.json
*
* The accessory folder is at:
* design_pack/project_item_data/resource_packs/my_pack/models/entity/disco_pig_geo_json/
*
* And contains:
* - model_design.json: The IMcpModelDesign specification
* - preview.png: Last rendered preview image
* - generation_meta.json: Timestamp, model used, etc.
*
* ## Related Files
* - src/design/ImageEditsDefinition.ts - Similar pattern for image edits
* - src/app/ProjectItem.ts - ensureAccessoryFolder() implementation
* - src/local/MinecraftMcpServer.ts - createModel tool that uses this
*/
import IFile from "../storage/IFile";
import { IEventHandler } from "ste-events";
import Project from "../app/Project";
import ProjectItem from "../app/ProjectItem";
import { IMcpModelDesign } from "../minecraft/IMcpModelDesign";
/**
* Metadata about when/how the model was generated.
*/
export interface IModelGenerationMeta {
/** When the model was last generated */
generatedAt: string;
/** The AI model/tool that generated it (if known) */
generatorModel?: string;
/** The prompt or request that led to generation (if known) */
prompt?: string;
/** Version of the design schema */
schemaVersion: "1.0.0";
}
/**
* The complete persisted model design data.
*/
export interface IModelDesignData {
/** The model design specification */
design: IMcpModelDesign;
/** Generation metadata */
meta: IModelGenerationMeta;
/** The usage context (entity, block, item) */
usage?: "entity" | "block" | "item";
/** What this model was wired to (if any) */
wiredTo?: string;
}
/**
* Manages persistence of model design data in accessory folders.
* Follows the same pattern as ImageEditsDefinition.
*/
export default class ModelDesignDefinition {
private _file?;
private _previewFile?;
private _isLoaded;
data?: IModelDesignData;
project?: Project;
private _onLoaded;
get isLoaded(): boolean;
get file(): IFile | undefined;
set file(newFile: IFile | undefined);
get onLoaded(): import("ste-events").IEvent<ModelDesignDefinition, ModelDesignDefinition>;
get design(): IMcpModelDesign | undefined;
get usage(): "entity" | "block" | "item" | undefined;
get wiredTo(): string | undefined;
/**
* Updates the design data and persists it.
*/
updateDesign(design: IMcpModelDesign, options?: {
usage?: "entity" | "block" | "item";
wiredTo?: string;
generatorModel?: string;
prompt?: string;
}): Promise<void>;
/**
* Saves a preview image to the accessory folder.
*/
savePreview(imageData: Uint8Array): Promise<void>;
/**
* Gets the preview image data if it exists.
*/
getPreview(): Promise<Uint8Array | undefined>;
/**
* Creates or gets a ModelDesignDefinition for a ProjectItem's accessory folder.
* Use this when you have the ProjectItem for the geometry file.
*/
static ensureAsAccessoryOnProjectItem(projectItem: ProjectItem): Promise<ModelDesignDefinition | undefined>;
/**
* Creates or gets a ModelDesignDefinition attached to a file.
*/
static ensureOnFile(file: IFile, project: Project, loadHandler?: IEventHandler<ModelDesignDefinition, ModelDesignDefinition>): Promise<ModelDesignDefinition | undefined>;
/**
* Persists the design data to file (only if semantically different).
*/
persist(): Promise<boolean>;
/**
* Saves the design data to file.
*/
save(): Promise<void>;
/**
* Loads the design data from file.
*/
load(): Promise<void>;
}