UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

209 lines (206 loc) 13 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.ProjectItemTypeGroupIconFiles = exports.ProjectItemTypeIconFiles = exports.ICON_BASE_PATH = void 0; exports.getIconFilenameForProjectItemType = getIconFilenameForProjectItemType; exports.getIconPathForProjectItemType = getIconPathForProjectItemType; exports.getIconPathForProjectItemTypeGroup = getIconPathForProjectItemTypeGroup; /* ═══════════════════════════════════════════════════════════════════════════ PROJECT ITEM TYPE ICON MAP - SVG File Mappings Maps ProjectItemType enum values to external SVG icon file paths. Icons are stored in /public/res/icons/itemtypes/ and loaded dynamically. Fallback Order: 1. Specific icon for the exact item type 2. Group icon for the item's semantic category 3. Default generic icon ═══════════════════════════════════════════════════════════════════════════ */ const IProjectItemData_1 = require("./IProjectItemData"); const ProjectItemTypeInfo_1 = require("./ProjectItemTypeInfo"); const CreatorToolsHost_1 = __importDefault(require("./CreatorToolsHost")); /** * Base path for item type SVG icons (relative to the content web root). * In VS Code webviews this needs to be resolved against * `CreatorToolsHost.contentWebRoot` (the `asWebviewUri` of the extension * root), because absolute paths like "/res/..." resolve to the webview * sandbox origin and get a 403. In the web build `contentWebRoot` is empty * and the path stays relative to the page, which is also correct. */ exports.ICON_BASE_PATH = "res/icons/itemtypes"; function resolveIconPath(filename) { const root = CreatorToolsHost_1.default.contentWebRoot || ""; // contentWebRoot, when set, already ends with a slash (via // StorageUtilities.ensureEndsWithDelimiter in CreatorToolsHost.init). return `${root}${exports.ICON_BASE_PATH}/${filename}`; } /** * Maps specific ProjectItemType values to their SVG icon filenames. * If a type is not listed here, it falls back to its group icon. */ exports.ProjectItemTypeIconFiles = { // ═══ Scripts & Logic ═══ [IProjectItemData_1.ProjectItemType.ts]: "ts.svg", [IProjectItemData_1.ProjectItemType.js]: "js.svg", [IProjectItemData_1.ProjectItemType.MCFunction]: "mcfunction.svg", [IProjectItemData_1.ProjectItemType.testJs]: "test.svg", [IProjectItemData_1.ProjectItemType.buildProcessedJs]: "build-process.svg", [IProjectItemData_1.ProjectItemType.tickJson]: "tick.svg", [IProjectItemData_1.ProjectItemType.animationBehaviorJson]: "animation.svg", [IProjectItemData_1.ProjectItemType.animationControllerBehaviorJson]: "animation-controller.svg", // ═══ Entity Types ═══ [IProjectItemData_1.ProjectItemType.entityTypeBehavior]: "entity-type-behavior.svg", [IProjectItemData_1.ProjectItemType.entityTypeResource]: "entity-type-resource.svg", [IProjectItemData_1.ProjectItemType.spawnRuleBehavior]: "spawn-rule.svg", [IProjectItemData_1.ProjectItemType.dialogueBehaviorJson]: "dialogue.svg", [IProjectItemData_1.ProjectItemType.behaviorTreeJson]: "behavior-tree.svg", // ═══ Item Types ═══ [IProjectItemData_1.ProjectItemType.itemTypeBehavior]: "item-type-behavior.svg", [IProjectItemData_1.ProjectItemType.itemTypeLegacyResource]: "item-type-resource.svg", [IProjectItemData_1.ProjectItemType.attachableResourceJson]: "attachable.svg", [IProjectItemData_1.ProjectItemType.lootTableBehavior]: "loot-table.svg", [IProjectItemData_1.ProjectItemType.recipeBehavior]: "recipe.svg", [IProjectItemData_1.ProjectItemType.tradingBehaviorJson]: "trading.svg", [IProjectItemData_1.ProjectItemType.itemTextureJson]: "item-texture.svg", // ═══ Block Types ═══ [IProjectItemData_1.ProjectItemType.blockTypeBehavior]: "block-type-behavior.svg", [IProjectItemData_1.ProjectItemType.blockTypeResourceJsonDoNotUse]: "block-type-resource.svg", [IProjectItemData_1.ProjectItemType.blocksCatalogResourceJson]: "blocks-catalog.svg", [IProjectItemData_1.ProjectItemType.blockCulling]: "block-culling.svg", [IProjectItemData_1.ProjectItemType.terrainTextureCatalogResourceJson]: "terrain-texture.svg", [IProjectItemData_1.ProjectItemType.voxelShapeBehavior]: "voxel-shape.svg", // ═══ World & Worldgen ═══ [IProjectItemData_1.ProjectItemType.worldFolder]: "world.svg", [IProjectItemData_1.ProjectItemType.MCWorld]: "mcworld.svg", [IProjectItemData_1.ProjectItemType.MCTemplate]: "mctemplate.svg", [IProjectItemData_1.ProjectItemType.MCProject]: "mcproject.svg", [IProjectItemData_1.ProjectItemType.levelDat]: "level-dat.svg", [IProjectItemData_1.ProjectItemType.levelDatOld]: "level-dat.svg", [IProjectItemData_1.ProjectItemType.levelDbLdb]: "leveldb.svg", [IProjectItemData_1.ProjectItemType.levelDbLog]: "leveldb.svg", [IProjectItemData_1.ProjectItemType.levelDbCurrent]: "leveldb.svg", [IProjectItemData_1.ProjectItemType.levelDbManifest]: "leveldb.svg", [IProjectItemData_1.ProjectItemType.biomeBehavior]: "biome.svg", [IProjectItemData_1.ProjectItemType.biomeResource]: "biome.svg", [IProjectItemData_1.ProjectItemType.featureRuleBehavior]: "feature-rule.svg", [IProjectItemData_1.ProjectItemType.featureBehavior]: "feature.svg", [IProjectItemData_1.ProjectItemType.jigsawStructureSet]: "jigsaw.svg", [IProjectItemData_1.ProjectItemType.jigsawStructure]: "jigsaw.svg", [IProjectItemData_1.ProjectItemType.jigsawTemplatePool]: "jigsaw.svg", [IProjectItemData_1.ProjectItemType.jigsawProcessorList]: "jigsaw.svg", [IProjectItemData_1.ProjectItemType.dimensionJson]: "dimension.svg", [IProjectItemData_1.ProjectItemType.volumeBehaviorJson]: "volume.svg", [IProjectItemData_1.ProjectItemType.structure]: "structure.svg", [IProjectItemData_1.ProjectItemType.worldTemplateManifestJson]: "world-template.svg", // ═══ Models & Animations ═══ [IProjectItemData_1.ProjectItemType.modelGeometryJson]: "model-geometry.svg", [IProjectItemData_1.ProjectItemType.animationResourceJson]: "animation.svg", [IProjectItemData_1.ProjectItemType.animationControllerResourceJson]: "animation-controller.svg", [IProjectItemData_1.ProjectItemType.renderControllerJson]: "render-controller.svg", [IProjectItemData_1.ProjectItemType.particleJson]: "particle.svg", // ═══ Textures & Audio ═══ [IProjectItemData_1.ProjectItemType.texture]: "texture.svg", [IProjectItemData_1.ProjectItemType.image]: "image.svg", [IProjectItemData_1.ProjectItemType.packIconImage]: "pack-icon.svg", [IProjectItemData_1.ProjectItemType.marketingAssetImage]: "marketing-asset.svg", [IProjectItemData_1.ProjectItemType.storeAssetImage]: "store-asset.svg", [IProjectItemData_1.ProjectItemType.flipbookTexturesJson]: "flipbook-textures.svg", [IProjectItemData_1.ProjectItemType.audio]: "audio.svg", [IProjectItemData_1.ProjectItemType.soundCatalog]: "sound-catalog.svg", [IProjectItemData_1.ProjectItemType.soundDefinitionCatalog]: "sound-definition.svg", [IProjectItemData_1.ProjectItemType.musicDefinitionJson]: "music-definition.svg", [IProjectItemData_1.ProjectItemType.fogResourceJson]: "fog.svg", [IProjectItemData_1.ProjectItemType.textureSetJson]: "texture-set.svg", // ═══ Vibrant Visuals ═══ [IProjectItemData_1.ProjectItemType.lightingJson]: "lighting.svg", [IProjectItemData_1.ProjectItemType.colorGradingJson]: "lighting.svg", [IProjectItemData_1.ProjectItemType.atmosphericsJson]: "fog.svg", [IProjectItemData_1.ProjectItemType.pbrJson]: "texture-set.svg", [IProjectItemData_1.ProjectItemType.pointLightsJson]: "lighting.svg", // ═══ UI/UX ═══ [IProjectItemData_1.ProjectItemType.uiJson]: "ui.svg", [IProjectItemData_1.ProjectItemType.lang]: "language.svg", [IProjectItemData_1.ProjectItemType.languagesCatalogJson]: "language.svg", // ═══ Config & Dev ═══ [IProjectItemData_1.ProjectItemType.tsconfigJson]: "tsconfig.svg", [IProjectItemData_1.ProjectItemType.packageJson]: "package-json.svg", [IProjectItemData_1.ProjectItemType.packageLockJson]: "package-json.svg", [IProjectItemData_1.ProjectItemType.esLintConfigMjs]: "eslint-config.svg", [IProjectItemData_1.ProjectItemType.env]: "env-file.svg", [IProjectItemData_1.ProjectItemType.behaviorPackManifestJson]: "manifest.svg", [IProjectItemData_1.ProjectItemType.resourcePackManifestJson]: "manifest.svg", [IProjectItemData_1.ProjectItemType.behaviorPackFolder]: "behavior-pack.svg", [IProjectItemData_1.ProjectItemType.resourcePackFolder]: "resource-pack.svg", [IProjectItemData_1.ProjectItemType.cameraBehaviorJson]: "camera.svg", [IProjectItemData_1.ProjectItemType.cameraResourceJson]: "camera.svg", [IProjectItemData_1.ProjectItemType.materialsResourceJson]: "material.svg", [IProjectItemData_1.ProjectItemType.material]: "material.svg", // ═══ Packaging ═══ [IProjectItemData_1.ProjectItemType.MCAddon]: "mcaddon.svg", [IProjectItemData_1.ProjectItemType.MCPack]: "mcpack.svg", [IProjectItemData_1.ProjectItemType.zip]: "zip.svg", // ═══ Skins & Personas ═══ [IProjectItemData_1.ProjectItemType.skinCatalogJson]: "skin.svg", [IProjectItemData_1.ProjectItemType.skinPackManifestJson]: "skin-pack.svg", [IProjectItemData_1.ProjectItemType.skinPackFolder]: "skin-pack.svg", // ═══ Meta/Documentation ═══ [IProjectItemData_1.ProjectItemType.dataForm]: "dataform.svg", [IProjectItemData_1.ProjectItemType.docInfoJson]: "doc.svg", [IProjectItemData_1.ProjectItemType.markdownDocumentation]: "markdown.svg", [IProjectItemData_1.ProjectItemType.commandSetDefinitionJson]: "command-set.svg", // ═══ Design ═══ [IProjectItemData_1.ProjectItemType.actionSet]: "action-set.svg", [IProjectItemData_1.ProjectItemType.designPackFolder]: "design-pack.svg", // ═══ Unknown/Other ═══ [IProjectItemData_1.ProjectItemType.unknown]: "unknown.svg", [IProjectItemData_1.ProjectItemType.unknownJson]: "json.svg", }; /** * Maps ProjectItemTypeGroup to their SVG icon filenames. * Used as fallback when no specific icon exists for an item type. */ exports.ProjectItemTypeGroupIconFiles = { [ProjectItemTypeInfo_1.ProjectItemTypeGroup.scriptsLogic]: "ts.svg", [ProjectItemTypeInfo_1.ProjectItemTypeGroup.entityTypes]: "entity-type-behavior.svg", [ProjectItemTypeInfo_1.ProjectItemTypeGroup.itemTypes]: "item-type-behavior.svg", [ProjectItemTypeInfo_1.ProjectItemTypeGroup.blockTypes]: "block-type-behavior.svg", [ProjectItemTypeInfo_1.ProjectItemTypeGroup.worldWorldgen]: "world.svg", [ProjectItemTypeInfo_1.ProjectItemTypeGroup.modelsAnimations]: "model-geometry.svg", [ProjectItemTypeInfo_1.ProjectItemTypeGroup.texturesAudio]: "texture.svg", [ProjectItemTypeInfo_1.ProjectItemTypeGroup.vibrantVisuals]: "lighting.svg", [ProjectItemTypeInfo_1.ProjectItemTypeGroup.uiUx]: "ui.svg", [ProjectItemTypeInfo_1.ProjectItemTypeGroup.configDev]: "properties.svg", [ProjectItemTypeInfo_1.ProjectItemTypeGroup.packaging]: "mcpack.svg", [ProjectItemTypeInfo_1.ProjectItemTypeGroup.skinPersona]: "skin.svg", [ProjectItemTypeInfo_1.ProjectItemTypeGroup.meta]: "doc.svg", [ProjectItemTypeInfo_1.ProjectItemTypeGroup.design]: "design-pack.svg", [ProjectItemTypeInfo_1.ProjectItemTypeGroup.unknown]: "default.svg", }; /** * Gets the SVG icon filename for a specific project item type. * Falls back to group icon if no specific icon is defined. */ function getIconFilenameForProjectItemType(itemType) { const specificIcon = exports.ProjectItemTypeIconFiles[itemType]; if (specificIcon) { return specificIcon; } const group = (0, ProjectItemTypeInfo_1.getProjectItemTypeGroup)(itemType); return exports.ProjectItemTypeGroupIconFiles[group] || "default.svg"; } /** * Gets the full path to the SVG icon for a project item type. */ function getIconPathForProjectItemType(itemType) { const filename = getIconFilenameForProjectItemType(itemType); return resolveIconPath(filename); } /** * Gets the full path to the SVG icon for a project item type group. */ function getIconPathForProjectItemTypeGroup(group) { const filename = exports.ProjectItemTypeGroupIconFiles[group] || "default.svg"; return resolveIconPath(filename); }