UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

162 lines (161 loc) 9.4 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 ProjectInfoItem_1 = __importDefault(require("../info/ProjectInfoItem")); const IProjectItemData_1 = require("../app/IProjectItemData"); const IInfoItemData_1 = require("../info/IInfoItemData"); const Database_1 = __importDefault(require("../minecraft/Database")); const ProjectUpdateResult_1 = __importDefault(require("../updates/ProjectUpdateResult")); const IUpdateResult_1 = require("../updates/IUpdateResult"); const WorldTemplateManifestDefinition_1 = __importDefault(require("../minecraft/WorldTemplateManifestDefinition")); const MinecraftVersionRules_1 = require("../core/versioning/MinecraftVersionRules"); /** * Validates and updates base game version settings in world template manifests. * * @see {@link ../../../public/data/forms/mctoolsval/basegamever.form.json} for topic definitions */ class BaseGameVersionManager { id = "BASEGAMEVER"; title = "Base Game Version"; performPlatformVersionValidations = false; getUpdaterData(updaterId) { return { title: updaterId.toString(), }; } summarize(info, infoSet) { } async generate(project, content) { const infoItems = []; const ver = await Database_1.default.getLatestVersionInfo(project.effectiveTrack); if (!ver) { infoItems.push(new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.internalProcessingError, this.id, 500, "Could not retrieve version.")); return infoItems; } const verSplit = ver.split("."); if (verSplit.length < 3 || verSplit.length > 4) { infoItems.push(new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.internalProcessingError, this.id, 501, "Could not latest product retrieve version.", undefined, ver)); return infoItems; } const verShort = verSplit[0] + "." + verSplit[1] + "." + verSplit[2]; const itemsCopy = project.getItemsCopy(); for (let i = 0; i < itemsCopy.length; i++) { const pi = itemsCopy[i]; if (pi.itemType === IProjectItemData_1.ProjectItemType.worldTemplateManifestJson) { if (!pi.isContentLoaded) { await pi.loadContent(); } if (pi.primaryFile) { const bpManifest = await WorldTemplateManifestDefinition_1.default.ensureOnFile(pi.primaryFile); if (bpManifest) { if (!bpManifest.definition || !bpManifest.definition.header || !bpManifest.definition.header.base_game_version) { infoItems.push(new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.error, this.id, 100, "World template manifest does not define a header/base_game_version.", pi)); } else { const bpVer = bpManifest?.definition?.header.base_game_version; if (bpVer[0] < parseInt(verSplit[0])) { infoItems.push(new ProjectInfoItem_1.default(this.performPlatformVersionValidations ? IInfoItemData_1.InfoItemType.error : IInfoItemData_1.InfoItemType.recommendation, this.id, 110, "World template manifest base game version (" + bpVer.join(".") + ") has a lower major version number compared to the expected version (" + verShort + ")", pi)); } else if (bpVer[0] > parseInt(verSplit[0])) { infoItems.push(new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.error, this.id, 111, "World template manifest base game version (" + bpVer.join(".") + ") has a higher major version number compared to the expected version (" + verShort + ")", pi)); } else if ((0, MinecraftVersionRules_1.isMinorVersionTooOld)(parseInt(verSplit[0]), parseInt(verSplit[1]), bpVer[1])) { infoItems.push(new ProjectInfoItem_1.default(this.performPlatformVersionValidations ? IInfoItemData_1.InfoItemType.error : IInfoItemData_1.InfoItemType.recommendation, this.id, 120, "World template manifest base game version (" + bpVer.join(".") + ") has a lower minor version number compared to the expected version (" + verShort + ") or its previous minor version", pi)); } else if (bpVer[1] > parseInt(verSplit[1])) { infoItems.push(new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.error, this.id, 121, "World template manifest base game version (" + bpVer.join(".") + ") has a higher minor version number compared to the expected version (" + verShort + ")", pi)); } else if (bpVer[2] < parseInt(verSplit[2])) { infoItems.push(new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.recommendation, this.id, 130, "World template manifest base game version (" + bpVer.join(".") + ") has a lower patch version number compared to the expected version (" + verShort + ")", pi)); } else if (bpVer[2] > parseInt(verSplit[2]) && bpVer[1] === parseInt(verSplit[1])) { infoItems.push(new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.error, this.id, 131, "World template manifest base game version (" + bpVer.join(".") + ") has a higher patch version number compared to the expected version (" + verShort + ")", pi)); } } } } } } return infoItems; } async update(project, updateId) { const results = []; switch (updateId) { case 1: const localResults = await this.updateBaseGameVersionToLatestVersion(project); results.push(...localResults); break; } return results; } getUpdateIds() { return [1]; } async updateBaseGameVersionToLatestVersion(project) { const results = []; const ver = await Database_1.default.getLatestVersionInfo(project.effectiveTrack); if (!ver) { results.push(new ProjectUpdateResult_1.default(IUpdateResult_1.UpdateResultType.internalProcessingError, this.id, 199, "Could not retrieve version.")); return results; } const verSplit = ver.split("."); if (verSplit.length < 3 || verSplit.length > 4) { results.push(new ProjectUpdateResult_1.default(IUpdateResult_1.UpdateResultType.internalProcessingError, this.id, 200, "Could not retrieve latest product version.", undefined, ver)); return results; } const major = parseInt(verSplit[0]); const minor = parseInt(verSplit[1]); const patch = parseInt(verSplit[2]); const itemsCopy = project.getItemsCopy(); for (let i = 0; i < itemsCopy.length; i++) { const pi = itemsCopy[i]; if (pi.itemType === IProjectItemData_1.ProjectItemType.worldTemplateManifestJson) { if (!pi.isContentLoaded) { await pi.loadContent(); } if (pi.primaryFile) { const wtManifest = await WorldTemplateManifestDefinition_1.default.ensureOnFile(pi.primaryFile); if (wtManifest) { const mev = wtManifest.baseGameVersion; if (!mev || mev.length < 3 || mev.length > 4 || mev[0] !== major || mev[1] !== minor || mev[2] !== patch) { wtManifest.setBaseGameVersion([major, minor, patch], project); wtManifest.persist(); results.push(new ProjectUpdateResult_1.default(IUpdateResult_1.UpdateResultType.updatedFile, this.id, 200, "Updated world template base_game_version to '" + major + "." + minor + "." + patch + "'.", pi, ver)); } } } } } return results; } } exports.default = BaseGameVersionManager;