UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

868 lines (867 loc) 105 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.findEnsuredFilesOfType = exports.getEnsuredFileOfType = exports.FormMappings = exports.ProjectItemSortOrder = void 0; exports.getEnsuredFile = getEnsuredFile; exports.findEnsuredFiles = findEnsuredFiles; exports.getNeighborFiles = getNeighborFiles; exports.getWorldTemplates = getWorldTemplates; exports.getMarketContent = getMarketContent; exports.tryEnsureFiles = tryEnsureFiles; const Utilities_1 = __importDefault(require("../core/Utilities")); const Pack_1 = require("../minecraft/Pack"); const TextureDefinition_1 = require("../minecraft/TextureDefinition"); const StorageUtilities_1 = __importDefault(require("../storage/StorageUtilities")); const IProjectItemData_1 = require("./IProjectItemData"); const ProjectUtilities_1 = __importDefault(require("./ProjectUtilities")); const ProjectItemTypeInfo_1 = require("./ProjectItemTypeInfo"); const ProjectItemValues_1 = require("./project/projectItems/ProjectItemValues"); // an attempt to group related things together via sort order. Used in the UI item list. // Order: Design → Scripts/Logic → Entity Types → Item Types → Block Types → World/Worldgen → // Models/Animations → Textures/Audio → Vibrant Visuals → UI/UX → Skins → Config/Dev → Packaging → Meta // This order keeps logical groupings together to make projects easier to navigate. exports.ProjectItemSortOrder = [ // ═══════════════════════════════════════════════════════════════════════════ // DESIGN - Design pack content for planning/iteration // ═══════════════════════════════════════════════════════════════════════════ IProjectItemData_1.ProjectItemType.designTexture, IProjectItemData_1.ProjectItemType.designPackManifestJson, IProjectItemData_1.ProjectItemType.designPackFolder, IProjectItemData_1.ProjectItemType.actionSet, // ═══════════════════════════════════════════════════════════════════════════ // SCRIPTS & LOGIC - Code and command logic (Emerald Green) // ═══════════════════════════════════════════════════════════════════════════ IProjectItemData_1.ProjectItemType.ts, IProjectItemData_1.ProjectItemType.js, IProjectItemData_1.ProjectItemType.MCFunction, IProjectItemData_1.ProjectItemType.tickJson, IProjectItemData_1.ProjectItemType.functionEventJson, IProjectItemData_1.ProjectItemType.testJs, IProjectItemData_1.ProjectItemType.entityTypeBaseJs, IProjectItemData_1.ProjectItemType.entityTypeBaseTs, IProjectItemData_1.ProjectItemType.blockTypeBaseJs, IProjectItemData_1.ProjectItemType.blockTypeBaseTs, IProjectItemData_1.ProjectItemType.catalogIndexJs, IProjectItemData_1.ProjectItemType.buildProcessedJs, IProjectItemData_1.ProjectItemType.animationBehaviorJson, // Behavior-side animations are logic IProjectItemData_1.ProjectItemType.animationControllerBehaviorJson, // ═══════════════════════════════════════════════════════════════════════════ // ENTITY TYPES - Mobs, creatures, NPCs (Enderman Purple) // ═══════════════════════════════════════════════════════════════════════════ IProjectItemData_1.ProjectItemType.entityTypeBehavior, IProjectItemData_1.ProjectItemType.entityTypeResource, IProjectItemData_1.ProjectItemType.spawnRuleBehavior, IProjectItemData_1.ProjectItemType.spawnGroupJson, IProjectItemData_1.ProjectItemType.dialogueBehaviorJson, IProjectItemData_1.ProjectItemType.behaviorTreeJson, // ═══════════════════════════════════════════════════════════════════════════ // ITEM TYPES - Items, loot, recipes, trading (Gold/Amber) // ═══════════════════════════════════════════════════════════════════════════ IProjectItemData_1.ProjectItemType.itemTypeBehavior, IProjectItemData_1.ProjectItemType.itemTypeLegacyResource, IProjectItemData_1.ProjectItemType.attachableResourceJson, IProjectItemData_1.ProjectItemType.itemTextureJson, IProjectItemData_1.ProjectItemType.lootTableBehavior, IProjectItemData_1.ProjectItemType.recipeBehavior, IProjectItemData_1.ProjectItemType.tradingBehaviorJson, IProjectItemData_1.ProjectItemType.craftingItemCatalog, // ═══════════════════════════════════════════════════════════════════════════ // BLOCK TYPES - Blocks and terrain (Stone Gray) // ═══════════════════════════════════════════════════════════════════════════ IProjectItemData_1.ProjectItemType.blockTypeBehavior, IProjectItemData_1.ProjectItemType.blocksCatalogResourceJson, IProjectItemData_1.ProjectItemType.blockTypeResourceJsonDoNotUse, IProjectItemData_1.ProjectItemType.blockCulling, IProjectItemData_1.ProjectItemType.blockMaterialsBehaviorJson, IProjectItemData_1.ProjectItemType.terrainTextureCatalogResourceJson, IProjectItemData_1.ProjectItemType.voxelShapeBehavior, // ═══════════════════════════════════════════════════════════════════════════ // WORLD & WORLDGEN - Worlds, biomes, features, dimensions (Grass Lime) // ═══════════════════════════════════════════════════════════════════════════ IProjectItemData_1.ProjectItemType.worldFolder, IProjectItemData_1.ProjectItemType.worldTemplateManifestJson, IProjectItemData_1.ProjectItemType.MCWorld, IProjectItemData_1.ProjectItemType.MCProject, IProjectItemData_1.ProjectItemType.MCTemplate, IProjectItemData_1.ProjectItemType.worldTest, IProjectItemData_1.ProjectItemType.levelDat, IProjectItemData_1.ProjectItemType.levelDatOld, IProjectItemData_1.ProjectItemType.behaviorPackListJson, IProjectItemData_1.ProjectItemType.resourcePackListJson, IProjectItemData_1.ProjectItemType.behaviorPackHistoryListJson, IProjectItemData_1.ProjectItemType.resourcePackHistoryListJson, IProjectItemData_1.ProjectItemType.levelDbLdb, IProjectItemData_1.ProjectItemType.levelDbLog, IProjectItemData_1.ProjectItemType.levelDbCurrent, IProjectItemData_1.ProjectItemType.levelDbManifest, IProjectItemData_1.ProjectItemType.structure, IProjectItemData_1.ProjectItemType.volumeBehaviorJson, // Biomes IProjectItemData_1.ProjectItemType.biomeBehavior, IProjectItemData_1.ProjectItemType.biomeResource, IProjectItemData_1.ProjectItemType.biomesClientCatalogResource, // Features and jigsaw structures IProjectItemData_1.ProjectItemType.featureRuleBehavior, IProjectItemData_1.ProjectItemType.featureBehavior, IProjectItemData_1.ProjectItemType.jigsawStructureSet, IProjectItemData_1.ProjectItemType.jigsawStructure, IProjectItemData_1.ProjectItemType.jigsawTemplatePool, IProjectItemData_1.ProjectItemType.jigsawProcessorList, IProjectItemData_1.ProjectItemType.dimensionJson, // ═══════════════════════════════════════════════════════════════════════════ // MODELS & ANIMATIONS - Geometry, animations, render controllers (Diamond Cyan) // ═══════════════════════════════════════════════════════════════════════════ IProjectItemData_1.ProjectItemType.modelGeometryJson, IProjectItemData_1.ProjectItemType.animationResourceJson, IProjectItemData_1.ProjectItemType.animationControllerResourceJson, IProjectItemData_1.ProjectItemType.renderControllerJson, IProjectItemData_1.ProjectItemType.particleJson, // ═══════════════════════════════════════════════════════════════════════════ // TEXTURES & AUDIO - Visual and audio assets (Pink Dye) // ═══════════════════════════════════════════════════════════════════════════ IProjectItemData_1.ProjectItemType.texture, IProjectItemData_1.ProjectItemType.image, IProjectItemData_1.ProjectItemType.packIconImage, IProjectItemData_1.ProjectItemType.marketingAssetImage, IProjectItemData_1.ProjectItemType.storeAssetImage, IProjectItemData_1.ProjectItemType.textureListJson, IProjectItemData_1.ProjectItemType.flipbookTexturesJson, IProjectItemData_1.ProjectItemType.fogResourceJson, // Audio IProjectItemData_1.ProjectItemType.soundCatalog, IProjectItemData_1.ProjectItemType.soundDefinitionCatalog, IProjectItemData_1.ProjectItemType.musicDefinitionJson, IProjectItemData_1.ProjectItemType.audio, // ═══════════════════════════════════════════════════════════════════════════ // VIBRANT VISUALS - Deferred rendering, PBR, lighting (Amethyst) // ═══════════════════════════════════════════════════════════════════════════ IProjectItemData_1.ProjectItemType.lightingJson, IProjectItemData_1.ProjectItemType.colorGradingJson, IProjectItemData_1.ProjectItemType.atmosphericsJson, IProjectItemData_1.ProjectItemType.pbrJson, IProjectItemData_1.ProjectItemType.pointLightsJson, IProjectItemData_1.ProjectItemType.waterJson, IProjectItemData_1.ProjectItemType.shadowsJson, IProjectItemData_1.ProjectItemType.textureSetJson, // ═══════════════════════════════════════════════════════════════════════════ // UI & LOCALIZATION - JSON UI, languages, dialogs (Pumpkin Orange) // ═══════════════════════════════════════════════════════════════════════════ IProjectItemData_1.ProjectItemType.uiJson, IProjectItemData_1.ProjectItemType.uiTexture, IProjectItemData_1.ProjectItemType.ninesliceJson, IProjectItemData_1.ProjectItemType.globalVariablesJson, IProjectItemData_1.ProjectItemType.languagesCatalogJson, IProjectItemData_1.ProjectItemType.lang, IProjectItemData_1.ProjectItemType.loadingMessagesJson, IProjectItemData_1.ProjectItemType.splashesJson, IProjectItemData_1.ProjectItemType.emoticonsJson, IProjectItemData_1.ProjectItemType.fontMetadataJson, // ═══════════════════════════════════════════════════════════════════════════ // SKINS & PERSONAS - Player customization (Leather Brown) // ═══════════════════════════════════════════════════════════════════════════ IProjectItemData_1.ProjectItemType.skinCatalogJson, IProjectItemData_1.ProjectItemType.skinPackGeometryJson, IProjectItemData_1.ProjectItemType.skinPackTextureBackCompatJson, IProjectItemData_1.ProjectItemType.skinPackManifestJson, IProjectItemData_1.ProjectItemType.skinPackFolder, IProjectItemData_1.ProjectItemType.personaJson, IProjectItemData_1.ProjectItemType.personaManifestJson, IProjectItemData_1.ProjectItemType.personaPackFolder, // ═══════════════════════════════════════════════════════════════════════════ // CONFIG & DEV - Build tools, manifests, VS Code (Iron Slate) // ═══════════════════════════════════════════════════════════════════════════ IProjectItemData_1.ProjectItemType.behaviorPackManifestJson, IProjectItemData_1.ProjectItemType.resourcePackManifestJson, IProjectItemData_1.ProjectItemType.behaviorPackFolder, IProjectItemData_1.ProjectItemType.resourcePackFolder, IProjectItemData_1.ProjectItemType.tsconfigJson, IProjectItemData_1.ProjectItemType.packageJson, IProjectItemData_1.ProjectItemType.packageLockJson, IProjectItemData_1.ProjectItemType.vsCodeLaunchJson, IProjectItemData_1.ProjectItemType.vsCodeTasksJson, IProjectItemData_1.ProjectItemType.vsCodeSettingsJson, IProjectItemData_1.ProjectItemType.vsCodeExtensionsJson, IProjectItemData_1.ProjectItemType.justConfigTs, IProjectItemData_1.ProjectItemType.jsMap, IProjectItemData_1.ProjectItemType.esLintConfigMjs, IProjectItemData_1.ProjectItemType.env, IProjectItemData_1.ProjectItemType.prettierRcJson, IProjectItemData_1.ProjectItemType.jsconfigJson, IProjectItemData_1.ProjectItemType.cameraBehaviorJson, IProjectItemData_1.ProjectItemType.cameraResourceJson, IProjectItemData_1.ProjectItemType.aimAssistPresetJson, IProjectItemData_1.ProjectItemType.aimAssistCategoryJson, IProjectItemData_1.ProjectItemType.sdlLayout, IProjectItemData_1.ProjectItemType.lodJson, IProjectItemData_1.ProjectItemType.rendererJson, IProjectItemData_1.ProjectItemType.uniformsJson, IProjectItemData_1.ProjectItemType.materialsResourceJson, IProjectItemData_1.ProjectItemType.material, IProjectItemData_1.ProjectItemType.materialSetJson, IProjectItemData_1.ProjectItemType.materialVertex, IProjectItemData_1.ProjectItemType.materialFragment, IProjectItemData_1.ProjectItemType.materialGeometry, IProjectItemData_1.ProjectItemType.fileListArrayJson, IProjectItemData_1.ProjectItemType.educationJson, // ═══════════════════════════════════════════════════════════════════════════ // PACKAGING - Archives and packages (Redstone Red) // ═══════════════════════════════════════════════════════════════════════════ IProjectItemData_1.ProjectItemType.MCAddon, IProjectItemData_1.ProjectItemType.MCPack, IProjectItemData_1.ProjectItemType.zip, IProjectItemData_1.ProjectItemType.contentsJson, // ═══════════════════════════════════════════════════════════════════════════ // META & DOCUMENTATION - Docs, forms, metadata (Book Brown) // ═══════════════════════════════════════════════════════════════════════════ IProjectItemData_1.ProjectItemType.dataForm, IProjectItemData_1.ProjectItemType.docInfoJson, IProjectItemData_1.ProjectItemType.scriptTypesJson, IProjectItemData_1.ProjectItemType.commandSetDefinitionJson, IProjectItemData_1.ProjectItemType.docfxJson, IProjectItemData_1.ProjectItemType.jsdocJson, IProjectItemData_1.ProjectItemType.markdownDocumentation, IProjectItemData_1.ProjectItemType.documentedTypeFolder, IProjectItemData_1.ProjectItemType.documentedCommandFolder, IProjectItemData_1.ProjectItemType.contentIndexJson, IProjectItemData_1.ProjectItemType.contentReportJson, IProjectItemData_1.ProjectItemType.mcToolsProjectPreferences, IProjectItemData_1.ProjectItemType.projectSummaryMetadata, IProjectItemData_1.ProjectItemType.engineOrderingJson, IProjectItemData_1.ProjectItemType.vanillaDataJson, IProjectItemData_1.ProjectItemType.tagsMetadata, // ═══════════════════════════════════════════════════════════════════════════ // UNKNOWN - Fallback for unrecognized types // ═══════════════════════════════════════════════════════════════════════════ IProjectItemData_1.ProjectItemType.unknownJson, IProjectItemData_1.ProjectItemType.unknown, ]; 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 getFormPathForType(itemType) { switch (itemType) { case IProjectItemData_1.ProjectItemType.entityTypeBehavior: return "entity/entity_behavior_document"; case IProjectItemData_1.ProjectItemType.biomeBehavior: return "biome/biome_json_file"; case IProjectItemData_1.ProjectItemType.blockCulling: return "block_culling/blockculling"; case IProjectItemData_1.ProjectItemType.biomesClientCatalogResource: // Note: This is the legacy biomes_client.json format, NOT the newer client_biome format // which has format_version and minecraft:client_biome structure return "biomes_client/biomes_client"; case IProjectItemData_1.ProjectItemType.atmosphericsJson: return "client_deferred_rendering/atmosphericscattering_atmosphericscatteringconfigsettings"; case IProjectItemData_1.ProjectItemType.colorGradingJson: return "client_deferred_rendering/colorgraderconfig_colorgradingparameterssrc"; case IProjectItemData_1.ProjectItemType.lightingJson: return "client_deferred_rendering/lightinggroup_lightingimpl_1_21_70"; case IProjectItemData_1.ProjectItemType.pbrJson: return "client_deferred_rendering/pbrfallbackconfig_pbrfallbackconfigsettings"; case IProjectItemData_1.ProjectItemType.pointLightsJson: return "client_deferred_rendering/pointlightconfig_pointlightconfigsettings"; case IProjectItemData_1.ProjectItemType.shadowsJson: return "client_deferred_rendering/shadowstylizationconfig_shadowstylizationconfigsettings"; case IProjectItemData_1.ProjectItemType.waterJson: return "client_deferred_rendering/waterconfig_waterconfigsettingsv1"; case IProjectItemData_1.ProjectItemType.itemTypeLegacyResource: return "client_item/resource"; case IProjectItemData_1.ProjectItemType.featureRuleBehavior: return "feature/feature_rule_definition"; case IProjectItemData_1.ProjectItemType.featureBehavior: return "features/features"; case IProjectItemData_1.ProjectItemType.fogResourceJson: return "fogs/fogs"; case IProjectItemData_1.ProjectItemType.jigsawStructure: return "jigsaw/minecraft_jigsaw_structure_metadata"; case IProjectItemData_1.ProjectItemType.spawnRuleBehavior: return "spawn/spawn_rules_document"; case IProjectItemData_1.ProjectItemType.modelGeometryJson: return "visual/geometry.v1.21.0"; case IProjectItemData_1.ProjectItemType.textureSetJson: return "visual/texture_set.v1.21.30"; case IProjectItemData_1.ProjectItemType.voxelShapeBehavior: return "voxel_shapes/voxel_shape_document"; default: return undefined; } } /** * Returns the path to a community/Blockception JSON schema for the given item type. * These schemas are located in public/res/latest/schemas/ and are loaded via Database.getCommunitySchema(). */ static getCommunitySchemaPathForType(itemType) { switch (itemType) { case IProjectItemData_1.ProjectItemType.behaviorPackManifestJson: return "general/manifest.json"; case IProjectItemData_1.ProjectItemType.behaviorPackListJson: return "general/world_x_packs.json"; case IProjectItemData_1.ProjectItemType.resourcePackListJson: return "general/world_x_packs.json"; case IProjectItemData_1.ProjectItemType.animationControllerBehaviorJson: return "behavior/animation_controllers/animation_controller.json"; case IProjectItemData_1.ProjectItemType.animationBehaviorJson: return "behavior/animations/animations.json"; case IProjectItemData_1.ProjectItemType.blockTypeBehavior: return "behavior/blocks/blocks.json"; case IProjectItemData_1.ProjectItemType.itemTypeBehavior: return "behavior/items/items.json"; case IProjectItemData_1.ProjectItemType.lootTableBehavior: return "behavior/loot_tables/loot_tables.json"; case IProjectItemData_1.ProjectItemType.dialogueBehaviorJson: return "behavior/dialogue/dialogue.json"; case IProjectItemData_1.ProjectItemType.entityTypeBehavior: return "behavior/entities/entities.json"; case IProjectItemData_1.ProjectItemType.atmosphericsJson: return "resource/atmospherics/atmospherics.json"; case IProjectItemData_1.ProjectItemType.blocksCatalogResourceJson: return "resource/blocks.json"; case IProjectItemData_1.ProjectItemType.soundCatalog: return "resource/sounds.json"; case IProjectItemData_1.ProjectItemType.animationResourceJson: return "resource/animations/actor_animation.json"; case IProjectItemData_1.ProjectItemType.animationControllerResourceJson: return "resource/animation_controllers/animation_controller.json"; case IProjectItemData_1.ProjectItemType.entityTypeResource: return "resource/entity/entity.json"; case IProjectItemData_1.ProjectItemType.fogResourceJson: return "resource/fog/fog.json"; case IProjectItemData_1.ProjectItemType.modelGeometryJson: return "resource/models/entity/model_entity.json"; case IProjectItemData_1.ProjectItemType.biomesClientCatalogResource: return "resource/biomes_client.json"; case IProjectItemData_1.ProjectItemType.particleJson: return "resource/particles/particles.json"; case IProjectItemData_1.ProjectItemType.renderControllerJson: return "resource/render_controllers/render_controllers.json"; case IProjectItemData_1.ProjectItemType.blockCulling: return "resource/block_culling/block_culling.json"; case IProjectItemData_1.ProjectItemType.craftingItemCatalog: return "behavior/item_catalog/crafting_item_catalog.json"; // case ProjectItemType.uiTextureJson: // return "resource/textures/ui_texture_definition.json"; case IProjectItemData_1.ProjectItemType.languagesCatalogJson: return "language/languages.json"; case IProjectItemData_1.ProjectItemType.featureBehavior: return "behavior/features/features.json"; case IProjectItemData_1.ProjectItemType.featureRuleBehavior: return "behavior/feature_rules/feature_rules.json"; case IProjectItemData_1.ProjectItemType.functionEventJson: return "behavior/functions/tick.json"; case IProjectItemData_1.ProjectItemType.recipeBehavior: return "behavior/recipes/recipes.json"; case IProjectItemData_1.ProjectItemType.spawnRuleBehavior: return "behavior/spawn_rules/spawn_rules.json"; case IProjectItemData_1.ProjectItemType.tradingBehaviorJson: return "behavior/trading/trading.json"; case IProjectItemData_1.ProjectItemType.attachableResourceJson: return "resource/attachables/attachables.json"; case IProjectItemData_1.ProjectItemType.itemTypeLegacyResource: return "resource/items/items.json"; case IProjectItemData_1.ProjectItemType.materialsResourceJson: return "resource/materials/materials.json"; case IProjectItemData_1.ProjectItemType.musicDefinitionJson: return "resource/sounds/music_definitions.json"; case IProjectItemData_1.ProjectItemType.soundDefinitionCatalog: return "resource/sounds/sound_definitions.json"; case IProjectItemData_1.ProjectItemType.blockTypeResourceJsonDoNotUse: return "resource/blocks.json"; case IProjectItemData_1.ProjectItemType.uiJson: return "resource/ui/ui.json"; case IProjectItemData_1.ProjectItemType.tickJson: return "behavior/functions/tick.json"; case IProjectItemData_1.ProjectItemType.flipbookTexturesJson: return "resource/textures/flipbook_textures.json"; case IProjectItemData_1.ProjectItemType.itemTextureJson: return "resource/textures/item_texture.json"; case IProjectItemData_1.ProjectItemType.terrainTextureCatalogResourceJson: return "resource/textures/terrain_texture.json"; case IProjectItemData_1.ProjectItemType.globalVariablesJson: return "resource/ui/_global_variables.json"; default: return undefined; } } /** * Returns the path to an official JSON schema for the given item type. * These schemas are located in public/schemas/ and are loaded via Database.getOfficialSchema(). * The official schemas have different naming conventions than community schemas. */ static getOfficialSchemaPathForType(itemType) { switch (itemType) { // Behavior pack types case IProjectItemData_1.ProjectItemType.entityTypeBehavior: return "bp/entities/index.schema.json"; case IProjectItemData_1.ProjectItemType.blockTypeBehavior: return "bp/blocks/index.schema.json"; case IProjectItemData_1.ProjectItemType.itemTypeBehavior: return "bp/items/index.schema.json"; case IProjectItemData_1.ProjectItemType.recipeBehavior: return "bp/recipes/index.schema.json"; case IProjectItemData_1.ProjectItemType.lootTableBehavior: return "bp/loot_tables/index.schema.json"; case IProjectItemData_1.ProjectItemType.spawnRuleBehavior: return "bp/spawn_rules/index.schema.json"; case IProjectItemData_1.ProjectItemType.dialogueBehaviorJson: return "bp/dialogue/index.schema.json"; case IProjectItemData_1.ProjectItemType.featureBehavior: return "bp/features/index.schema.json"; case IProjectItemData_1.ProjectItemType.featureRuleBehavior: return "bp/feature_rules/index.schema.json"; case IProjectItemData_1.ProjectItemType.tradingBehaviorJson: return "bp/trading/index.schema.json"; case IProjectItemData_1.ProjectItemType.biomeBehavior: return "bp/biomes/index.schema.json"; // Animation types case IProjectItemData_1.ProjectItemType.animationBehaviorJson: return "bp/animations/index.schema.json"; case IProjectItemData_1.ProjectItemType.animationControllerBehaviorJson: return "bp/animation_controllers/index.schema.json"; case IProjectItemData_1.ProjectItemType.animationResourceJson: return "bp/animations/index.schema.json"; case IProjectItemData_1.ProjectItemType.animationControllerResourceJson: return "bp/animation_controllers/index.schema.json"; // Resource pack types case IProjectItemData_1.ProjectItemType.attachableResourceJson: return "rp/attachables/index.schema.json"; case IProjectItemData_1.ProjectItemType.fogResourceJson: return "rp/fogs/index.schema.json"; case IProjectItemData_1.ProjectItemType.particleJson: return "rp/particles/index.schema.json"; case IProjectItemData_1.ProjectItemType.renderControllerJson: return "rp/render_controllers/index.schema.json"; case IProjectItemData_1.ProjectItemType.blocksCatalogResourceJson: return "rp/textures/blocks_resource.schema.json"; case IProjectItemData_1.ProjectItemType.soundDefinitionCatalog: return "rp/sounds/index.schema.json"; case IProjectItemData_1.ProjectItemType.terrainTextureCatalogResourceJson: return "rp/textures/terrain_texture.schema.json"; case IProjectItemData_1.ProjectItemType.itemTextureJson: return "rp/textures/item_texture.schema.json"; case IProjectItemData_1.ProjectItemType.flipbookTexturesJson: return "rp/textures/flipbook_textures.schema.json"; case IProjectItemData_1.ProjectItemType.biomesClientCatalogResource: return "rp/biomes_client/index.schema.json"; case IProjectItemData_1.ProjectItemType.entityTypeResource: return "rp/entity/index.schema.json"; case IProjectItemData_1.ProjectItemType.modelGeometryJson: return "rp/models/index.schema.json"; case IProjectItemData_1.ProjectItemType.textureSetJson: return "rp/textures/texture_set.schema.json"; // UI types case IProjectItemData_1.ProjectItemType.uiJson: return "rp/ui/index.schema.json"; case IProjectItemData_1.ProjectItemType.globalVariablesJson: return "rp/ui/global_variables.schema.json"; // Manifest types case IProjectItemData_1.ProjectItemType.behaviorPackManifestJson: return "bp/manifest/index.schema.json"; case IProjectItemData_1.ProjectItemType.resourcePackManifestJson: return "rp/manifest/index.schema.json"; // Block culling case IProjectItemData_1.ProjectItemType.blockCulling: return "rp/block_culling/index.schema.json"; // Resource pack catalog types case IProjectItemData_1.ProjectItemType.languagesCatalogJson: return "rp/texts/languages.schema.json"; case IProjectItemData_1.ProjectItemType.musicDefinitionJson: return "rp/sounds/music_definitions.schema.json"; // Behavior pack types case IProjectItemData_1.ProjectItemType.tickJson: return "bp/functions/tick.schema.json"; // Voxel shapes case IProjectItemData_1.ProjectItemType.voxelShapeBehavior: return "bp/voxel_shapes/index.schema.json"; // World types case IProjectItemData_1.ProjectItemType.behaviorPackListJson: case IProjectItemData_1.ProjectItemType.resourcePackListJson: return "world/world_packs.schema.json"; default: return undefined; } } 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 isDescendentOfPath(projectItem, projectPath) { if (projectItem.projectPath === projectPath) { return true; } if (!projectItem.parentItems) { return false; } for (const relationship of projectItem.parentItems) { if (this.isDescendentOfPath(relationship.parentItem, projectPath)) { return true; } } return false; } static getSortOrder(itemType) { for (let i = 0; i < exports.ProjectItemSortOrder.length; i++) { if (exports.ProjectItemSortOrder[i] === itemType) { return i; } } return exports.ProjectItemSortOrder.length + itemType; } static getItemByTypeAndName(project, name, projectItemType) { const itemsCopy = project.getItemsByType(projectItemType); for (const item of itemsCopy) { if (item.itemType === projectItemType && (item.name === name || item.name.startsWith(name.toLowerCase() + "."))) { return item; } } return undefined; } static getAccessoryFolderPathFromFilePath(projectItem) { let relativePath = projectItem.projectPath; if (!relativePath) { return projectItem.name + " " + ProjectItemUtilities.getDescriptionForType(projectItem.itemType); } relativePath = relativePath.replace(/\./gi, "_"); return relativePath; } 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.designTexture: case IProjectItemData_1.ProjectItemType.uiTexture: case IProjectItemData_1.ProjectItemType.packIconImage: 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.languagesCatalogJson: case IProjectItemData_1.ProjectItemType.ninesliceJson: case IProjectItemData_1.ProjectItemType.attachableResourceJson: case IProjectItemData_1.ProjectItemType.audio: case IProjectItemData_1.ProjectItemType.designPackManifestJson: case IProjectItemData_1.ProjectItemType.designPackFolder: 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.biomeBehavior: case IProjectItemData_1.ProjectItemType.biomeResource: case IProjectItemData_1.ProjectItemType.biomesClientCatalogResource: 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.itemTypeLegacyResource: case IProjectItemData_1.ProjectItemType.featureBehavior: case IProjectItemData_1.ProjectItemType.featureRuleBehavior: case IProjectItemData_1.ProjectItemType.voxelShapeBehavior: 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.jsMap: 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.personaPackFolder: 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 isTextureType(itemType) { if (itemType === IProjectItemData_1.ProjectItemType.texture || itemType === IProjectItemData_1.ProjectItemType.designTexture || itemType === IProjectItemData_1.ProjectItemType.uiTexture) { return true; } return false; } static isImageType(itemType) { if (ProjectItemUtilities.isTextureType(itemType) || itemType === IProjectItemData_1.ProjectItemType.image || itemType === IProjectItemData_1.ProjectItemType.storeAssetImage || itemType === IProjectItemData_1.ProjectItemType.marketingAssetImage || itemType === IProjectItemData_1.ProjectItemType.packIconImage) { 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 isVibrantVisualsTypeRelated(itemType) { if (itemType === IProjectItemData_1.ProjectItemType.atmosphericsJson || itemType === IProjectItemData_1.ProjectItemType.colorGradingJson || itemType === IProjectItemData_1.ProjectItemType.lightingJson || itemType === IProjectItemData_1.ProjectItemType.shadowsJson || itemType === IProjectItemData_1.ProjectItemType.pbrJson || itemType === IProjectItemData_1.ProjectItemType.pointLightsJson || itemType === IProjectItemData_1.ProjectItemType.waterJson || itemType === IProjectItemData_1.ProjectItemType.textureSetJson /* not 100% sure there might not be some legit usages of this outside of VV */) { return true; } return false; } static isVibrantVisualsRelated(item) { if (this.isVibrantVisualsTypeRelated(item.itemType)) { return true; } if (item.itemType === IProjectItemData_1.ProjectItemType.texture) { const fileName = item.name.toLowerCase(); for (const ext of TextureDefinition_1.VibrantVisualsFileExtensionVariants) { if (fileName.endsWith(ext)) { return true; } } if (this.isTextureSetTexture(item)) { 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.personaJson: 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: