@minecraft/creator-tools
Version:
Minecraft Creator Tools command line and libraries.
189 lines (188 loc) • 10.2 kB
JavaScript
;
// 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;