@minecraft/creator-tools
Version:
Minecraft Creator Tools command line and libraries.
868 lines (867 loc) • 105 kB
JavaScript
"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: