UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

947 lines 58.4 kB
"use strict"; // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. Object.defineProperty(exports, "__esModule", { value: true }); exports.FormMappings = void 0; const Utilities_1 = require("../core/Utilities"); const Pack_1 = require("../minecraft/Pack"); const StorageUtilities_1 = require("../storage/StorageUtilities"); const IProjectItemData_1 = require("./IProjectItemData"); const ProjectUtilities_1 = require("./ProjectUtilities"); exports.FormMappings = { /* ["" + ProjectItemType.atmosphericsJson]: { formCategory: "client_deferred_rendering", formName: "atmosphericscattering_atmosphericscatteringconfigsettings", select: "minecraft:atmosphere_settings", }, ["" + ProjectItemType.colorGradingJson]: { formCategory: "client_deferred_rendering", formName: "colorgraderconfig_colorgradingparameterssrc", select: "minecraft:color_grading_settings", }, ["" + ProjectItemType.lightingJson]: { formCategory: "client_deferred_rendering", formName: "lightinggroup_lightingimpl_1_21_70", select: "minecraft:lighting_settings", }, ["" + ProjectItemType.pbrJson]: { formCategory: "client_deferred_rendering", formName: "pbrfallbackconfig_pbrfallbackconfigsettings", select: "minecraft:pbr_fallback_settings", }, ["" + ProjectItemType.waterJson]: { formCategory: "client_deferred_rendering", formName: "waterconfig_waterconfigsettingsv1", select: "minecraft:water_settings", }, ["" + ProjectItemType.shadowsJson]: { formCategory: "client_deferred_rendering", formName: "shadowstylizationconfig_shadowstylizationconfigsettings", select: "minecraft:shadow_settings", }, ["" + ProjectItemType.pointLightsJson]: { formCategory: "client_deferred_rendering", formName: "pointlightconfig_pointlightconfigsettings", select: "minecraft:point_light_settings", },*/ }; class ProjectItemUtilities { static inferTypeFromContent(content, fileName) { const type = StorageUtilities_1.default.getTypeFromName(fileName); if (typeof content === "string") { switch (type) { case "json": return ProjectItemUtilities.inferTypeFromJsonContent(content, fileName); } } else { switch (type) { case "png": return { itemType: IProjectItemData_1.ProjectItemType.texture, packType: Pack_1.PackType.resource, path: "/textures/ " }; } } return { itemType: IProjectItemData_1.ProjectItemType.unknown, packType: Pack_1.PackType.behavior, path: "/" }; } static inferTypeFromJsonContent(jsonContent, fileName) { const fileBaseName = StorageUtilities_1.default.getBaseFromName(fileName); if (fileBaseName) { if (fileBaseName.endsWith(".mci")) { return { itemType: IProjectItemData_1.ProjectItemType.contentIndexJson }; } else if (fileBaseName.endsWith(".mcr")) { return { itemType: IProjectItemData_1.ProjectItemType.contentReportJson }; } } const firstHundred = jsonContent.substring(0, 100); if (firstHundred.indexOf('"minecraft:recipe_shaped"') >= 0 || firstHundred.indexOf('"minecraft:recipe_shapeless"') >= 0) { return { itemType: IProjectItemData_1.ProjectItemType.recipeBehavior }; } else if (firstHundred.indexOf('"minecraft:entity"') >= 0) { return { itemType: IProjectItemData_1.ProjectItemType.entityTypeBehavior }; } else if (firstHundred.indexOf('"minecraft:item"') >= 0) { return { itemType: IProjectItemData_1.ProjectItemType.itemTypeBehavior }; } else if (firstHundred.indexOf('"pools"') >= 0) { return { itemType: IProjectItemData_1.ProjectItemType.itemTypeBehavior }; } else if (firstHundred.indexOf('"minecraft:spawn_rules"') >= 0) { return { itemType: IProjectItemData_1.ProjectItemType.spawnRuleBehavior }; } else if (firstHundred.indexOf('"tiers"') >= 0) { return { itemType: IProjectItemData_1.ProjectItemType.tradingBehaviorJson }; } else if (firstHundred.indexOf('"animation_controllers"') >= 0) { return { itemType: IProjectItemData_1.ProjectItemType.animationControllerResourceJson, packType: Pack_1.PackType.resource }; } else if (firstHundred.indexOf('"animations"') >= 0) { return { itemType: IProjectItemData_1.ProjectItemType.animationResourceJson, packType: Pack_1.PackType.resource }; } else if (firstHundred.indexOf('"animations"') >= 0) { return { itemType: IProjectItemData_1.ProjectItemType.animationResourceJson, packType: Pack_1.PackType.resource }; } else if (firstHundred.indexOf('"minecraft:attachable"') >= 0) { return { itemType: IProjectItemData_1.ProjectItemType.attachableResourceJson, packType: Pack_1.PackType.resource }; } else if (firstHundred.indexOf('"minecraft:client_entity"') >= 0) { return { itemType: IProjectItemData_1.ProjectItemType.entityTypeResource, packType: Pack_1.PackType.resource }; } else if (firstHundred.indexOf('"minecraft:fog_settings"') >= 0) { return { itemType: IProjectItemData_1.ProjectItemType.fogResourceJson, packType: Pack_1.PackType.resource }; } else if (firstHundred.indexOf('"minecraft:geometry"') >= 0) { return { itemType: IProjectItemData_1.ProjectItemType.modelGeometryJson, packType: Pack_1.PackType.resource }; } else if (firstHundred.indexOf('"particle_effect"') >= 0) { return { itemType: IProjectItemData_1.ProjectItemType.particleJson, packType: Pack_1.PackType.resource }; } else if (firstHundred.indexOf('"render_controllers"') >= 0) { return { itemType: IProjectItemData_1.ProjectItemType.renderControllerJson, packType: Pack_1.PackType.resource }; } else if (firstHundred.indexOf('"block_culling"') >= 0) { return { itemType: IProjectItemData_1.ProjectItemType.blockCulling, packType: Pack_1.PackType.resource }; } else if (firstHundred.indexOf('"item_catalog"') >= 0) { return { itemType: IProjectItemData_1.ProjectItemType.craftingItemCatalog, packType: Pack_1.PackType.behavior }; } else if (firstHundred.indexOf('"namespace"') >= 0) { return { itemType: IProjectItemData_1.ProjectItemType.uiJson, packType: Pack_1.PackType.resource }; } else if (firstHundred.indexOf('"sound_definitions"') >= 0) { return { itemType: IProjectItemData_1.ProjectItemType.soundDefinitionCatalog, packType: Pack_1.PackType.resource }; } else if (fileBaseName === "manifest") { const jsonO = Utilities_1.default.getJsonObject(jsonContent); if (jsonO !== undefined && jsonO["modules"]) { for (const mod of jsonO["modules"]) { if (mod && mod["type"]) { switch (mod["type"]) { case "script": case "data": return { itemType: IProjectItemData_1.ProjectItemType.behaviorPackManifestJson }; case "resources": return { itemType: IProjectItemData_1.ProjectItemType.resourcePackManifestJson }; } } } } } return { itemType: IProjectItemData_1.ProjectItemType.unknown }; } static getSortOrder(itemType) { // default order is item type * 100; switch (itemType) { case IProjectItemData_1.ProjectItemType.resourcePackManifestJson: // sort next to .behaviorPackManifestJson return 510; case IProjectItemData_1.ProjectItemType.entityTypeBehavior: return 1851; case IProjectItemData_1.ProjectItemType.blockTypeBehavior: return 1852; case IProjectItemData_1.ProjectItemType.itemTypeBehavior: return 1853; case IProjectItemData_1.ProjectItemType.recipeBehavior: return 1860; case IProjectItemData_1.ProjectItemType.particleJson: return 1870; case IProjectItemData_1.ProjectItemType.tickJson: return 903; case IProjectItemData_1.ProjectItemType.soundCatalog: return 9901; case IProjectItemData_1.ProjectItemType.modelGeometryJson: return 5001; case IProjectItemData_1.ProjectItemType.renderControllerJson: return 5003; // sort all the world-y and container-y stuff next to each other case IProjectItemData_1.ProjectItemType.structure: case IProjectItemData_1.ProjectItemType.MCWorld: case IProjectItemData_1.ProjectItemType.MCTemplate: case IProjectItemData_1.ProjectItemType.MCPack: case IProjectItemData_1.ProjectItemType.MCProject: case IProjectItemData_1.ProjectItemType.zip: return 1600 + itemType; } return itemType * 100; } static getCategory(itemType) { switch (itemType) { case IProjectItemData_1.ProjectItemType.MCFunction: case IProjectItemData_1.ProjectItemType.testJs: case IProjectItemData_1.ProjectItemType.actionSet: case IProjectItemData_1.ProjectItemType.animationBehaviorJson: case IProjectItemData_1.ProjectItemType.animationControllerBehaviorJson: case IProjectItemData_1.ProjectItemType.tickJson: case IProjectItemData_1.ProjectItemType.js: case IProjectItemData_1.ProjectItemType.ts: case IProjectItemData_1.ProjectItemType.buildProcessedJs: case IProjectItemData_1.ProjectItemType.catalogIndexJs: return IProjectItemData_1.ProjectItemCategory.logic; case IProjectItemData_1.ProjectItemType.image: case IProjectItemData_1.ProjectItemType.texture: case IProjectItemData_1.ProjectItemType.storeAssetImage: case IProjectItemData_1.ProjectItemType.marketingAssetImage: case IProjectItemData_1.ProjectItemType.uiTexture: case IProjectItemData_1.ProjectItemType.iconImage: case IProjectItemData_1.ProjectItemType.soundDefinitionCatalog: case IProjectItemData_1.ProjectItemType.soundCatalog: case IProjectItemData_1.ProjectItemType.resourcePackManifestJson: case IProjectItemData_1.ProjectItemType.resourcePackListJson: case IProjectItemData_1.ProjectItemType.renderControllerJson: case IProjectItemData_1.ProjectItemType.lightingJson: case IProjectItemData_1.ProjectItemType.textureSetJson: case IProjectItemData_1.ProjectItemType.modelGeometryJson: case IProjectItemData_1.ProjectItemType.material: case IProjectItemData_1.ProjectItemType.materialSetJson: case IProjectItemData_1.ProjectItemType.animationControllerResourceJson: case IProjectItemData_1.ProjectItemType.animationResourceJson: case IProjectItemData_1.ProjectItemType.itemTextureJson: case IProjectItemData_1.ProjectItemType.flipbookTexturesJson: case IProjectItemData_1.ProjectItemType.terrainTextureCatalogResourceJson: case IProjectItemData_1.ProjectItemType.globalVariablesJson: case IProjectItemData_1.ProjectItemType.uiJson: case IProjectItemData_1.ProjectItemType.lang: case IProjectItemData_1.ProjectItemType.languagesCatalogResourceJson: case IProjectItemData_1.ProjectItemType.ninesliceJson: case IProjectItemData_1.ProjectItemType.attachableResourceJson: case IProjectItemData_1.ProjectItemType.audio: return IProjectItemData_1.ProjectItemCategory.assets; case IProjectItemData_1.ProjectItemType.entityTypeBehavior: case IProjectItemData_1.ProjectItemType.entityTypeResource: case IProjectItemData_1.ProjectItemType.entityTypeBaseJs: case IProjectItemData_1.ProjectItemType.entityTypeBaseTs: case IProjectItemData_1.ProjectItemType.blockTypeBehavior: case IProjectItemData_1.ProjectItemType.blocksCatalogResourceJson: case IProjectItemData_1.ProjectItemType.blockTypeResourceJsonDoNotUse: case IProjectItemData_1.ProjectItemType.itemTypeBehavior: case IProjectItemData_1.ProjectItemType.fogResourceJson: case IProjectItemData_1.ProjectItemType.tradingBehaviorJson: case IProjectItemData_1.ProjectItemType.particleJson: case IProjectItemData_1.ProjectItemType.structure: case IProjectItemData_1.ProjectItemType.recipeBehavior: case IProjectItemData_1.ProjectItemType.biomeBehaviorJson: case IProjectItemData_1.ProjectItemType.biomeResourceJson: case IProjectItemData_1.ProjectItemType.lootTableBehavior: case IProjectItemData_1.ProjectItemType.spawnRuleBehavior: case IProjectItemData_1.ProjectItemType.dialogueBehaviorJson: case IProjectItemData_1.ProjectItemType.MCWorld: case IProjectItemData_1.ProjectItemType.worldTemplateManifestJson: case IProjectItemData_1.ProjectItemType.itemTypeResourceJson: case IProjectItemData_1.ProjectItemType.featureBehavior: case IProjectItemData_1.ProjectItemType.featureRuleBehaviorJson: return IProjectItemData_1.ProjectItemCategory.types; case IProjectItemData_1.ProjectItemType.esLintConfigMjs: case IProjectItemData_1.ProjectItemType.env: case IProjectItemData_1.ProjectItemType.justConfigTs: case IProjectItemData_1.ProjectItemType.packageLockJson: case IProjectItemData_1.ProjectItemType.jsconfigJson: case IProjectItemData_1.ProjectItemType.prettierRcJson: case IProjectItemData_1.ProjectItemType.tsconfigJson: case IProjectItemData_1.ProjectItemType.docfxJson: case IProjectItemData_1.ProjectItemType.jsdocJson: case IProjectItemData_1.ProjectItemType.vsCodeExtensionsJson: case IProjectItemData_1.ProjectItemType.vsCodeLaunchJson: case IProjectItemData_1.ProjectItemType.vsCodeSettingsJson: case IProjectItemData_1.ProjectItemType.vsCodeTasksJson: return IProjectItemData_1.ProjectItemCategory.build; case IProjectItemData_1.ProjectItemType.mcToolsProjectPreferences: return IProjectItemData_1.ProjectItemCategory.mctools; case IProjectItemData_1.ProjectItemType.zip: case IProjectItemData_1.ProjectItemType.MCAddon: case IProjectItemData_1.ProjectItemType.MCPack: case IProjectItemData_1.ProjectItemType.MCTemplate: case IProjectItemData_1.ProjectItemType.MCProject: case IProjectItemData_1.ProjectItemType.behaviorPackFolder: case IProjectItemData_1.ProjectItemType.resourcePackFolder: case IProjectItemData_1.ProjectItemType.skinPackFolder: return IProjectItemData_1.ProjectItemCategory.package; } return IProjectItemData_1.ProjectItemCategory.unknown; } static isImageType(itemType) { if (itemType === IProjectItemData_1.ProjectItemType.image || itemType === IProjectItemData_1.ProjectItemType.texture || itemType === IProjectItemData_1.ProjectItemType.storeAssetImage || itemType === IProjectItemData_1.ProjectItemType.marketingAssetImage || itemType === IProjectItemData_1.ProjectItemType.uiTexture || itemType === IProjectItemData_1.ProjectItemType.iconImage) { return true; } return false; } static isAudioType(itemType) { if (itemType === IProjectItemData_1.ProjectItemType.audio) { return true; } return false; } static isPackageType(itemType) { if (itemType === IProjectItemData_1.ProjectItemType.zip || itemType === IProjectItemData_1.ProjectItemType.MCAddon || itemType === IProjectItemData_1.ProjectItemType.MCPack || itemType === IProjectItemData_1.ProjectItemType.MCProject || itemType === IProjectItemData_1.ProjectItemType.MCWorld || itemType === IProjectItemData_1.ProjectItemType.MCTemplate) { return true; } return false; } static isBinaryType(itemType) { if (this.isImageType(itemType) || this.isPackageType(itemType) || this.isAudioType(itemType)) { return true; } return false; } static getMimeTypes(item) { switch (item.itemType) { case IProjectItemData_1.ProjectItemType.js: case IProjectItemData_1.ProjectItemType.testJs: case IProjectItemData_1.ProjectItemType.entityTypeBaseJs: case IProjectItemData_1.ProjectItemType.buildProcessedJs: case IProjectItemData_1.ProjectItemType.catalogIndexJs: case IProjectItemData_1.ProjectItemType.entityTypeBaseTs: case IProjectItemData_1.ProjectItemType.esLintConfigMjs: case IProjectItemData_1.ProjectItemType.blockTypeBaseJs: return ["application/javascript"]; case IProjectItemData_1.ProjectItemType.justConfigTs: case IProjectItemData_1.ProjectItemType.ts: case IProjectItemData_1.ProjectItemType.blockTypeBaseTs: return ["application/typescript"]; case IProjectItemData_1.ProjectItemType.json: case IProjectItemData_1.ProjectItemType.behaviorPackManifestJson: case IProjectItemData_1.ProjectItemType.resourcePackManifestJson: case IProjectItemData_1.ProjectItemType.entityTypeBehavior: case IProjectItemData_1.ProjectItemType.tickJson: case IProjectItemData_1.ProjectItemType.aimAssistJson: case IProjectItemData_1.ProjectItemType.waterJson: case IProjectItemData_1.ProjectItemType.shadowsJson: case IProjectItemData_1.ProjectItemType.pbrJson: case IProjectItemData_1.ProjectItemType.atmosphericsJson: case IProjectItemData_1.ProjectItemType.pointLightsJson: case IProjectItemData_1.ProjectItemType.colorGradingJson: case IProjectItemData_1.ProjectItemType.cameraJson: case IProjectItemData_1.ProjectItemType.actionSet: case IProjectItemData_1.ProjectItemType.worldTest: case IProjectItemData_1.ProjectItemType.behaviorPackListJson: case IProjectItemData_1.ProjectItemType.resourcePackListJson: case IProjectItemData_1.ProjectItemType.animationBehaviorJson: case IProjectItemData_1.ProjectItemType.animationControllerBehaviorJson: case IProjectItemData_1.ProjectItemType.blockTypeBehavior: case IProjectItemData_1.ProjectItemType.blockMaterialsBehaviorJson: case IProjectItemData_1.ProjectItemType.itemTypeBehavior: case IProjectItemData_1.ProjectItemType.lootTableBehavior: case IProjectItemData_1.ProjectItemType.biomeResourceJson: case IProjectItemData_1.ProjectItemType.fileListArrayJson: case IProjectItemData_1.ProjectItemType.blocksCatalogResourceJson: case IProjectItemData_1.ProjectItemType.soundCatalog: case IProjectItemData_1.ProjectItemType.animationResourceJson: case IProjectItemData_1.ProjectItemType.animationControllerResourceJson: case IProjectItemData_1.ProjectItemType.entityTypeResource: case IProjectItemData_1.ProjectItemType.fogResourceJson: case IProjectItemData_1.ProjectItemType.modelGeometryJson: case IProjectItemData_1.ProjectItemType.particleJson: case IProjectItemData_1.ProjectItemType.renderControllerJson: case IProjectItemData_1.ProjectItemType.ninesliceJson: case IProjectItemData_1.ProjectItemType.uiJson: case IProjectItemData_1.ProjectItemType.languagesCatalogResourceJson: case IProjectItemData_1.ProjectItemType.biomeBehaviorJson: case IProjectItemData_1.ProjectItemType.dialogueBehaviorJson: case IProjectItemData_1.ProjectItemType.featureRuleBehaviorJson: case IProjectItemData_1.ProjectItemType.featureBehavior: case IProjectItemData_1.ProjectItemType.functionEventJson: case IProjectItemData_1.ProjectItemType.recipeBehavior: case IProjectItemData_1.ProjectItemType.spawnRuleBehavior: case IProjectItemData_1.ProjectItemType.tradingBehaviorJson: case IProjectItemData_1.ProjectItemType.volumeBehaviorJson: case IProjectItemData_1.ProjectItemType.attachableResourceJson: case IProjectItemData_1.ProjectItemType.itemTypeResourceJson: case IProjectItemData_1.ProjectItemType.materialsResourceJson: case IProjectItemData_1.ProjectItemType.musicDefinitionJson: case IProjectItemData_1.ProjectItemType.soundDefinitionCatalog: case IProjectItemData_1.ProjectItemType.contentIndexJson: case IProjectItemData_1.ProjectItemType.contentReportJson: case IProjectItemData_1.ProjectItemType.tsconfigJson: case IProjectItemData_1.ProjectItemType.prettierRcJson: case IProjectItemData_1.ProjectItemType.jsconfigJson: case IProjectItemData_1.ProjectItemType.docfxJson: case IProjectItemData_1.ProjectItemType.jsdocJson: case IProjectItemData_1.ProjectItemType.packageJson: case IProjectItemData_1.ProjectItemType.packageLockJson: case IProjectItemData_1.ProjectItemType.docInfoJson: case IProjectItemData_1.ProjectItemType.scriptTypesJson: case IProjectItemData_1.ProjectItemType.vanillaDataJson: case IProjectItemData_1.ProjectItemType.engineOrderingJson: case IProjectItemData_1.ProjectItemType.commandSetDefinitionJson: case IProjectItemData_1.ProjectItemType.skinPackManifestJson: case IProjectItemData_1.ProjectItemType.blockCulling: case IProjectItemData_1.ProjectItemType.craftingItemCatalog: case IProjectItemData_1.ProjectItemType.personaManifestJson: case IProjectItemData_1.ProjectItemType.vsCodeLaunchJson: case IProjectItemData_1.ProjectItemType.vsCodeTasksJson: case IProjectItemData_1.ProjectItemType.vsCodeSettingsJson: case IProjectItemData_1.ProjectItemType.vsCodeExtensionsJson: case IProjectItemData_1.ProjectItemType.worldTemplateManifestJson: case IProjectItemData_1.ProjectItemType.textureSetJson: case IProjectItemData_1.ProjectItemType.textureListJson: case IProjectItemData_1.ProjectItemType.lightingJson: case IProjectItemData_1.ProjectItemType.flipbookTexturesJson: case IProjectItemData_1.ProjectItemType.itemTextureJson: case IProjectItemData_1.ProjectItemType.terrainTextureCatalogResourceJson: case IProjectItemData_1.ProjectItemType.globalVariablesJson: case IProjectItemData_1.ProjectItemType.dataForm: case IProjectItemData_1.ProjectItemType.mcToolsProjectPreferences: case IProjectItemData_1.ProjectItemType.dimensionJson: case IProjectItemData_1.ProjectItemType.behaviorPackHistoryListJson: case IProjectItemData_1.ProjectItemType.resourcePackHistoryListJson: case IProjectItemData_1.ProjectItemType.educationJson: return ["application/json"]; case IProjectItemData_1.ProjectItemType.MCWorld: case IProjectItemData_1.ProjectItemType.MCTemplate: case IProjectItemData_1.ProjectItemType.MCProject: case IProjectItemData_1.ProjectItemType.MCAddon: case IProjectItemData_1.ProjectItemType.MCPack: case IProjectItemData_1.ProjectItemType.zip: return ["application/zip"]; case IProjectItemData_1.ProjectItemType.structure: return ["application/octet-stream"]; case IProjectItemData_1.ProjectItemType.MCFunction: case IProjectItemData_1.ProjectItemType.material: case IProjectItemData_1.ProjectItemType.materialGeometry: case IProjectItemData_1.ProjectItemType.materialFragment: case IProjectItemData_1.ProjectItemType.materialSetJson: case IProjectItemData_1.ProjectItemType.materialVertex: case IProjectItemData_1.ProjectItemType.env: case IProjectItemData_1.ProjectItemType.lang: return ["text/plain"]; case IProjectItemData_1.ProjectItemType.audio: return ["audio/wav", "audio/mp3", "audio/ogg"]; case IProjectItemData_1.ProjectItemType.image: case IProjectItemData_1.ProjectItemType.texture: case IProjectItemData_1.ProjectItemType.uiTexture: case IProjectItemData_1.ProjectItemType.iconImage: case IProjectItemData_1.ProjectItemType.marketingAssetImage: case IProjectItemData_1.ProjectItemType.storeAssetImage: return ["image/png", "image/tiff"]; default: return ["application/octet-stream"]; } } static getDescriptionForType(type) { switch (type) { case IProjectItemData_1.ProjectItemType.js: return "JavaScript"; case IProjectItemData_1.ProjectItemType.buildProcessedJs: return "Built JavaScript"; case IProjectItemData_1.ProjectItemType.ts: return "TypeScript"; case IProjectItemData_1.ProjectItemType.json: return "General json file"; case IProjectItemData_1.ProjectItemType.behaviorPackManifestJson: return "Behavior pack manifest"; case IProjectItemData_1.ProjectItemType.resourcePackManifestJson: return "Resource pack manifest"; case IProjectItemData_1.ProjectItemType.testJs: return "Test JavaScript file"; case IProjectItemData_1.ProjectItemType.entityTypeBaseJs: return "Entity type JavaScript"; case IProjectItemData_1.ProjectItemType.entityTypeBaseTs: return "Entity type TypeScript"; case IProjectItemData_1.ProjectItemType.entityTypeBehavior: return "Entity type"; case IProjectItemData_1.ProjectItemType.MCTemplate: return "Minecraft template"; case IProjectItemData_1.ProjectItemType.MCWorld: return "Minecraft world"; case IProjectItemData_1.ProjectItemType.MCProject: return "Minecraft project"; case IProjectItemData_1.ProjectItemType.MCAddon: return "Minecraft addon"; case IProjectItemData_1.ProjectItemType.MCPack: return "Minecraft pack"; case IProjectItemData_1.ProjectItemType.zip: return "Minecraft zip"; case IProjectItemData_1.ProjectItemType.worldFolder: return "Minecraft world"; case IProjectItemData_1.ProjectItemType.structure: return "Structure"; case IProjectItemData_1.ProjectItemType.MCFunction: return "Function"; case IProjectItemData_1.ProjectItemType.tickJson: return "Tick"; case IProjectItemData_1.ProjectItemType.material: return "Material"; case IProjectItemData_1.ProjectItemType.materialSetJson: return "Material Set"; case IProjectItemData_1.ProjectItemType.materialGeometry: return "Geometry"; case IProjectItemData_1.ProjectItemType.materialFragment: return "Fragment"; case IProjectItemData_1.ProjectItemType.materialVertex: return "Vertex"; case IProjectItemData_1.ProjectItemType.shadowsJson: return "Shadow"; case IProjectItemData_1.ProjectItemType.waterJson: return "Water"; case IProjectItemData_1.ProjectItemType.pbrJson: return "PBR"; case IProjectItemData_1.ProjectItemType.atmosphericsJson: return "Atmospherics"; case IProjectItemData_1.ProjectItemType.pointLightsJson: return "Point Light"; case IProjectItemData_1.ProjectItemType.colorGradingJson: return "Color Grading"; case IProjectItemData_1.ProjectItemType.cameraJson: return "Camera"; case IProjectItemData_1.ProjectItemType.aimAssistJson: return "Aim Assist"; case IProjectItemData_1.ProjectItemType.catalogIndexJs: return "Catalog index"; case IProjectItemData_1.ProjectItemType.behaviorPackFolder: return "Behavior pack"; case IProjectItemData_1.ProjectItemType.resourcePackFolder: return "Resource pack"; case IProjectItemData_1.ProjectItemType.skinPackFolder: return "Skin pack"; case IProjectItemData_1.ProjectItemType.actionSet: return "Action Set"; case IProjectItemData_1.ProjectItemType.worldTest: return "World test"; case IProjectItemData_1.ProjectItemType.behaviorPackListJson: return "World behavior pack list"; case IProjectItemData_1.ProjectItemType.resourcePackListJson: return "World resource pack list"; case IProjectItemData_1.ProjectItemType.animationBehaviorJson: return "Behavior pack animation"; case IProjectItemData_1.ProjectItemType.animationControllerBehaviorJson: return "Behavior pack animation controller"; case IProjectItemData_1.ProjectItemType.blockTypeBehavior: return "Block type"; case IProjectItemData_1.ProjectItemType.itemTypeBehavior: return "Item type"; case IProjectItemData_1.ProjectItemType.lootTableBehavior: return "Loot table"; case IProjectItemData_1.ProjectItemType.biomeResourceJson: return "Biome resources"; case IProjectItemData_1.ProjectItemType.fileListArrayJson: return "File list"; case IProjectItemData_1.ProjectItemType.craftingItemCatalog: return "Crafting Item catalog"; case IProjectItemData_1.ProjectItemType.blocksCatalogResourceJson: return "Block resource catalog"; case IProjectItemData_1.ProjectItemType.soundCatalog: return "Sound catalog"; case IProjectItemData_1.ProjectItemType.animationResourceJson: return "Animation"; case IProjectItemData_1.ProjectItemType.animationControllerResourceJson: return "Animation controller"; case IProjectItemData_1.ProjectItemType.entityTypeResource: return "Entity type visuals/audio"; case IProjectItemData_1.ProjectItemType.fogResourceJson: return "Fog"; case IProjectItemData_1.ProjectItemType.modelGeometryJson: return "Model"; case IProjectItemData_1.ProjectItemType.particleJson: return "Particle"; case IProjectItemData_1.ProjectItemType.renderControllerJson: return "Render controller"; case IProjectItemData_1.ProjectItemType.blockCulling: return "Block culling"; case IProjectItemData_1.ProjectItemType.uiJson: return "User interface"; case IProjectItemData_1.ProjectItemType.languagesCatalogResourceJson: return "Language catalog"; case IProjectItemData_1.ProjectItemType.biomeBehaviorJson: return "Biome"; case IProjectItemData_1.ProjectItemType.dialogueBehaviorJson: return "Entity dialogue"; case IProjectItemData_1.ProjectItemType.featureRuleBehaviorJson: return "World feature rule"; case IProjectItemData_1.ProjectItemType.featureBehavior: return "Feature"; case IProjectItemData_1.ProjectItemType.functionEventJson: return "Function event"; case IProjectItemData_1.ProjectItemType.recipeBehavior: return "Recipe"; case IProjectItemData_1.ProjectItemType.spawnRuleBehavior: return "Spawn rule"; case IProjectItemData_1.ProjectItemType.tradingBehaviorJson: return "Trading"; case IProjectItemData_1.ProjectItemType.volumeBehaviorJson: return "Volume"; case IProjectItemData_1.ProjectItemType.attachableResourceJson: return "Attachable"; case IProjectItemData_1.ProjectItemType.itemTypeResourceJson: return "Item type resources"; case IProjectItemData_1.ProjectItemType.materialsResourceJson: return "Materials"; case IProjectItemData_1.ProjectItemType.musicDefinitionJson: return "Music catalog"; case IProjectItemData_1.ProjectItemType.soundDefinitionCatalog: return "Sound catalog"; case IProjectItemData_1.ProjectItemType.audio: return "Audio"; case IProjectItemData_1.ProjectItemType.contentIndexJson: return "Content Description"; case IProjectItemData_1.ProjectItemType.contentReportJson: return "Content Report"; case IProjectItemData_1.ProjectItemType.tsconfigJson: return "TypeScript config"; case IProjectItemData_1.ProjectItemType.prettierRcJson: return "Prettier JavaScript/JSON style config"; case IProjectItemData_1.ProjectItemType.jsconfigJson: return "JavaScript config"; case IProjectItemData_1.ProjectItemType.docfxJson: return "DocFX definition"; case IProjectItemData_1.ProjectItemType.jsdocJson: return "JSDoc definition"; case IProjectItemData_1.ProjectItemType.packageJson: return "NPM package definition"; case IProjectItemData_1.ProjectItemType.packageLockJson: return "NPM package lock definition"; case IProjectItemData_1.ProjectItemType.env: return "Environment File"; case IProjectItemData_1.ProjectItemType.esLintConfigMjs: return "ESLint config"; case IProjectItemData_1.ProjectItemType.justConfigTs: return "Just config"; case IProjectItemData_1.ProjectItemType.docInfoJson: return "Doc info json"; case IProjectItemData_1.ProjectItemType.ninesliceJson: return "Nine-slice scaling config"; case IProjectItemData_1.ProjectItemType.scriptTypesJson: return "Script types definition"; case IProjectItemData_1.ProjectItemType.vanillaDataJson: return "Vanilla data definition"; case IProjectItemData_1.ProjectItemType.engineOrderingJson: return "Engine ordering definition"; case IProjectItemData_1.ProjectItemType.commandSetDefinitionJson: return "Command definition"; case IProjectItemData_1.ProjectItemType.skinPackManifestJson: return "Skin pack manifest"; case IProjectItemData_1.ProjectItemType.personaManifestJson: return "Persona manifest"; case IProjectItemData_1.ProjectItemType.blockTypeBaseJs: return "Block type base JavaScript"; case IProjectItemData_1.ProjectItemType.blockTypeBaseTs: return "Block type base TypeScript"; case IProjectItemData_1.ProjectItemType.image: return "Image"; case IProjectItemData_1.ProjectItemType.texture: return "Texture"; case IProjectItemData_1.ProjectItemType.uiTexture: return "UI texture"; case IProjectItemData_1.ProjectItemType.iconImage: return "Icon"; case IProjectItemData_1.ProjectItemType.marketingAssetImage: return "Marketing image"; case IProjectItemData_1.ProjectItemType.storeAssetImage: return "Store image"; case IProjectItemData_1.ProjectItemType.vsCodeLaunchJson: return "VS Code launch file"; case IProjectItemData_1.ProjectItemType.vsCodeTasksJson: return "VS Code tasks"; case IProjectItemData_1.ProjectItemType.vsCodeSettingsJson: return "VS Code settings"; case IProjectItemData_1.ProjectItemType.vsCodeExtensionsJson: return "VS Code extensions"; case IProjectItemData_1.ProjectItemType.lang: return "Language translations"; case IProjectItemData_1.ProjectItemType.worldTemplateManifestJson: return "World template manifest"; case IProjectItemData_1.ProjectItemType.textureSetJson: return "Texture set"; case IProjectItemData_1.ProjectItemType.textureListJson: return "Texture list"; case IProjectItemData_1.ProjectItemType.lightingJson: return "Lighting"; case IProjectItemData_1.ProjectItemType.flipbookTexturesJson: return "Flipbook texture set"; case IProjectItemData_1.ProjectItemType.itemTextureJson: return "Item texture"; case IProjectItemData_1.ProjectItemType.terrainTextureCatalogResourceJson: return "Terrain texture"; case IProjectItemData_1.ProjectItemType.globalVariablesJson: return "UI global variables"; case IProjectItemData_1.ProjectItemType.dataForm: return "Form"; case IProjectItemData_1.ProjectItemType.dimensionJson: return "Dimension"; case IProjectItemData_1.ProjectItemType.mcToolsProjectPreferences: return "MCTools preferences"; case IProjectItemData_1.ProjectItemType.behaviorPackHistoryListJson: return "Behavior pack history"; case IProjectItemData_1.ProjectItemType.resourcePackHistoryListJson: return "Resource pack history"; case IProjectItemData_1.ProjectItemType.educationJson: return "Education manifest"; default: return "Unknown"; } } static wouldBeCircular(candidate, considering, paths, dontGoUpward, dontGoDownward) { if (!paths) { paths = []; } if (!candidate.projectPath) { return false; } if (paths.includes(candidate.projectPath)) { return true; } if (!considering) { considering = candidate; } else if (considering.projectPath) { paths.push(considering.projectPath); } if (considering.parentItems && !dontGoUpward) { for (const parentItem of considering.parentItems) { if (parentItem.parentItem) { if (this.wouldBeCircular(candidate, parentItem.parentItem, paths, false, true)) { return true; } } } } if (considering.childItems && !dontGoDownward) { for (const childItem of considering.childItems) { if (childItem.childItem) { if (this.wouldBeCircular(candidate, childItem.childItem, paths, true, false)) { return true; } } } } return false; } static isBlock(type) { return (type === IProjectItemData_1.ProjectItemType.blockCulling || type === IProjectItemData_1.ProjectItemType.terrainTextureCatalogResourceJson || type === IProjectItemData_1.ProjectItemType.blockTypeBehavior || type === IProjectItemData_1.ProjectItemType.blocksCatalogResourceJson || type === IProjectItemData_1.ProjectItemType.blockMaterialsBehaviorJson); } static isBlockRelated(projectItem, dontGoUpward, dontGoDownward) { if (projectItem.parentItems && !dontGoUpward) { for (const parentItem of projectItem.parentItems) { if (parentItem.parentItem) { if (this.isBlock(parentItem.parentItem.itemType)) { return true; } if (this.isBlockRelated(parentItem.parentItem, false, true)) { return true; } } } } if (projectItem.childItems && !dontGoDownward) { for (const parentItem of projectItem.childItems) { if (parentItem.childItem) { if (this.isBlock(parentItem.childItem.itemType)) { return true; } if (this.isBlockRelated(parentItem.parentItem, true, false)) { return true; } } } } return false; } static isUI(type) { return type === IProjectItemData_1.ProjectItemType.uiJson || type === IProjectItemData_1.ProjectItemType.uiTexture; } static isUIRelated(projectItem, dontGoUpward, dontGoDownward) { if (projectItem.parentItems && !dontGoUpward) { for (const parentItem of projectItem.parentItems) { if (parentItem.parentItem) { if (this.isUI(parentItem.parentItem.itemType)) { return true; } if (this.isUIRelated(parentItem.parentItem, false, true)) { return true; } } } } if (projectItem.childItems && !dontGoDownward) { for (const parentItem of projectItem.childItems) { if (parentItem.childItem) { if (this.isUI(parentItem.childItem.itemType)) { return true; } if (this.isUIRelated(parentItem.parentItem, true, false)) { return true; } } } } return false; } static isItem(type) { return (type === IProjectItemData_1.ProjectItemType.itemTextureJson || type === IProjectItemData_1.ProjectItemType.itemTypeBehavior || type === IProjectItemData_1.ProjectItemType.attachableResourceJson || type === IProjectItemData_1.ProjectItemType.itemTypeResourceJson); } static isItemRelated(projectItem, dontGoUpward, dontGoDownward) { if (projectItem.parentItems && !dontGoUpward) { for (const parentItem of projectItem.parentItems) { if (parentItem.parentItem) { if (this.isItem(parentItem.parentItem.itemType)) { return true; } if (this.isItemRelated(parentItem.parentItem, false, true)) { return true; } } } } if (projectItem.childItems && !dontGoDownward) { for (const parentItem of projectItem.childItems) { if (parentItem.childItem) { if (this.isItem(parentItem.childItem.itemType)) { return true; } if (this.isItemRelated(parentItem.parentItem, true, false)) { return true; } } } } return false; } static isEntity(type) { return (type === IProjectItemData_1.ProjectItemType.entityTypeBehavior || type === IProjectItemData_1.ProjectItemType.entityTypeResource || type === IProjectItemData_1.ProjectItemType.renderControllerJson); } static isEntityRelated(projectItem, dontGoUpward, dontGoDownward) { if (projectItem.parentItems && !dontGoUpward) { for (const parentItem of projectItem.parentItems) { if (parentItem.parentItem) { if (this.isEntity(parentItem.parentItem.itemType)) { return true; } if (this.isEntityRelated(parentItem.parentItem, false, true)) { return true; } } } } if (projectItem.childItems && !dontGoDownward) { for (const parentItem of projectItem.childItems) { if (parentItem.childItem) { if (this.isEntity(parentItem.childItem.itemType)) { return true; } if (this.isEntityRelated(parentItem.parentItem, true, false)) { return true; } } } } return false; } static isParticle(type) { return type === IProjectItemData_1.ProjectItemType.particleJson; } static isParticleRelated(projectItem, dontGoUpward, dontGoDownward) { if (projectItem.parentItems && !dontGoUpward) { for (const parentItem of projectItem.parentItems) { if (parentItem.parentItem) { if (this.isParticle(parentItem.parentItem.itemType)) { return true; } if (this.isParticleRelated(parentItem.parentItem, false, true)) { return true; } } } } if (projectItem.childItems && !dontGoDownward) { for (const parentItem of projectItem.childItems) { if (parentItem.childItem) { if (this.isParticle(parentItem.childItem.itemType)) { return true; } if (this.isParticleRelated(parentItem.parentItem, true, false)) { return true; } } } } return false; } static getNewItemName(type) { return ProjectItemUtilities.getDescriptionForType(type).toLowerCase(); } static getColorForType(type) { const cat = ProjectItemUtilities.getCategory(type); switch (cat) { case IProjectItemData_1.ProjectItemCategory.logic: return { red: (type % 4) * 24 + 160, green: (Math.floor(type / 4) % 4) * 12 + 104, blue: (Math.floor(type / 16) % 4) * 12 + 104, }; case IProjectItemData_1.ProjectItemCategory.assets: return { red: (Math.floor(type / 4) % 4) * 12 + 104, green: (type % 4) * 24 + 160, blue: (Math.floor(type / 16) % 4) * 12 + 104, }; case IProjectItemData_1.ProjectItemCategory.types: return { red: (Math.floor(type / 16) % 4) * 12 + 104, green: (Math.floor(type / 4) % 4) * 12 + 104, blue: (type % 4) * 24 + 160, }; default: return { red: (Math.floor(type / 4) % 4) * 24 + 128, green: (Math.floor(type / 4) % 4) * 24 + 128, blue: (Math.floor(type / 4) % 4) * 24 + 128, }; } } static getPluralDescriptionForType(type) { // override non-"plus s" plural-ifications here switch (type) { case IProjectItemData_1.ProjectItemType.audio: return "Audio"; case IProjectItemData_1.ProjectItemType.ts: return "TypeScript files"; case IProjectItemData_1.ProjectItemType.js: return "JavaScript files"; case IProjectItemData_1.ProjectItemType.itemTypeResourceJson: return "Item type visuals and audio"; case IProjectItemData_1.ProjectItemType.entityTypeResource: return "Entity type visuals/audio"; case IProjectItemData_1.ProjectItemType.catalogIndexJs: return "Catalog indexes"; case IProjectItemData_1.ProjectItemType.behaviorPackHistoryListJson: return "Behavior pack histories"; case IProjectItemData_1.ProjectItemType.resourcePackHistoryListJson: return "Resource pack histories"; case IProjectItemData_1.ProjectItemType.globalVariablesJson: case IProjectItemData_1.ProjectIte