@minecraft/creator-tools
Version:
Minecraft Creator Tools command line and libraries.
421 lines (420 loc) • 20.9 kB
TypeScript
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>;
}