UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

168 lines (167 loc) 8.25 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 }); exports.SummaryInfoGeneratorTest = void 0; const ProjectInfoItem_1 = __importDefault(require("./ProjectInfoItem")); const ProjectItemUtilities_1 = __importDefault(require("../app/ProjectItemUtilities")); const MinecraftUtilities_1 = __importDefault(require("../minecraft/MinecraftUtilities")); const Constants_1 = require("../core/Constants"); const IProjectItemData_1 = require("../app/IProjectItemData"); const ResourceManifestDefinition_1 = __importDefault(require("../minecraft/ResourceManifestDefinition")); const BehaviorManifestDefinition_1 = __importDefault(require("../minecraft/BehaviorManifestDefinition")); const IInfoItemData_1 = require("./IInfoItemData"); var SummaryInfoGeneratorTest; (function (SummaryInfoGeneratorTest) { SummaryInfoGeneratorTest[SummaryInfoGeneratorTest["resourceManifest"] = 101] = "resourceManifest"; SummaryInfoGeneratorTest[SummaryInfoGeneratorTest["behaviorManifest"] = 102] = "behaviorManifest"; })(SummaryInfoGeneratorTest || (exports.SummaryInfoGeneratorTest = SummaryInfoGeneratorTest = {})); /** * Aggregates summary information about the project including manifests and content types. * * @see {@link ../../public/data/forms/mctoolsval/summary.form.json} for topic definitions */ class SummaryInfoGenerator { id = "SUMMARY"; title = "Summary Information"; canAlwaysProcess = true; performAddOnValidations = false; summarize(info, infoSet) { info.mctoolsVersion = MinecraftUtilities_1.default.getVersionNumber(Constants_1.constants.version); let typesInUse = []; const typesInUseSet = new Set(); const resourceFeatureMeasures = infoSet.getFeaturesWithInstances(this.id, SummaryInfoGeneratorTest.resourceManifest); for (const resourceFeatureMeasure of resourceFeatureMeasures) { if (resourceFeatureMeasure === "pbr") { info.capabilities.push("vvcompat"); } if (!info.capabilities.includes(resourceFeatureMeasure)) { info.capabilities.push(resourceFeatureMeasure); } } const behaviorFeatureMeasures = infoSet.getFeaturesWithInstances(this.id, SummaryInfoGeneratorTest.behaviorManifest); for (const behaviorFeatureMeasure of behaviorFeatureMeasures) { if (!info.capabilities.includes(behaviorFeatureMeasure)) { info.capabilities.push(behaviorFeatureMeasure); } } if (infoSet.project) { const itemsCopy = infoSet.project.getItemsCopy(); for (const item of itemsCopy) { const typeDesc = ProjectItemUtilities_1.default.getDescriptionForType(item.itemType); if (item.itemType === IProjectItemData_1.ProjectItemType.behaviorPackManifestJson) { if (!info.capabilities.includes("behaviorPack")) { info.capabilities.push("behaviorPack"); } } else if (item.itemType === IProjectItemData_1.ProjectItemType.resourcePackManifestJson) { if (!info.capabilities.includes("resourcePack")) { info.capabilities.push("resourcePack"); } } else if (item.itemType === IProjectItemData_1.ProjectItemType.skinPackManifestJson) { if (!info.capabilities.includes("skinPack")) { info.capabilities.push("skinPack"); } } else if (item.itemType === IProjectItemData_1.ProjectItemType.js) { if (!info.capabilities.includes("scripting")) { info.capabilities.push("scripting"); } } else if (item.itemType === IProjectItemData_1.ProjectItemType.tickJson) { if (!info.capabilities.includes("tickJson")) { info.capabilities.push("tickJson"); } } else if (item.itemType === IProjectItemData_1.ProjectItemType.MCFunction) { if (!info.capabilities.includes("functions")) { info.capabilities.push("functions"); } } else if (item.itemType === IProjectItemData_1.ProjectItemType.animationBehaviorJson) { if (!info.capabilities.includes("behaviorAnimations")) { info.capabilities.push("behaviorAnimations"); } } else if (ProjectItemUtilities_1.default.isVibrantVisualsRelated(item)) { if (!info.capabilities.includes("vvfiles")) { info.capabilities.push("vvfiles"); } } if (!typesInUseSet.has(typeDesc)) { typesInUse.push(typeDesc); typesInUseSet.add(typeDesc); } } } typesInUse.sort(); info.itemTypes = typesInUse; } // this should run after every other summarize pass has happened. summarizePhase2(info, infoSet) { let hasCameraJson = false; if (infoSet.project) { for (const item of infoSet.project.items) { if (item.itemType === IProjectItemData_1.ProjectItemType.cameraBehaviorJson) { hasCameraJson = true; break; // Early exit once found } } } const commands = info.commands; const apisUsed = info.apisUsed; const capabilitiesSet = new Set(info.capabilities); if (hasCameraJson || commands.includes("camera") || apisUsed.includes("setCamera")) { if (!capabilitiesSet.has("camera")) { info.capabilities.push("camera"); } } info.capabilities.sort(); } async generate(project, contentIndex) { const itemsCopy = project.getItemsCopy(); const items = []; const resourceManifestPi = new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.featureAggregate, this.id, SummaryInfoGeneratorTest.resourceManifest, "Resource Manifests"); items.push(resourceManifestPi); const behaviorManifestPi = new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.featureAggregate, this.id, SummaryInfoGeneratorTest.behaviorManifest, "Behavior Manifests"); items.push(behaviorManifestPi); for (const item of itemsCopy) { if (item.itemType === IProjectItemData_1.ProjectItemType.behaviorPackManifestJson) { const manifestFile = item.primaryFile; if (!manifestFile) { continue; } const manifest = await BehaviorManifestDefinition_1.default.ensureOnFile(manifestFile); if (!manifest) { continue; } if (manifest.capabilities) { for (const capability of manifest.capabilities) { behaviorManifestPi.incrementFeature(capability); } } } else if (item.itemType === IProjectItemData_1.ProjectItemType.resourcePackManifestJson) { const manifestFile = item.primaryFile; if (!manifestFile) { continue; } const manifest = await ResourceManifestDefinition_1.default.ensureOnFile(manifestFile); if (!manifest) { continue; } if (manifest.capabilities) { for (const capability of manifest.capabilities) { resourceManifestPi.incrementFeature(capability); } } } } return items; } } exports.default = SummaryInfoGenerator;