UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

117 lines (116 loc) 4.17 kB
/** * 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>; }