@minecraft/creator-tools
Version:
Minecraft Creator Tools command line and libraries.
452 lines (451 loc) • 27 kB
JavaScript
"use strict";
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProjectItemTypeSpecificIcons = exports.ProjectItemTypeGroupIcons = exports.ProjectItemTypeGroupNames = exports.ProjectItemTypeGroupSortOrder = exports.ProjectItemTypeGroupColors = exports.ProjectItemTypeGroup = void 0;
exports.getProjectItemTypeGroup = getProjectItemTypeGroup;
exports.getColorForProjectItemType = getColorForProjectItemType;
exports.getHexColorForProjectItemType = getHexColorForProjectItemType;
exports.getGroupSortOrder = getGroupSortOrder;
exports.getSortOrderForProjectItemType = getSortOrderForProjectItemType;
exports.getIconPathForGroup = getIconPathForGroup;
exports.getIconPathForProjectItemType = getIconPathForProjectItemType;
exports.getSpecificIconPathForProjectItemType = getSpecificIconPathForProjectItemType;
const IProjectItemData_1 = require("./IProjectItemData");
/**
* Semantic category groups for project items.
* These map to visual groupings in the UI item list.
*/
var ProjectItemTypeGroup;
(function (ProjectItemTypeGroup) {
ProjectItemTypeGroup["design"] = "design";
ProjectItemTypeGroup["scriptsLogic"] = "scriptsLogic";
ProjectItemTypeGroup["entityTypes"] = "entityTypes";
ProjectItemTypeGroup["itemTypes"] = "itemTypes";
ProjectItemTypeGroup["blockTypes"] = "blockTypes";
ProjectItemTypeGroup["worldWorldgen"] = "worldWorldgen";
ProjectItemTypeGroup["modelsAnimations"] = "modelsAnimations";
ProjectItemTypeGroup["texturesAudio"] = "texturesAudio";
ProjectItemTypeGroup["vibrantVisuals"] = "vibrantVisuals";
ProjectItemTypeGroup["uiUx"] = "uiUx";
ProjectItemTypeGroup["configDev"] = "configDev";
ProjectItemTypeGroup["packaging"] = "packaging";
ProjectItemTypeGroup["skinPersona"] = "skinPersona";
ProjectItemTypeGroup["meta"] = "meta";
ProjectItemTypeGroup["unknown"] = "unknown";
})(ProjectItemTypeGroup || (exports.ProjectItemTypeGroup = ProjectItemTypeGroup = {}));
/**
* Color palette for project item type groups.
* Colors are inspired by Minecraft materials and items.
*/
exports.ProjectItemTypeGroupColors = {
// Emerald Green - Scripts and logic
[]: { red: 16, green: 185, blue: 129 }, // #10b981
// Minecraft Green - Entity types
[]: { red: 82, green: 165, blue: 53 }, // #52a535
// Gold/Amber - Item types
[]: { red: 245, green: 158, blue: 11 }, // #f59e0b
// Stone Gray - Block types
[]: { red: 120, green: 113, blue: 108 }, // #78716c
// Grass Lime - World and worldgen
[]: { red: 132, green: 204, blue: 22 }, // #84cc16
// Diamond Cyan - Models and animations
[]: { red: 6, green: 182, blue: 212 }, // #06b6d4
// Minecraft Green - Textures and audio
[]: { red: 82, green: 165, blue: 53 }, // #52a535
// Minecraft Green - Vibrant visuals
[]: { red: 82, green: 165, blue: 53 }, // #52a535
// Pumpkin Orange - UI/UX
[]: { red: 249, green: 115, blue: 22 }, // #f97316
// Iron Slate - Config and dev tools
[]: { red: 100, green: 116, blue: 139 }, // #64748b
// Lapis Blue - Design pack content
[]: { red: 59, green: 130, blue: 246 }, // #3b82f6
// Redstone Red - Packaging
[]: { red: 239, green: 68, blue: 68 }, // #ef4444
// Leather Brown - Skins and personas
[]: { red: 180, green: 128, blue: 90 }, // #b4805a
// Book Brown - Meta/documentation
[]: { red: 146, green: 114, blue: 87 }, // #927257
// Coal Gray - Unknown
[]: { red: 82, green: 82, blue: 91 }, // #52525b
};
/**
* Maps each ProjectItemType to its semantic group.
*/
function getProjectItemTypeGroup(itemType) {
switch (itemType) {
// ═══ Design Pack ═══
case IProjectItemData_1.ProjectItemType.designTexture:
case IProjectItemData_1.ProjectItemType.designPackManifestJson:
case IProjectItemData_1.ProjectItemType.designPackFolder:
case IProjectItemData_1.ProjectItemType.actionSet:
return ProjectItemTypeGroup.design;
// ═══ Scripts & Logic ═══
case IProjectItemData_1.ProjectItemType.ts:
case IProjectItemData_1.ProjectItemType.js:
case IProjectItemData_1.ProjectItemType.MCFunction:
case IProjectItemData_1.ProjectItemType.testJs:
case IProjectItemData_1.ProjectItemType.buildProcessedJs:
case IProjectItemData_1.ProjectItemType.catalogIndexJs:
case IProjectItemData_1.ProjectItemType.entityTypeBaseJs:
case IProjectItemData_1.ProjectItemType.entityTypeBaseTs:
case IProjectItemData_1.ProjectItemType.blockTypeBaseJs:
case IProjectItemData_1.ProjectItemType.blockTypeBaseTs:
case IProjectItemData_1.ProjectItemType.tickJson:
case IProjectItemData_1.ProjectItemType.functionEventJson:
case IProjectItemData_1.ProjectItemType.animationBehaviorJson:
case IProjectItemData_1.ProjectItemType.animationControllerBehaviorJson:
return ProjectItemTypeGroup.scriptsLogic;
// ═══ Entity Types ═══
case IProjectItemData_1.ProjectItemType.entityTypeBehavior:
case IProjectItemData_1.ProjectItemType.entityTypeResource:
case IProjectItemData_1.ProjectItemType.spawnRuleBehavior:
case IProjectItemData_1.ProjectItemType.spawnGroupJson:
case IProjectItemData_1.ProjectItemType.dialogueBehaviorJson:
case IProjectItemData_1.ProjectItemType.behaviorTreeJson:
return ProjectItemTypeGroup.entityTypes;
// ═══ Item Types ═══
case IProjectItemData_1.ProjectItemType.itemTypeBehavior:
case IProjectItemData_1.ProjectItemType.itemTypeLegacyResource:
case IProjectItemData_1.ProjectItemType.attachableResourceJson:
case IProjectItemData_1.ProjectItemType.lootTableBehavior:
case IProjectItemData_1.ProjectItemType.recipeBehavior:
case IProjectItemData_1.ProjectItemType.tradingBehaviorJson:
case IProjectItemData_1.ProjectItemType.craftingItemCatalog:
case IProjectItemData_1.ProjectItemType.itemTextureJson:
return ProjectItemTypeGroup.itemTypes;
// ═══ Block Types ═══
case IProjectItemData_1.ProjectItemType.blockTypeBehavior:
case IProjectItemData_1.ProjectItemType.blocksCatalogResourceJson:
case IProjectItemData_1.ProjectItemType.blockTypeResourceJsonDoNotUse:
case IProjectItemData_1.ProjectItemType.blockCulling:
case IProjectItemData_1.ProjectItemType.blockMaterialsBehaviorJson:
case IProjectItemData_1.ProjectItemType.terrainTextureCatalogResourceJson:
case IProjectItemData_1.ProjectItemType.voxelShapeBehavior:
return ProjectItemTypeGroup.blockTypes;
// ═══ World & Worldgen ═══
case IProjectItemData_1.ProjectItemType.worldFolder:
case IProjectItemData_1.ProjectItemType.worldTemplateManifestJson:
case IProjectItemData_1.ProjectItemType.MCWorld:
case IProjectItemData_1.ProjectItemType.MCTemplate:
case IProjectItemData_1.ProjectItemType.MCProject:
case IProjectItemData_1.ProjectItemType.levelDat:
case IProjectItemData_1.ProjectItemType.levelDatOld:
case IProjectItemData_1.ProjectItemType.behaviorPackListJson:
case IProjectItemData_1.ProjectItemType.resourcePackListJson:
case IProjectItemData_1.ProjectItemType.behaviorPackHistoryListJson:
case IProjectItemData_1.ProjectItemType.resourcePackHistoryListJson:
case IProjectItemData_1.ProjectItemType.levelDbLdb:
case IProjectItemData_1.ProjectItemType.levelDbLog:
case IProjectItemData_1.ProjectItemType.levelDbCurrent:
case IProjectItemData_1.ProjectItemType.levelDbManifest:
case IProjectItemData_1.ProjectItemType.worldTest:
case IProjectItemData_1.ProjectItemType.biomeBehavior:
case IProjectItemData_1.ProjectItemType.biomeResource:
case IProjectItemData_1.ProjectItemType.biomesClientCatalogResource:
case IProjectItemData_1.ProjectItemType.featureRuleBehavior:
case IProjectItemData_1.ProjectItemType.featureBehavior:
case IProjectItemData_1.ProjectItemType.jigsawStructureSet:
case IProjectItemData_1.ProjectItemType.jigsawStructure:
case IProjectItemData_1.ProjectItemType.jigsawTemplatePool:
case IProjectItemData_1.ProjectItemType.jigsawProcessorList:
case IProjectItemData_1.ProjectItemType.dimensionJson:
case IProjectItemData_1.ProjectItemType.volumeBehaviorJson:
case IProjectItemData_1.ProjectItemType.structure:
return ProjectItemTypeGroup.worldWorldgen;
// ═══ Models & Animations ═══
case IProjectItemData_1.ProjectItemType.modelGeometryJson:
case IProjectItemData_1.ProjectItemType.animationResourceJson:
case IProjectItemData_1.ProjectItemType.animationControllerResourceJson:
case IProjectItemData_1.ProjectItemType.renderControllerJson:
case IProjectItemData_1.ProjectItemType.particleJson:
return ProjectItemTypeGroup.modelsAnimations;
// ═══ Textures & Audio ═══
case IProjectItemData_1.ProjectItemType.texture:
case IProjectItemData_1.ProjectItemType.image:
case IProjectItemData_1.ProjectItemType.packIconImage:
case IProjectItemData_1.ProjectItemType.marketingAssetImage:
case IProjectItemData_1.ProjectItemType.storeAssetImage:
case IProjectItemData_1.ProjectItemType.textureListJson:
case IProjectItemData_1.ProjectItemType.flipbookTexturesJson:
case IProjectItemData_1.ProjectItemType.audio:
case IProjectItemData_1.ProjectItemType.soundCatalog:
case IProjectItemData_1.ProjectItemType.soundDefinitionCatalog:
case IProjectItemData_1.ProjectItemType.musicDefinitionJson:
case IProjectItemData_1.ProjectItemType.fogResourceJson:
return ProjectItemTypeGroup.texturesAudio;
// ═══ Vibrant Visuals ═══
case IProjectItemData_1.ProjectItemType.lightingJson:
case IProjectItemData_1.ProjectItemType.colorGradingJson:
case IProjectItemData_1.ProjectItemType.atmosphericsJson:
case IProjectItemData_1.ProjectItemType.pbrJson:
case IProjectItemData_1.ProjectItemType.pointLightsJson:
case IProjectItemData_1.ProjectItemType.waterJson:
case IProjectItemData_1.ProjectItemType.shadowsJson:
case IProjectItemData_1.ProjectItemType.textureSetJson:
return ProjectItemTypeGroup.vibrantVisuals;
// ═══ UI/UX ═══
case IProjectItemData_1.ProjectItemType.uiJson:
case IProjectItemData_1.ProjectItemType.uiTexture:
case IProjectItemData_1.ProjectItemType.ninesliceJson:
case IProjectItemData_1.ProjectItemType.globalVariablesJson:
case IProjectItemData_1.ProjectItemType.lang:
case IProjectItemData_1.ProjectItemType.languagesCatalogJson:
case IProjectItemData_1.ProjectItemType.loadingMessagesJson:
case IProjectItemData_1.ProjectItemType.splashesJson:
case IProjectItemData_1.ProjectItemType.emoticonsJson:
case IProjectItemData_1.ProjectItemType.fontMetadataJson:
return ProjectItemTypeGroup.uiUx;
// ═══ Config & Dev ═══
case IProjectItemData_1.ProjectItemType.tsconfigJson:
case IProjectItemData_1.ProjectItemType.packageJson:
case IProjectItemData_1.ProjectItemType.packageLockJson:
case IProjectItemData_1.ProjectItemType.vsCodeLaunchJson:
case IProjectItemData_1.ProjectItemType.vsCodeTasksJson:
case IProjectItemData_1.ProjectItemType.vsCodeSettingsJson:
case IProjectItemData_1.ProjectItemType.vsCodeExtensionsJson:
case IProjectItemData_1.ProjectItemType.justConfigTs:
case IProjectItemData_1.ProjectItemType.jsMap:
case IProjectItemData_1.ProjectItemType.esLintConfigMjs:
case IProjectItemData_1.ProjectItemType.env:
case IProjectItemData_1.ProjectItemType.prettierRcJson:
case IProjectItemData_1.ProjectItemType.jsconfigJson:
case IProjectItemData_1.ProjectItemType.behaviorPackManifestJson:
case IProjectItemData_1.ProjectItemType.resourcePackManifestJson:
case IProjectItemData_1.ProjectItemType.behaviorPackFolder:
case IProjectItemData_1.ProjectItemType.resourcePackFolder:
case IProjectItemData_1.ProjectItemType.cameraBehaviorJson:
case IProjectItemData_1.ProjectItemType.cameraResourceJson:
case IProjectItemData_1.ProjectItemType.aimAssistPresetJson:
case IProjectItemData_1.ProjectItemType.aimAssistCategoryJson:
case IProjectItemData_1.ProjectItemType.educationJson:
case IProjectItemData_1.ProjectItemType.fileListArrayJson:
case IProjectItemData_1.ProjectItemType.sdlLayout:
case IProjectItemData_1.ProjectItemType.lodJson:
case IProjectItemData_1.ProjectItemType.rendererJson:
case IProjectItemData_1.ProjectItemType.uniformsJson:
case IProjectItemData_1.ProjectItemType.materialsResourceJson:
case IProjectItemData_1.ProjectItemType.material:
case IProjectItemData_1.ProjectItemType.materialSetJson:
case IProjectItemData_1.ProjectItemType.materialVertex:
case IProjectItemData_1.ProjectItemType.materialFragment:
case IProjectItemData_1.ProjectItemType.materialGeometry:
return ProjectItemTypeGroup.configDev;
// ═══ Packaging ═══
case IProjectItemData_1.ProjectItemType.MCAddon:
case IProjectItemData_1.ProjectItemType.MCPack:
case IProjectItemData_1.ProjectItemType.zip:
case IProjectItemData_1.ProjectItemType.contentsJson:
return ProjectItemTypeGroup.packaging;
// ═══ Skins & Personas ═══
case IProjectItemData_1.ProjectItemType.skinCatalogJson:
case IProjectItemData_1.ProjectItemType.skinPackGeometryJson:
case IProjectItemData_1.ProjectItemType.skinPackTextureBackCompatJson:
case IProjectItemData_1.ProjectItemType.skinPackManifestJson:
case IProjectItemData_1.ProjectItemType.skinPackFolder:
case IProjectItemData_1.ProjectItemType.personaJson:
case IProjectItemData_1.ProjectItemType.personaManifestJson:
case IProjectItemData_1.ProjectItemType.personaPackFolder:
return ProjectItemTypeGroup.skinPersona;
// ═══ Meta/Documentation ═══
case IProjectItemData_1.ProjectItemType.dataForm:
case IProjectItemData_1.ProjectItemType.docInfoJson:
case IProjectItemData_1.ProjectItemType.scriptTypesJson:
case IProjectItemData_1.ProjectItemType.commandSetDefinitionJson:
case IProjectItemData_1.ProjectItemType.docfxJson:
case IProjectItemData_1.ProjectItemType.jsdocJson:
case IProjectItemData_1.ProjectItemType.markdownDocumentation:
case IProjectItemData_1.ProjectItemType.documentedTypeFolder:
case IProjectItemData_1.ProjectItemType.documentedCommandFolder:
case IProjectItemData_1.ProjectItemType.contentIndexJson:
case IProjectItemData_1.ProjectItemType.contentReportJson:
case IProjectItemData_1.ProjectItemType.mcToolsProjectPreferences:
case IProjectItemData_1.ProjectItemType.projectSummaryMetadata:
case IProjectItemData_1.ProjectItemType.engineOrderingJson:
case IProjectItemData_1.ProjectItemType.vanillaDataJson:
case IProjectItemData_1.ProjectItemType.tagsMetadata:
return ProjectItemTypeGroup.meta;
// ═══ Unknown ═══
case IProjectItemData_1.ProjectItemType.unknown:
case IProjectItemData_1.ProjectItemType.unknownJson:
default:
return ProjectItemTypeGroup.unknown;
}
}
/**
* Gets the semantic color for a project item type.
*/
function getColorForProjectItemType(itemType) {
const group = getProjectItemTypeGroup(itemType);
return { ...exports.ProjectItemTypeGroupColors[group] };
}
/**
* Gets the hex color string for a project item type.
*/
function getHexColorForProjectItemType(itemType) {
const color = getColorForProjectItemType(itemType);
return `
.toString(16)
.padStart(2, "0")}`;
}
/**
* Display order for groups in the UI item list.
* Order: Design → Scripts → Entities → Items → Blocks → World → Models → Textures → VV → UI → Config → Packaging → Skins → Meta → Unknown
*/
exports.ProjectItemTypeGroupSortOrder = [
ProjectItemTypeGroup.design,
ProjectItemTypeGroup.scriptsLogic,
ProjectItemTypeGroup.entityTypes,
ProjectItemTypeGroup.itemTypes,
ProjectItemTypeGroup.blockTypes,
ProjectItemTypeGroup.worldWorldgen,
ProjectItemTypeGroup.modelsAnimations,
ProjectItemTypeGroup.texturesAudio,
ProjectItemTypeGroup.vibrantVisuals,
ProjectItemTypeGroup.uiUx,
ProjectItemTypeGroup.skinPersona,
ProjectItemTypeGroup.configDev,
ProjectItemTypeGroup.packaging,
ProjectItemTypeGroup.meta,
ProjectItemTypeGroup.unknown,
];
/**
* Gets the sort order index for a project item type group.
*/
function getGroupSortOrder(group) {
const index = exports.ProjectItemTypeGroupSortOrder.indexOf(group);
return index >= 0 ? index : exports.ProjectItemTypeGroupSortOrder.length;
}
/**
* Gets the sort order for a project item type based on its group.
*/
function getSortOrderForProjectItemType(itemType) {
const group = getProjectItemTypeGroup(itemType);
const groupOrder = getGroupSortOrder(group);
// Multiply by 1000 to leave room for sub-ordering within groups
// Add the item type number for stable ordering within groups
return groupOrder * 1000 + itemType;
}
/**
* Display name for each group.
*/
exports.ProjectItemTypeGroupNames = {
[]: "Design",
[]: "Scripts & Logic",
[]: "Entity Types",
[]: "Item Types",
[]: "Block Types",
[]: "World & Worldgen",
[]: "Models & Animations",
[]: "Textures & Audio",
[]: "Vibrant Visuals",
[]: "UI & Localization",
[]: "Config & Dev",
[]: "Packages",
[]: "Skins & Personas",
[]: "Documentation",
[]: "Other",
};
/**
* SVG path data for each project item type group icon.
* Icons are designed on a 16x16 grid with a blocky Minecraft aesthetic.
*/
exports.ProjectItemTypeGroupIcons = {
// Design - Paintbrush/palette
[]: `M3 12L5 10L11 4L13 6L7 12L5 14L3 12ZM12 3L13 2L14 3L13 4L12 3ZM4 11L5 12L4 13L3 12L4 11Z`,
// Scripts/Logic - Code brackets with lightning bolt
[]: `M2 3H5L4 8H2L2 3ZM11 3H14V8H12L11 3ZM7 2L9 7H7L9 14H7L5 9H7L5 2H7Z`,
// Entity Types - Mob face (creeper-inspired)
[]: `M3 2H13V14H3V2ZM5 5H7V7H5V5ZM9 5H11V7H9V5ZM6 9H10V10H9V12H7V10H6V9Z`,
// Item Types - Diamond/gem shape
[]: `M8 1L14 7L8 15L2 7L8 1ZM8 4L5 7L8 12L11 7L8 4Z`,
// Block Types - 3D cube
[]: `M8 2L14 5V11L8 14L2 11V5L8 2ZM8 4L4 6.5V10.5L8 12L12 10.5V6.5L8 4Z`,
// World/Worldgen - Globe with terrain
[]: `M8 1A7 7 0 1 0 8 15A7 7 0 1 0 8 1ZM8 3A5 5 0 1 1 8 13A5 5 0 1 1 8 3ZM4 8H6L7 6H9L10 8H12M5 10L8 11L11 10`,
// Models/Animations - Bone/skeleton arm
[]: `M2 4H4V6H6V4H10V6H12V4H14V8H12V10H14V14H10V12H6V14H2V10H4V8H2V4ZM6 8V10H10V8H6Z`,
// Textures/Audio - Image frame with music note
[]: `M2 2H11V3H3V11H2V2ZM5 5H14V14H5V5ZM7 7V12H12V7H7ZM11 8V10C11 11 10 11 10 10V8H11Z`,
// Vibrant Visuals - Sun/light rays
[]: `M8 4A4 4 0 1 0 8 12A4 4 0 1 0 8 4ZM8 1V2M8 14V15M1 8H2M14 8H15M3 3L4 4M12 12L13 13M13 3L12 4M3 13L4 12`,
// UI/UX - Window with grid
[]: `M2 2H14V14H2V2ZM3 3V5H13V3H3ZM3 6V13H7V6H3ZM8 6V13H13V6H8ZM4 4H5V4.5H4V4ZM6 4H7V4.5H6V4Z`,
// Config/Dev - Gear/cog
[]: `M7 1H9V3L10 3.5L11.5 2L13 3.5L11.5 5L12 6H14V8H12L11.5 9L13 10.5L11.5 12L10 10.5L9 11V13H7V11L6 10.5L4.5 12L3 10.5L4.5 9L4 8H2V6H4L4.5 5L3 3.5L4.5 2L6 3.5L7 3V1ZM8 5A3 3 0 1 0 8 11A3 3 0 1 0 8 5Z`,
// Packaging - Box/package
[]: `M2 4L8 1L14 4V12L8 15L2 12V4ZM8 3L4 5V7L8 9L12 7V5L8 3ZM3 8V11L8 13V10L3 8ZM13 8L8 10V13L13 11V8Z`,
// Skins/Personas - Player head
[]: `M4 2H12V10H10V12H12V14H4V12H6V10H4V2ZM6 4V8H10V4H6ZM7 5H8V6H7V5ZM9 5H10V6H9V5Z`,
// Meta/Documentation - Book
[]: `M3 2C3 2 4 1 8 1C12 1 13 2 13 2V13C13 13 12 14 8 14C4 14 3 13 3 13V2ZM5 4H11V5H5V4ZM5 6H11V7H5V6ZM5 8H9V9H5V8Z`,
// Unknown - Question mark
[]: `M6 4C6 2 10 2 10 4C10 6 8 6 8 8V9H7V8C7 5.5 9 5.5 9 4C9 3 7 3 7 4H6ZM7 11H9V13H7V11Z`,
};
/**
* Gets the SVG icon path for a project item type group.
*/
function getIconPathForGroup(group) {
return exports.ProjectItemTypeGroupIcons[group] || exports.ProjectItemTypeGroupIcons[ProjectItemTypeGroup.unknown];
}
/**
* Gets the SVG icon path for a project item type.
*/
function getIconPathForProjectItemType(itemType) {
const group = getProjectItemTypeGroup(itemType);
return getIconPathForGroup(group);
}
/**
* Individual item type icons - more specific icons for commonly used types.
* Falls back to group icon if not defined.
*/
exports.ProjectItemTypeSpecificIcons = {
// TypeScript - TS letters
[]: `M2 4H14V12H2V4ZM4 6V10H5V7.5H6.5V10H7.5V6H4ZM8 7H10V7.5H9V8H10V9.5H8V9H9V8.5H8V7Z`,
// JavaScript - JS letters
[]: `M2 4H14V12H2V4ZM4 6V9.5H5V10H6V9H5V6H4ZM7 6V10H10V8.5H8V8H10V6H7ZM8 7H9V7.5H8V7Z`,
// MCFunction - Command block
[]: `M3 3H13V13H3V3ZM5 5V11H11V5H5ZM6 7H10V9H6V7Z`,
// Entity behavior - Mob head with gear
[]: `M3 2H13V11H11V13H5V11H3V2ZM5 4H7V6H5V4ZM9 4H11V6H9V4ZM6 8H10V9H6V8ZM12 11A2 2 0 1 0 12 15A2 2 0 1 0 12 11Z`,
// Entity resource - Mob head with paint
[]: `M3 2H13V11H11V13H5V11H3V2ZM5 4H7V6H5V4ZM9 4H11V6H9V4ZM6 8H10V9H6V8ZM1 12L3 10L4 11L3 13L1 12Z`,
// Item behavior - Sword
[]: `M12 1L14 3L6 11L4 13L3 12L5 10L13 2L12 1ZM2 14L4 12L5 13L3 15L2 14Z`,
// Block behavior - Cube with gear
[]: `M8 2L13 5V10L8 13L3 10V5L8 2ZM8 4L5 5.5V9L8 11L11 9V5.5L8 4ZM12 12A2 2 0 1 0 12 16A2 2 0 1 0 12 12Z`,
// Loot table - Chest
[]: `M2 5H14V13H2V5ZM3 6V8H13V6H3ZM3 9V12H13V9H3ZM7 10H9V11H7V10ZM1 4H15V5H1V4Z`,
// Recipe - Crafting grid
[]: `M3 3H13V13H3V3ZM4 4V6H6V4H4ZM7 4V6H9V4H7ZM10 4V6H12V4H10ZM4 7V9H6V7H4ZM7 7V9H9V7H7ZM10 7V9H12V7H10ZM4 10V12H6V10H4ZM7 10V12H9V10H7ZM10 10V12H12V10H10Z`,
// Spawn rule - Egg
[]: `M8 2C5 2 4 5 4 8C4 12 6 14 8 14C10 14 12 12 12 8C12 5 11 2 8 2ZM8 4C9.5 4 10 6 10 8C10 10.5 9 12 8 12C7 12 6 10.5 6 8C6 6 6.5 4 8 4Z`,
// Model geometry - Wireframe cube
[]: `M8 1L14 4V11L8 14L2 11V4L8 1ZM8 3L4 5L8 7L12 5L8 3ZM3 6V10L7 12V8L3 6ZM13 6L9 8V12L13 10V6Z`,
// Texture - Image
[]: `M2 3H14V13H2V3ZM3 4V12H13V4H3ZM5 6A1 1 0 1 0 5 8A1 1 0 1 0 5 6ZM4 11L6 8L8 10L10 7L12 11H4Z`,
// Audio - Speaker/sound waves
[]: `M3 5H5L9 2V14L5 11H3V5ZM11 5V6C12 6.5 12 9.5 11 10V11C13 10 13 6 11 5ZM11 3V4C14 5 14 11 11 12V13C15 11.5 15 4.5 11 3Z`,
// Biome - Mountain/tree
[]: `M8 2L13 10H10L12 14H4L6 10H3L8 2ZM8 5L6 8H7L5.5 12H10.5L9 8H10L8 5Z`,
// Particle - Sparkle
[]: `M8 1V4M8 12V15M1 8H4M12 8H15M3 3L5 5M11 11L13 13M13 3L11 5M3 13L5 11M8 6A2 2 0 1 0 8 10A2 2 0 1 0 8 6Z`,
// Animation - Film strip
[]: `M2 2H4V14H2V2ZM12 2H14V14H12V2ZM5 3H11V6H5V3ZM5 7H11V10H5V7ZM5 11H11V14H5V11ZM3 3V4M3 6V7M3 9V10M3 12V13M13 3V4M13 6V7M13 9V10M13 12V13`,
// Lighting - Light bulb
[]: `M8 1C5 1 4 4 4 6C4 8 5 9 6 10V12H10V10C11 9 12 8 12 6C12 4 11 1 8 1ZM6 13H10V14H6V13ZM7 14H9V15H7V14Z`,
// UI JSON - Window
[]: `M2 2H14V14H2V2ZM3 3V4H13V3H3ZM3 5V13H13V5H3ZM4 6H8V8H4V6ZM9 6H12V12H9V6ZM4 9H8V12H4V9Z`,
// World folder - Globe
[]: `M8 1A7 7 0 1 0 8 15A7 7 0 1 0 8 1ZM8 3C9 3 10 4 10.5 6H5.5C6 4 7 3 8 3ZM4 8C4 7.3 4.1 6.7 4.3 6H6C5.9 6.6 5.8 7.3 5.8 8C5.8 8.7 5.9 9.4 6 10H4.3C4.1 9.3 4 8.7 4 8ZM8 13C7 13 6 12 5.5 10H10.5C10 12 9 13 8 13ZM10 10C10.1 9.4 10.2 8.7 10.2 8C10.2 7.3 10.1 6.6 10 6H11.7C11.9 6.7 12 7.3 12 8C12 8.7 11.9 9.3 11.7 10H10Z`,
// Package JSON - NPM box
[]: `M2 4L8 1L14 4V12L8 15L2 12V4ZM3 5V11L8 13.5L13 11V5L8 2.5L3 5ZM5 6H11V10H9V7H7V10H5V6Z`,
};
/**
* Gets the specific SVG icon path for a project item type.
* Falls back to the group icon if no specific icon is defined.
*/
function getSpecificIconPathForProjectItemType(itemType) {
return exports.ProjectItemTypeSpecificIcons[itemType] || getIconPathForProjectItemType(itemType);
}