UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

421 lines (420 loc) 20.9 kB
import IFile from "../storage/IFile"; import IFolder from "../storage/IFolder"; import CreatorTools from "./CreatorTools"; import IProjectData, { ProjectEditPreference, ProjectRole, ProjectScriptLanguage, ProjectScriptVersion } from "./IProjectData"; import { ProjectFocus } from "./IProjectData"; import ProjectItem, { IProjectItemContentUpdateEvent } from "./ProjectItem"; import IProjectItemData, { ProjectItemCreationType, ProjectItemStorageType, ProjectItemType } from "./IProjectItemData"; import DifferenceSet from "../storage/DifferenceSet"; import IProjectScriptState from "./IProjectScriptState"; import IStorage, { IFileUpdateEvent, IFolderMove } from "../storage/IStorage"; import LocManager from "../minecraft/LocManager"; import ProjectInfoSet from "../info/ProjectInfoSet"; import ProjectUpdateResult from "../updates/ProjectUpdateResult"; import { StatusTopic, StatusType } from "./Status"; import Pack, { PackType } from "../minecraft/Pack"; import { IErrorable } from "../core/IErrorable"; import { MinecraftTrack } from "./ICreatorToolsData"; import ISimpleReference from "../dataform/ISimpleReference"; import ProjectVariant from "./ProjectVariant"; import IVersionContent from "../storage/IVersionContent"; export declare enum ProjectAutoDeploymentMode { deployOnSave = 0, noAutoDeployment = 1 } export declare enum ProjectErrorState { noError = 0, projectFolderOrFileDoesNotExist = 1, cabinetFileCouldNotBeProcessed = 2 } export declare enum FolderContext { unknown = 0, behaviorPack = 1, resourcePack = 2, skinPack = 3, docs = 4, world = 5, typeDefs = 6, distBuildFolder = 7, vscodeFolder = 8, resourcePackSubPack = 9, metaData = 10, libFolder = 11, persona = 12, mctoolsWorkingFolder = 13, designPack = 14 } export declare const ProjectTargetStrings: string[]; export declare const AUTOGENERATED_CONTENT_TOKEN = "==== AUTOGENERATED"; export declare const AUTOGENERATED_JS_SEPARATOR = "\n// ===== AUTOGENERATED CONTENT ===== CONTENT AT OR BELOW THIS LINE WILL BE WIPED AND UPDATED WHEN USED IN TOOLING"; export declare const AUTOGENERATED_WHOLEFILE_JS_SEPARATOR = "// ===== AUTOGENERATED FILE ===== CONTENT WITHIN THIS FILE WILL BE WIPED AND UPDATED WHEN USED IN TOOLING"; export declare const AUTOGENERATED_WHOLEFILE_MCFUNCTION_SEPARATOR = "# ===== AUTOGENERATED FILE ===== CONTENT WITHIN THIS FILE WILL BE WIPED AND UPDATED WHEN USED IN TOOLING"; export declare const AUTOGENERATED_WHOLEFILE_GENERAL_SEPARATOR = "===== AUTOGENERATED FILE ===== CONTENT WITHIN THIS FILE WILL BE WIPED AND UPDATED WHEN USED IN TOOLING"; export declare const minecraftScriptModules: { id: string; module_name?: string; uuid?: string; preferredVersion: string | number[]; }[]; export declare const remappedMinecraftScriptModules: { [oldModuleName: string]: string; }; export declare const vanillaSliceFolderSeeds: string[]; export default class Project { #private; loc: LocManager; differencesFromGitHub?: DifferenceSet; /** Transient action to perform after this project first opens in the editor (not persisted). */ pendingPostCreateAction?: string; /** Transient content definition to generate after this project first opens in the editor (not persisted). */ pendingContentDefinition?: any; /** Debounce time for external file changes in milliseconds */ static readonly EXTERNAL_CHANGE_DEBOUNCE_MS = 500; docsContainer: IFolder | null; worldContainer: IFolder | null; behaviorPacksContainer: IFolder | null; defaultBehaviorPackFolder: IFolder | null; skinPacksContainer: IFolder | null; defaultSkinPackFolder: IFolder | null; personaPacksContainer: IFolder | null; defaultPersonaPackFolder: IFolder | null; designPacksContainer: IFolder | null; defaultDesignPackFolder: IFolder | null; projectItemAccessoryFolder: IFolder | null; defaultWorldFolder: IFolder | null; resourcePacksContainer: IFolder | null; defaultResourcePackFolder: IFolder | null; creationTime: number; changedFilesSinceLastSaved: { [storagePath: string]: IFile | undefined; }; private _onPropertyChanged; private _onLoaded; private _onInflated; private _onSaved; private _onNeedsSaveChanged; private _onItemChanged; private _onItemContentChanged; private _onItemAdded; private _onItemRemoved; variants: { [label: string]: ProjectVariant; }; hasInferredFiles: boolean; get unknownFiles(): IFile[]; private _unknownFiles; addUnknownFile(file: IFile): void; get hasMultiplePacksOfSameType(): boolean; get readOnlySafety(): boolean; set readOnlySafety(newReadOnly: boolean); get creatorTools(): CreatorTools; /** * Get the project data for persistence. * This includes chat session and other project metadata. */ get projectData(): IProjectData; get role(): ProjectRole; set role(newRole: ProjectRole); get errorState(): ProjectErrorState; get errorMessage(): string; get preferencesFile(): IFile; get accessoryFolders(): IFolder[] | null; set accessoryFolders(folders: IFolder[] | null); get accessoryFilePaths(): string[] | undefined; set accessoryFilePaths(files: string[] | undefined); get indevInfoSet(): ProjectInfoSet; get collapsedStoragePaths(): string[]; set collapsedStoragePaths(newCollapsedPaths: string[]); get packs(): Pack[]; hasUnsavedChanges(): boolean; getBehaviorPackCount(): number; getResourcePackCount(): number; getIsPackFolderManaged(): boolean; get key(): string; get containerName(): string; get defaultNamespace(): string | undefined; get effectiveDefaultNamespace(): string; set defaultNamespace(newDefaultNamespace: string | undefined); get scriptEntryPoint(): string; set scriptEntryPoint(newScriptEntryPoint: string); get worldSettings(): import("../minecraft/IWorldSettings").IWorldSettings; get editorWorldSettings(): import("../minecraft/IWorldSettings").IWorldSettings; get isMinecraftCreator(): boolean; getLookupChoices(lookupId: string): Promise<ISimpleReference[] | undefined>; ensureWorldSettings(): import("../minecraft/IWorldSettings").IWorldSettings; ensureEditorWorldSettings(): import("../minecraft/IWorldSettings").IWorldSettings; get usesCustomWorldSettings(): boolean | undefined; set usesCustomWorldSettings(newValue: boolean | undefined); get isLoaded(): boolean; get isInflated(): boolean; get isRelationsProcessed(): boolean; get distBuildFolder(): IFolder | null; set distBuildFolder(folder: IFolder | null); get libFolder(): IFolder | null; set libFolder(folder: IFolder | null); get distScriptsFolder(): IFolder; get libScriptsFolder(): IFolder; get useProjectNameInRootProjectStorage(): boolean; set useProjectNameInRootProjectStorage(newVal: boolean); get onPropertyChanged(): import("ste-events").IEvent<Project, string>; get onLoaded(): import("ste-events").IEvent<Project, Project>; get onInflated(): import("ste-events").IEvent<Project, Project>; get onSaved(): import("ste-events").IEvent<Project, Project>; get onNeedsSaveChanged(): import("ste-events").IEvent<Project, Project>; get onItemChanged(): import("ste-events").IEvent<Project, ProjectItem>; get onItemContentChanged(): import("ste-events").IEvent<Project, IProjectItemContentUpdateEvent>; get onItemAdded(): import("ste-events").IEvent<Project, ProjectItem>; get onItemRemoved(): import("ste-events").IEvent<Project, ProjectItem>; get projectFolderTitle(): string | undefined; set projectFolderTitle(newTitle: string | undefined); get projectFolder(): IFolder | null; get accessoryFoldersForFilePaths(): IFolder[] | null; get localFolderPath(): string | undefined; set localFolderPath(newPath: string | undefined); get mainDeployFolderPath(): string | undefined; set mainDeployFolderPath(newPath: string | undefined); get localFilePath(): string | undefined; set localFilePath(newPath: string | undefined); get items(): ProjectItem[]; get gitHubReferences(): import("./IGitHubInfo").default[]; getBehaviorPackScriptsFolder(): Promise<IFolder>; ensureBehaviorPackScriptsFolder(): Promise<IFolder>; getMainScriptsFolder(): Promise<IFolder>; ensureProjectItemAccessoryFolder(): Promise<IFolder>; ensureMainScriptsFolder(): Promise<IFolder>; ensureScriptGenFolder(): Promise<IFolder>; get preferredScriptLanguage(): ProjectScriptLanguage; set preferredScriptLanguage(newLanguage: ProjectScriptLanguage); get scriptVersion(): ProjectScriptVersion; get messages(): import("./Status").default[]; set scriptVersion(newVersion: ProjectScriptVersion); get effectiveEditPreference(): ProjectEditPreference.summarized | ProjectEditPreference.editors | ProjectEditPreference.raw; get editPreference(): ProjectEditPreference; set editPreference(newEditPreference: ProjectEditPreference); get contentsModified(): Date; get created(): Date | null; set created(value: Date | null); get lastOpened(): Date | null; set lastOpened(value: Date | null); getItemsCopy(): ProjectItem[]; getItemsByType(itemType: ProjectItemType): ProjectItem[]; initializeWorldSettings(): void; private ensureDefaultWorldName; initializeEditorWorldSettings(): void; private ensureDefaultEditorWorldName; addMessage(message: string, context?: string, operation?: string, type?: StatusType, topic?: StatusTopic): void; appendErrors(errorable: IErrorable, operation?: string): void; removeItem(item: ProjectItem): void; updateContentsModified(): void; get modified(): Date | null; get effectiveShowHiddenItems(): boolean; get showDevFiles(): boolean; set showDevFiles(show: boolean); get showHiddenItems(): boolean; set showHiddenItems(showItems: boolean); get showFunctions(): boolean; set showFunctions(showFunctions: boolean); get showAssets(): boolean; set showAssets(showAssets: boolean); get showTypes(): boolean; set showTypes(showTypes: boolean); get name(): string; get simplifiedName(): string; set name(newName: string); get lastMapDeployedHash(): string | undefined; get lastMapDeployedDate(): Date | undefined; set lastMapDeployedHash(newValue: string | undefined); set lastMapDeployedDate(newValue: Date | undefined); get deployWorldId(): string; set deployWorldId(newValue: string); get previewImageBase64(): string | undefined; set previewImageBase64(newValue: string | undefined); get effectiveCreator(): string; get effectiveShortName(): string; get shortName(): string | undefined; set shortName(newShortName: string | undefined); get creator(): string | undefined; set creator(newCreator: string | undefined); get title(): string; set title(newTitle: string); get track(): MinecraftTrack | undefined; set track(newTrack: MinecraftTrack | undefined); get effectiveTrack(): MinecraftTrack; set originalFullPath(newOriginalPath: string | undefined); get originalFullPath(): string | undefined; set originalFileList(newFileList: string[] | undefined); get originalFileList(): string[] | undefined; set originalGitHubOwner(newGitHubOwner: string | undefined); set originalGalleryId(newGalleryId: string | undefined); get originalGalleryId(): string | undefined; set originalSampleId(newSampleId: string | undefined); get originalSampleId(): string | undefined; get originalGitHubOwner(): string | undefined; set originalGitHubFolder(newGitHubFolder: string | undefined); get originalGitHubFolder(): string | undefined; set originalGitHubRepoName(newGitHubRepoName: string | undefined); get originalGitHubRepoName(): string | undefined; set originalGitHubBranch(newGitHubBranch: string | undefined); get originalGitHubBranch(): string | undefined; set gitHubOwner(newGitHubOwner: string | undefined); get gitHubOwner(): string | undefined; set gitHubFolder(newGitHubFolder: string | undefined); get gitHubFolder(): string | undefined; set gitHubRepoName(newGitHubRepoName: string | undefined); get gitHubRepoName(): string | undefined; set gitHubBranch(newGitHubBranch: string | undefined); get gitHubBranch(): string | undefined; get description(): string; set description(newDescription: string); applyDescription(newTitle: string): Promise<void>; get autoDeploymentMode(): ProjectAutoDeploymentMode; set autoDeploymentMode(newMode: ProjectAutoDeploymentMode); get versionAsArray(): number[]; get versionAsString(): string; get versionMajor(): number | undefined; set versionMajor(newVersion: number | undefined); get versionMinor(): number | undefined; set versionMinor(newVersion: number | undefined); get versionPatch(): number | undefined; set versionPatch(newVersion: number | undefined); get defaultResourcePackUniqueId(): string; set defaultResourcePackUniqueId(newId: string); setDefaultResourcePackUniqueIdAndUpdateDependencies(newId: string): Promise<void>; get defaultResourcePackVersion(): number[]; set defaultResourcePackVersion(newVersion: number[]); get defaultBehaviorPackUniqueId(): string; set defaultBehaviorPackUniqueId(newId: string); setDefaultBehaviorPackUniqueIdAndUpdateDependencies(newId: string): Promise<void>; get defaultBehaviorPackVersion(): number[]; set defaultBehaviorPackVersion(newVersion: number[]); get defaultDataUniqueId(): string; set defaultDataUniqueId(newId: string); /** * Returns true if an info set generation is currently in progress. * Can be used by UI to show waiting state. */ get isInfoSetGenerationInProgress(): boolean; ensureIndevInfoSetGenerated(): Promise<ProjectInfoSet>; /** * Internal method that performs the actual info set generation. * Separated from ensureInfoSetGenerated to allow tracking via promise. */ private _performInfoSetGeneration; ensureScriptInDestination(): Promise<void>; hasScript(): Promise<boolean>; get projectCabinetFile(): IFile; get defaultScriptModuleUniqueId(): string; set defaultScriptModuleUniqueId(newId: string); get focus(): ProjectFocus; set focus(newFocus: ProjectFocus); constructor(creatorTools: CreatorTools, name: string, preferencesFile: IFile | null, sanitizeName?: boolean); notifyProjectItemChanged(item: ProjectItem): void; notifyProjectItemContentChanged(item: ProjectItem, fileUpdate: IFileUpdateEvent): void; clearFolders(): void; ensureVariant(label: string): ProjectVariant; ensureWorldContainer(): Promise<IFolder>; ensureCatalogIndex(): Promise<void>; getDefaultScriptsFile(): Promise<IFile>; inferProjectItemsFromFilesRootFolder(force?: boolean, processingCallback?: (area: string) => void): Promise<void>; ensureAutogeneratedBehaviorPackManifest(): Promise<void>; dispose(): void; resetProjectItems(): void; ensureStoragePathIsCollapsed(storagePath: string): void; get isVanillaSourceProject(): boolean; get isVanillaEditSession(): boolean; computeIsVanillaEditSession(): void; ensureStoragePathIsNotCollapsed(storagePath: string): void; inferProjectItemsFromFiles(force?: boolean, processingCallback?: (area: string) => void, deepScanJson?: boolean): Promise<void>; ensureProjectFolderFromCabinet(): Promise<void>; inferProjectItemsFromZipFile(projectPath: string, file: IFile, force?: boolean): Promise<string | undefined>; processRelations(force?: boolean): Promise<void>; completeProcessItemRelationsBatchProcessing(): Promise<void>; ensureJsIndexFile(): Promise<void>; applyUpdate(updaterId: string, updaterIndex: number): Promise<ProjectUpdateResult[]>; getScriptState(): Promise<IProjectScriptState>; getFirstItemByType(itemType: ProjectItemType): ProjectItem; hasAddonJson(): boolean; private loadFolderStructure; setToVersion(versionId: string): void; getChangeList(): IVersionContent[]; private processProjectFolder; getItemByFile(file: IFile): ProjectItem; getItemByProjectPath(projectPath: string): ProjectItem | undefined; getItemByExtendedOrProjectPath(storagePath: string): ProjectItem | undefined; ensureItemFromFile(file: IFile, itemType: ProjectItemType, folderContext: FolderContext, creationType?: ProjectItemCreationType): ProjectItem; ensureItemByProjectPath(projectPath: string, storageType: ProjectItemStorageType, name: string, itemType: ProjectItemType, context: FolderContext, source?: string, creationType?: ProjectItemCreationType, file?: IFile, tag?: string, isInWorld?: boolean): ProjectItem; getItemByTag(tag: string): ProjectItem | null; hasItemOfType(type: ProjectItemType): boolean; ensureItemByTag(tag: string, name: string, itemType: ProjectItemType, storagePath?: string, storageType?: ProjectItemStorageType, creationType?: ProjectItemCreationType, file?: IFile, isInWorld?: boolean): ProjectItem; ensureWorkingFolderForFile(file: IFile): Promise<IFolder>; createItem(initialSettings: IProjectItemData): ProjectItem; loadPreferencesAndFolder(): Promise<void>; /** * Loads just the project preferences file (lightweight - doesn't load project folder). * Useful for displaying project metadata in lists without full project initialization. */ ensurePreferencesLoaded(): Promise<void>; ensureInflated(): Promise<void>; deletePreferencesFile(): Promise<void>; deleteThisProject(): Promise<void>; saveToFile(): Promise<void>; /** * Updates the project's preview image from available pack icons or textures. * Priority: (1) behavior pack icon, (2) resource pack icon, (3) skin pack icon, (4) any texture */ updatePreviewImageIfNeeded(): Promise<boolean>; private _handleDeployUpdated; save(force?: boolean): Promise<void>; autoCompleteProject(): Promise<void>; updateProjectItemsFromContent(): void; setProjectFolder(newFolder: IFolder): void; attemptToLoadPreferences(): Promise<void>; _unapplyFromProjectFolder(): void; _applyToProjectFolder(): void; ensureProjectFolder(force?: boolean): Promise<IFolder>; _inferProjectItemFromFile(file: IFile, folder: IFolder, fileStoragePath: string): Promise<void>; _handleProjectFolderMoved(folder: IFolder, folderMove: IFolderMove): void; _handleProjectFileContentsUpdated(storage: IStorage, fileUpdate: IFileUpdateEvent): Promise<void>; /** * Handles a file being added externally (e.g., by MCP saving a new model). * Uses debouncing to batch multiple rapid additions into a single re-inference pass. */ _handleProjectFileAdded(storage: IStorage, file: IFile): Promise<void>; /** * Handles a file being removed externally. * Uses debouncing to batch multiple rapid removals into a single cleanup pass. */ _handleProjectFileRemoved(storage: IStorage, filePath: string): Promise<void>; /** * Schedules the debounced flush of external file changes. */ private _scheduleExternalChangeFlush; /** * Processes all pending external file additions and removals. * Called after the debounce timer expires. */ _flushExternalChanges(): Promise<void>; ensureDistFolder(): Promise<IFolder>; ensureDistBuildScriptsFolder(): Promise<IFolder>; getLibFolder(): IFolder | null; getDistBuildFolder(): IFolder | null; ensureLibFolder(): Promise<IFolder>; getLibScriptsFolder(): IFolder | null; getDistBuildScriptsFolder(): IFolder | null; ensureLibScriptsFolder(): Promise<IFolder>; ensureDocsFolder(): Promise<IFolder>; ensureDefaultScriptsFolder(): Promise<IFolder>; getDefaultWorldFolder(): Promise<IFolder | null>; ensurePacks(): Promise<void>; ensurePacksAsync(): Promise<void>; getDefaultBehaviorPackFolder(force?: boolean, preventEnsureFileStorage?: boolean): Promise<IFolder | null>; getDefaultBehaviorPack(): Promise<Pack | undefined>; ensureDefaultBehaviorPackFolder(force?: boolean): Promise<IFolder>; ensureDefaultDesignPackFolder(force?: boolean): Promise<IFolder>; ensurePackByFolder(folder: IFolder, packType: PackType, isInWorld: boolean): Promise<Pack>; getDefaultDesignPackFolder(force?: boolean): Promise<IFolder | null>; getDefaultSkinPackFolder(force?: boolean): Promise<IFolder | null>; getDefaultResourcePackFolder(force?: boolean): Promise<IFolder | null>; ensureDefaultResourcePackFolder(force?: boolean): Promise<IFolder>; ensureLoadedProjectFolder(force?: boolean): Promise<IFolder>; }