UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

189 lines (188 loc) 10.2 kB
"use strict"; // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const ContentIndex_1 = require("../core/ContentIndex"); const FeatureDefinition_1 = __importDefault(require("../minecraft/FeatureDefinition")); const IProjectItemData_1 = require("./IProjectItemData"); const LookupUtilities_1 = __importDefault(require("./LookupUtilities")); class ProjectLookupUtilities { static referenceCache = {}; static cacheIteration = 0; static async getLookup(project, lookupId) { switch (lookupId.toLowerCase()) { case "blocktype": return await this.getBlockTypeReferences(project); case "entitytype": return await this.getEntityTypeReferences(project); case "itemtype": return await this.getItemTypeReferences(project); case "entitytypeevents": break; case "difficulty": break; case "damagecause": break; case "loottable": break; case "sounddefinition": return await this.getSoundDefinitionReferences(project); case "itemtexture": return await this.getItemTextureReferences(project); case "terraintexture": return await this.getTerrainTextureReferences(project); case "feature": return await this.getFeatureReferences(project); case "entitytypeplusvariants": break; } return undefined; } static async getBlockTypeReferences(project) { if (project.indevInfoSet.contentIndex.iteration !== ProjectLookupUtilities.cacheIteration) { ProjectLookupUtilities.cacheIteration = project.indevInfoSet.contentIndex.iteration; ProjectLookupUtilities.referenceCache = {}; } if (ProjectLookupUtilities.referenceCache["blockType"]) { return ProjectLookupUtilities.referenceCache["blockType"]; } await project.ensureIndevInfoSetGenerated(); let simpleRefs = []; const refs = LookupUtilities_1.default.getReferencesFromAnnotatedValues(project.indevInfoSet.contentIndex.getAll([ContentIndex_1.AnnotationCategory.blockTypeSource]), ContentIndex_1.AnnotationCategory.blockTypeSource, "{0} block type from " + project.name); if (refs) { LookupUtilities_1.default.sortReferences(refs); simpleRefs = refs; } LookupUtilities_1.default.appendReferences(simpleRefs, await LookupUtilities_1.default.getLookup("blockType")); ProjectLookupUtilities.referenceCache["blockType"] = simpleRefs; return simpleRefs; } static async getEntityTypeReferences(project) { if (project.indevInfoSet.contentIndex.iteration !== ProjectLookupUtilities.cacheIteration) { ProjectLookupUtilities.cacheIteration = project.indevInfoSet.contentIndex.iteration; ProjectLookupUtilities.referenceCache = {}; } if (ProjectLookupUtilities.referenceCache["entityType"]) { return ProjectLookupUtilities.referenceCache["entityType"]; } await project.ensureIndevInfoSetGenerated(); let simpleRefs = []; const refs = LookupUtilities_1.default.getReferencesFromAnnotatedValues(project.indevInfoSet.contentIndex.getAll([ContentIndex_1.AnnotationCategory.blockTypeSource]), ContentIndex_1.AnnotationCategory.entityTypeSource, "{0} entity type from " + project.name); if (refs) { LookupUtilities_1.default.sortReferences(refs); simpleRefs = refs; } LookupUtilities_1.default.appendReferences(simpleRefs, await LookupUtilities_1.default.getLookup("entityType")); ProjectLookupUtilities.referenceCache["entityType"] = simpleRefs; return simpleRefs; } static async getItemTypeReferences(project) { if (project.indevInfoSet.contentIndex.iteration !== ProjectLookupUtilities.cacheIteration) { ProjectLookupUtilities.cacheIteration = project.indevInfoSet.contentIndex.iteration; ProjectLookupUtilities.referenceCache = {}; } if (ProjectLookupUtilities.referenceCache["itemType"]) { return ProjectLookupUtilities.referenceCache["itemType"]; } await project.ensureIndevInfoSetGenerated(); let simpleRefs = []; const refs = LookupUtilities_1.default.getReferencesFromAnnotatedValues(project.indevInfoSet.contentIndex.getAll([ContentIndex_1.AnnotationCategory.blockTypeSource]), ContentIndex_1.AnnotationCategory.itemTypeSource, "{0} item type from " + project.name); if (refs) { LookupUtilities_1.default.sortReferences(refs); simpleRefs = refs; } LookupUtilities_1.default.appendReferences(simpleRefs, await LookupUtilities_1.default.getLookup("itemType")); ProjectLookupUtilities.referenceCache["itemType"] = simpleRefs; return simpleRefs; } static async getSoundDefinitionReferences(project) { if (project.indevInfoSet.contentIndex.iteration !== ProjectLookupUtilities.cacheIteration) { ProjectLookupUtilities.cacheIteration = project.indevInfoSet.contentIndex.iteration; ProjectLookupUtilities.referenceCache = {}; } if (ProjectLookupUtilities.referenceCache["soundDefinition"]) { return ProjectLookupUtilities.referenceCache["soundDefinition"]; } await project.ensureIndevInfoSetGenerated(); let simpleRefs = []; const refs = LookupUtilities_1.default.getReferencesFromAnnotatedValues(project.indevInfoSet.contentIndex.getAll([ContentIndex_1.AnnotationCategory.blockTypeSource]), ContentIndex_1.AnnotationCategory.blockTypeSource, "{0} sound from " + project.name); if (refs) { LookupUtilities_1.default.sortReferences(refs); simpleRefs = refs; } LookupUtilities_1.default.appendReferences(simpleRefs, await LookupUtilities_1.default.getLookup("soundDefinition")); ProjectLookupUtilities.referenceCache["soundDefinition"] = simpleRefs; return simpleRefs; } static async getTerrainTextureReferences(project) { if (project.indevInfoSet.contentIndex.iteration !== ProjectLookupUtilities.cacheIteration) { ProjectLookupUtilities.cacheIteration = project.indevInfoSet.contentIndex.iteration; ProjectLookupUtilities.referenceCache = {}; } if (ProjectLookupUtilities.referenceCache["terrainTexture"]) { return ProjectLookupUtilities.referenceCache["terrainTexture"]; } await project.ensureIndevInfoSetGenerated(); let simpleRefs = []; const refs = LookupUtilities_1.default.getReferencesFromAnnotatedValues(project.indevInfoSet.contentIndex.getAll([ContentIndex_1.AnnotationCategory.terrainTextureSource]), ContentIndex_1.AnnotationCategory.terrainTextureSource, "{0} terrain texture from " + project.name); if (refs) { LookupUtilities_1.default.sortReferences(refs); simpleRefs = refs; } LookupUtilities_1.default.appendReferences(simpleRefs, await LookupUtilities_1.default.getLookup("terrainTexture")); ProjectLookupUtilities.referenceCache["terrainTexture"] = simpleRefs; return simpleRefs; } static async getItemTextureReferences(project) { if (project.indevInfoSet.contentIndex.iteration !== ProjectLookupUtilities.cacheIteration) { ProjectLookupUtilities.cacheIteration = project.indevInfoSet.contentIndex.iteration; ProjectLookupUtilities.referenceCache = {}; } if (ProjectLookupUtilities.referenceCache["itemTexture"]) { return ProjectLookupUtilities.referenceCache["itemTexture"]; } await project.ensureIndevInfoSetGenerated(); let simpleRefs = []; const refs = LookupUtilities_1.default.getReferencesFromAnnotatedValues(project.indevInfoSet.contentIndex.getAll([ContentIndex_1.AnnotationCategory.itemTextureSource]), ContentIndex_1.AnnotationCategory.itemTextureSource, "{0} item texture from " + project.name); if (refs) { LookupUtilities_1.default.sortReferences(refs); simpleRefs = refs; } LookupUtilities_1.default.appendReferences(simpleRefs, await LookupUtilities_1.default.getLookup("itemTexture")); ProjectLookupUtilities.referenceCache["itemTexture"] = simpleRefs; return simpleRefs; } static async getFeatureReferences(project) { if (ProjectLookupUtilities.referenceCache["feature"]) { return ProjectLookupUtilities.referenceCache["feature"]; } let simpleRefs = []; // Get features directly from project items const itemsCopy = project.getItemsCopy(); for (const item of itemsCopy) { if (item.itemType === IProjectItemData_1.ProjectItemType.featureBehavior) { if (!item.isContentLoaded) { await item.loadContent(); } if (item.primaryFile) { const featureDef = await FeatureDefinition_1.default.ensureOnFile(item.primaryFile); if (featureDef && featureDef.id) { simpleRefs.push({ id: featureDef.id, description: featureDef.id + " feature from " + project.name, }); } } } } LookupUtilities_1.default.sortReferences(simpleRefs); // Also append vanilla feature references LookupUtilities_1.default.appendReferences(simpleRefs, await LookupUtilities_1.default.getLookup("feature")); ProjectLookupUtilities.referenceCache["feature"] = simpleRefs; return simpleRefs; } } exports.default = ProjectLookupUtilities;