@minecraft/creator-tools 0.10.1 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (414) hide show
  1. package/app/Carto.js +33 -6
  2. package/app/CartoApp.js +1 -0
  3. package/app/IGalleryItem.js +7 -0
  4. package/app/IProjectItemData.js +11 -3
  5. package/app/IProjectItemVariant.js +1 -0
  6. package/app/IProjectItemVariantSeed.js +4 -0
  7. package/app/Project.js +213 -809
  8. package/app/ProjectAutogeneration.js +28 -27
  9. package/app/ProjectExporter.js +15 -12
  10. package/app/ProjectItem.js +163 -32
  11. package/app/{ProjectItemManager.js → ProjectItemCreateManager.js} +153 -46
  12. package/app/ProjectItemInference.js +709 -0
  13. package/app/ProjectItemRelations.js +32 -32
  14. package/app/ProjectItemUtilities.js +111 -10
  15. package/app/ProjectItemVariant.js +1 -1
  16. package/app/ProjectItemVariantCreateManager.js +72 -0
  17. package/app/ProjectStandard.js +6 -6
  18. package/app/ProjectUtilities.js +59 -57
  19. package/cli/ClUtils.js +2 -1
  20. package/cli/TaskWorker.js +9 -1
  21. package/cli/index.js +233 -141
  22. package/core/Constants.js +2 -1
  23. package/core/Utilities.js +24 -2
  24. package/data/content/index.json +4 -0
  25. package/data/content/newitemjson/aggregate_feature.json +9 -0
  26. package/data/content/newitemjson/atmospherics.json +79 -0
  27. package/data/content/newitemjson/attachable.json +18 -0
  28. package/data/content/newitemjson/biome.json +13 -0
  29. package/data/content/newitemjson/block_behavior.json +13 -0
  30. package/data/content/newitemjson/block_catalog.json +6 -0
  31. package/data/content/newitemjson/block_culling.json +9 -0
  32. package/data/content/newitemjson/cave_carver_feature.json +9 -0
  33. package/data/content/newitemjson/color_grading.json +34 -0
  34. package/data/content/newitemjson/entity_behavior.json +19 -0
  35. package/data/content/newitemjson/entity_resources.json +27 -0
  36. package/data/content/newitemjson/feature_rule.json +16 -0
  37. package/data/content/newitemjson/geode_feature.json +28 -0
  38. package/data/content/newitemjson/index.json +33 -0
  39. package/data/content/newitemjson/item_behavior.json +17 -0
  40. package/data/content/newitemjson/jigsaw_processor_list.json +8 -0
  41. package/data/content/newitemjson/jigsaw_structure.json +14 -0
  42. package/data/content/newitemjson/jigsaw_structure_set.json +21 -0
  43. package/data/content/newitemjson/jigsaw_template_pool.json +8 -0
  44. package/data/content/newitemjson/lighting.json +44 -0
  45. package/data/content/newitemjson/loot_table.json +1 -0
  46. package/data/content/newitemjson/pbr.json +9 -0
  47. package/data/content/newitemjson/point_lights.json +47 -0
  48. package/data/content/newitemjson/recipe_shaped.json +9 -0
  49. package/data/content/newitemjson/recipe_shapeless.json +9 -0
  50. package/data/content/newitemjson/render_controller.json +10 -0
  51. package/data/content/newitemjson/shadows.json +4 -0
  52. package/data/content/newitemjson/spawn_rule.json +9 -0
  53. package/data/content/newitemjson/water.json +22 -0
  54. package/data/forms/biome/biome_definition.form.json +663 -503
  55. package/data/forms/biome/biome_description.form.json +8 -2
  56. package/data/forms/biome/biome_json_file.form.json +685 -525
  57. package/data/forms/biome/biome_replacement.form.json +17 -11
  58. package/data/forms/biome/minecraft_capped_surface.form.json +60 -25
  59. package/data/forms/biome/minecraft_climate.form.json +15 -15
  60. package/data/forms/biome/minecraft_frozen_ocean_surface.form.json +96 -51
  61. package/data/forms/biome/minecraft_mesa_surface.form.json +142 -79
  62. package/data/forms/biome/minecraft_mountain_parameters.form.json +12 -8
  63. package/data/forms/biome/minecraft_multinoise_generation_rules.form.json +12 -12
  64. package/data/forms/biome/minecraft_overworld_generation_rules.form.json +20 -4
  65. package/data/forms/biome/minecraft_overworld_height.form.json +6 -6
  66. package/data/forms/biome/minecraft_replace_biomes.form.json +17 -11
  67. package/data/forms/biome/minecraft_surface_material_adjustments.form.json +84 -64
  68. package/data/forms/biome/minecraft_surface_parameters.form.json +96 -51
  69. package/data/forms/biome/minecraft_swamp_surface.form.json +96 -51
  70. package/data/forms/biome/minecraft_tags.form.json +1 -1
  71. package/data/forms/block/materialinstanceface.form.json +34 -0
  72. package/data/forms/block/minecraft_destructible_by_mining.form.json +3 -28
  73. package/data/forms/block/minecraft_destruction_particles.form.json +7 -0
  74. package/data/forms/block/minecraft_geometry.form.json +74 -0
  75. package/data/forms/block/minecraft_item_visual.form.json +1 -0
  76. package/data/forms/block/minecraft_liquid_detection.form.json +1 -0
  77. package/data/forms/block/minecraft_map_color.form.json +7 -6
  78. package/data/forms/block/minecraft_material_instances.form.json +45 -0
  79. package/data/forms/block/minecraft_replaceable.form.json +1 -0
  80. package/data/forms/client_biome/client_biome_definition.form.json +145 -139
  81. package/data/forms/client_biome/client_biome_description.form.json +7 -1
  82. package/data/forms/client_biome/client_biome_json_file.form.json +151 -145
  83. package/data/forms/client_biome/minecraft_ambient_sounds.form.json +1 -0
  84. package/data/forms/client_biome/minecraft_atmosphere_identifier.form.json +1 -1
  85. package/data/forms/client_biome/minecraft_biome_music.form.json +7 -6
  86. package/data/forms/client_biome/minecraft_color_grading_identifier.form.json +1 -1
  87. package/data/forms/client_biome/minecraft_lighting_identifier.form.json +1 -1
  88. package/data/forms/client_biome/minecraft_water_identifier.form.json +1 -1
  89. package/data/forms/client_block/block_culling.form.json +15 -10
  90. package/data/forms/clientbiome/index.json +1 -0
  91. package/data/forms/entity/entity_component_definitions.form.json +1860 -0
  92. package/data/forms/entity/entity_document.form.json +3748 -0
  93. package/data/forms/entity/filter_test.form.json +10 -10
  94. package/data/forms/entity/index.json +1 -1
  95. package/data/forms/entity/minecraft_addrider.form.json +1 -1
  96. package/data/forms/entity/minecraft_ageable.form.json +23 -0
  97. package/data/forms/entity/minecraft_ambient_sound_interval.form.json +24 -0
  98. package/data/forms/entity/minecraft_angry.form.json +1 -2
  99. package/data/forms/entity/minecraft_behavior_fire_at_target.form.json +1 -0
  100. package/data/forms/entity/minecraft_behavior_float.form.json +8 -0
  101. package/data/forms/entity/minecraft_behavior_float_tempt.form.json +157 -6
  102. package/data/forms/entity/minecraft_behavior_float_wander.form.json +108 -6
  103. package/data/forms/entity/minecraft_behavior_follow_caravan.form.json +10 -10
  104. package/data/forms/entity/minecraft_behavior_follow_mob.form.json +369 -3
  105. package/data/forms/entity/minecraft_behavior_hold_ground.form.json +24 -24
  106. package/data/forms/entity/minecraft_behavior_jump_around_target.form.json +1 -0
  107. package/data/forms/entity/minecraft_behavior_melee_box_attack.form.json +2 -2
  108. package/data/forms/entity/minecraft_behavior_move_around_target.form.json +1 -0
  109. package/data/forms/entity/minecraft_behavior_nearest_attackable_target.form.json +33 -8
  110. package/data/forms/entity/minecraft_behavior_offer_flower.form.json +2 -12
  111. package/data/forms/entity/minecraft_behavior_panic.form.json +15 -6
  112. package/data/forms/entity/minecraft_behavior_player_ride_tamed.form.json +17 -1
  113. package/data/forms/entity/minecraft_behavior_random_hover.form.json +22 -0
  114. package/data/forms/entity/minecraft_behavior_ranged_attack.form.json +2 -2
  115. package/data/forms/entity/minecraft_behavior_summon_entity.form.json +1 -0
  116. package/data/forms/entity/minecraft_behavior_tempt.form.json +40 -0
  117. package/data/forms/entity/minecraft_body_rotation_always_follows_head.form.json +14 -0
  118. package/data/forms/entity/minecraft_body_rotation_axis_aligned.form.json +8 -0
  119. package/data/forms/entity/minecraft_body_rotation_blocked.form.json +6 -0
  120. package/data/forms/entity/minecraft_boostable.form.json +9 -4
  121. package/data/forms/entity/minecraft_breathable.form.json +30 -0
  122. package/data/forms/entity/minecraft_breedable.form.json +45 -18
  123. package/data/forms/entity/minecraft_can_fly.form.json +6 -0
  124. package/data/forms/entity/minecraft_cannot_be_attacked.form.json +1 -0
  125. package/data/forms/entity/minecraft_collision_box.form.json +40 -28
  126. package/data/forms/entity/minecraft_conditional_bandwidth_optimization.form.json +6 -0
  127. package/data/forms/entity/minecraft_damage_sensor.form.json +37 -23
  128. package/data/forms/entity/minecraft_despawn.form.json +8 -0
  129. package/data/forms/entity/minecraft_entity_sensor.form.json +140 -20
  130. package/data/forms/entity/minecraft_equipment.form.json +24 -0
  131. package/data/forms/entity/minecraft_explode.form.json +110 -104
  132. package/data/forms/entity/minecraft_flying_speed.form.json +30 -0
  133. package/data/forms/entity/minecraft_follow_range.form.json +9 -0
  134. package/data/forms/entity/minecraft_home.form.json +57 -23
  135. package/data/forms/entity/minecraft_hurt_on_condition.form.json +28 -36
  136. package/data/forms/entity/minecraft_ignore_cannot_be_attacked.form.json +1 -0
  137. package/data/forms/entity/minecraft_input_air_controlled.form.json +31 -3
  138. package/data/forms/entity/minecraft_interact.form.json +862 -248
  139. package/data/forms/entity/minecraft_is_baby.form.json +32 -6
  140. package/data/forms/entity/minecraft_is_collidable.form.json +6 -0
  141. package/data/forms/entity/minecraft_is_hidden_when_invisible.form.json +6 -0
  142. package/data/forms/entity/minecraft_is_tamed.form.json +6 -0
  143. package/data/forms/entity/minecraft_jump_static.form.json +6 -0
  144. package/data/forms/entity/minecraft_knockback_resistance.form.json +14 -0
  145. package/data/forms/entity/minecraft_leashable.form.json +229 -214
  146. package/data/forms/entity/minecraft_leashable_to.form.json +244 -0
  147. package/data/forms/entity/minecraft_movement.form.json +26 -0
  148. package/data/forms/entity/minecraft_movement_hover.form.json +6 -0
  149. package/data/forms/entity/minecraft_nameable.form.json +6 -0
  150. package/data/forms/entity/minecraft_navigation_float.form.json +28 -2
  151. package/data/forms/entity/minecraft_navigation_hover.form.json +11 -0
  152. package/data/forms/entity/minecraft_physics.form.json +8 -0
  153. package/data/forms/entity/minecraft_pushable.form.json +37 -0
  154. package/data/forms/entity/minecraft_remove_in_peaceful.form.json +212 -0
  155. package/data/forms/entity/minecraft_rideable.form.json +302 -300
  156. package/data/forms/entity/minecraft_scale.form.json +38 -0
  157. package/data/forms/entity/minecraft_transient.form.json +1 -0
  158. package/data/forms/entity/minecraft_type_family.form.json +20 -0
  159. package/data/forms/entityevents/emit_particle.form.json +1 -0
  160. package/data/forms/entityevents/play_sound.form.json +1 -0
  161. package/data/forms/entityfilters/bool_property.form.json +37 -1
  162. package/data/forms/entityfilters/has_equipment.form.json +28 -4
  163. package/data/forms/entityfilters/in_caravan.form.json +14 -3
  164. package/data/forms/entityfilters/in_contact_with_water.form.json +1 -3
  165. package/data/forms/entityfilters/in_lava.form.json +22 -34
  166. package/data/forms/entityfilters/index.json +1 -1
  167. package/data/forms/entityfilters/is_daytime.form.json +8 -0
  168. package/data/forms/entityfilters/is_family.form.json +40 -26
  169. package/data/forms/entityfilters/is_riding_self.form.json +129 -0
  170. package/data/forms/entityfilters/rider_count.form.json +56 -13
  171. package/data/forms/index.json +1 -1
  172. package/data/forms/item/90.form.json +1486 -0
  173. package/data/forms/item/index.json +1 -1
  174. package/data/forms/item/minecraft_block_placer.form.json +13 -12
  175. package/data/forms/item/minecraft_bundle_interaction.form.json +1 -0
  176. package/data/forms/item/minecraft_compostable.form.json +1 -0
  177. package/data/forms/item/minecraft_digger.form.json +11 -11
  178. package/data/forms/item/minecraft_durability.form.json +4 -4
  179. package/data/forms/item/minecraft_dyeable.form.json +1 -0
  180. package/data/forms/item/minecraft_enchantable.form.json +20 -20
  181. package/data/forms/item/minecraft_entity_placer.form.json +10 -10
  182. package/data/forms/item/minecraft_food.form.json +25 -20
  183. package/data/forms/item/minecraft_icon.form.json +23 -6
  184. package/data/forms/item/minecraft_item.form.json +102 -17
  185. package/data/forms/item/minecraft_rarity.form.json +1 -0
  186. package/data/forms/item/minecraft_record.form.json +10 -10
  187. package/data/forms/item/minecraft_shooter.form.json +12 -12
  188. package/data/forms/item/minecraft_storage_item.form.json +35 -34
  189. package/data/forms/item/minecraft_throwable.form.json +18 -18
  190. package/data/forms/item/minecraft_use_modifiers.form.json +22 -14
  191. package/data/forms/item/minecraft_wearable.form.json +6 -6
  192. package/data/forms/misc/biome_replacement.form.json +17 -11
  193. package/data/forms/misc/bounds.form.json +4 -4
  194. package/data/forms/misc/class_v1_21_80_jigsawblockmetadata.form.json +24 -24
  195. package/data/forms/misc/crafting_catalog_category.form.json +12 -12
  196. package/data/forms/misc/crafting_catalog_document.form.json +12 -12
  197. package/data/forms/misc/crafting_catalog_group.form.json +12 -12
  198. package/data/forms/misc/crafting_catalog_group_icon.form.json +12 -12
  199. package/data/forms/misc/dimension.form.json +20 -20
  200. package/data/forms/misc/dimensiondocument.form.json +20 -20
  201. package/data/forms/misc/emitter_lifetime_events_proxy.form.json +32 -32
  202. package/data/forms/misc/emitter_local_space_proxy.form.json +4 -4
  203. package/data/forms/misc/emitter_rate_steady.form.json +12 -12
  204. package/data/forms/misc/emitter_shape_box.form.json +34 -34
  205. package/data/forms/misc/emitter_shape_custom.form.json +12 -12
  206. package/data/forms/misc/emitter_shape_disc.form.json +45 -45
  207. package/data/forms/misc/emitter_shape_entity_aabb.form.json +5 -5
  208. package/data/forms/misc/emitter_shape_point.form.json +12 -12
  209. package/data/forms/misc/emitter_shape_sphere.form.json +34 -34
  210. package/data/forms/misc/minecraft_aim_assist_categories.form.json +16 -16
  211. package/data/forms/misc/minecraft_aim_assist_preset.form.json +21 -21
  212. package/data/forms/misc/minecraft_dimension_bounds.form.json +5 -4
  213. package/data/forms/misc/particle_appearance_billboard.form.json +10 -10
  214. package/data/forms/misc/particle_appearance_billboard_flipbook_data.form.json +16 -16
  215. package/data/forms/misc/particle_curve_bezier_chain.form.json +16 -16
  216. package/data/forms/misc/particle_curve_bezier_chain_node_proxy.form.json +9 -9
  217. package/data/forms/misc/particle_curve_linear.form.json +17 -17
  218. package/data/forms/misc/particle_effect.form.json +850 -850
  219. package/data/forms/misc/particle_effect_basic_render_parameters.form.json +1 -1
  220. package/data/forms/misc/particle_effect_component.form.json +589 -589
  221. package/data/forms/misc/particle_effect_description.form.json +6 -6
  222. package/data/forms/misc/particle_event_node.form.json +148 -148
  223. package/data/forms/misc/particle_event_random_node.form.json +183 -183
  224. package/data/forms/misc/particle_initialization.form.json +12 -12
  225. package/data/forms/misc/particle_lifetime_expression.form.json +12 -12
  226. package/data/forms/misc/particle_motion_collision.form.json +36 -36
  227. package/data/forms/misc/particle_motion_collision_event.form.json +5 -5
  228. package/data/forms/misc/particle_motion_parametric.form.json +12 -12
  229. package/data/forms/spawn/filter_test.form.json +10 -10
  230. package/data/forms/visual/index.json +1 -1
  231. package/data/forms/visual/texture_set.v1.21.30.form.json +57 -0
  232. package/data/forms/world/feature_rule_conditions.form.json +31 -31
  233. package/data/forms/world/feature_rule_definition.form.json +126 -126
  234. package/data/forms/world/filter_test.form.json +10 -10
  235. package/data/forms/world/jigsawstructure.form.json +82 -76
  236. package/data/forms/world/scatter_params.form.json +71 -71
  237. package/data/gallery.json +206 -0
  238. package/data/mci/minecraft-samples-main.mci.json +1 -1
  239. package/data/mci/preview.mci.json +1 -1
  240. package/data/mci/release.mci.json +1 -1
  241. package/data/typedefs.beta.json +6832 -4416
  242. package/dataform/DataFormUtilities.js +26 -0
  243. package/dataform/IField.js +1 -0
  244. package/devproject/EnvSettings.js +1 -1
  245. package/devproject/NpmModule.js +1 -1
  246. package/docgen/FormDefinitionTypeScriptGenerator.js +2 -0
  247. package/docgen/FormJsonDocumentationGenerator.js +193 -91
  248. package/docgen/FormMarkdownDocumentationGenerator.js +31 -2
  249. package/docgen/JsonSchemaGenerator.js +2 -1
  250. package/github/GitHubFile.js +2 -2
  251. package/info/AnimationResourceInfoGenerator.js +2 -2
  252. package/info/CooperativeAddOnItemRequirementsGenerator.js +51 -51
  253. package/info/CooperativeAddOnRequirementsGenerator.js +46 -39
  254. package/info/GeneratorRegistrations.js +11 -1
  255. package/info/GeometryInfoGenerator.js +3 -3
  256. package/info/PackInfoGenerator.js +9 -8
  257. package/info/SchemaItemInfoGenerator.js +5 -5
  258. package/info/SharingInfoGenerator.js +17 -5
  259. package/info/StrictPlatformInfoGenerator.js +4 -4
  260. package/info/TextureImageInfoGenerator.js +10 -9
  261. package/info/TextureInfoGenerator.js +19 -19
  262. package/info/TextureReferenceInfoGenerator.js +6 -6
  263. package/info/TypesInfoGenerator.js +8 -8
  264. package/info/UnknownItemGenerator.js +2 -2
  265. package/info/WorldDataInfoGenerator.js +6 -6
  266. package/info/fileGenerators/CheckNoBOMGenerator.js +46 -0
  267. package/info/projectGenerators/CheckPackIconsGenerator.js +83 -0
  268. package/info/projectGenerators/CheckWorldIconsGenerator.js +93 -0
  269. package/integrations/BlockbenchModel.js +271 -72
  270. package/local/LocalEnvironment.js +4 -4
  271. package/manager/BaseGameVersionManager.js +4 -4
  272. package/manager/BlocksCatalogManager.js +4 -4
  273. package/manager/EntityTypeManager.js +4 -4
  274. package/manager/FormatVersionManager.js +24 -24
  275. package/manager/ItemTypeManager.js +4 -4
  276. package/manager/MinEngineVersionManager.js +14 -14
  277. package/manager/ScriptModuleManager.js +6 -6
  278. package/manager/VsCodeFileManager.js +10 -10
  279. package/maps/app/Carto.js.map +1 -1
  280. package/maps/app/CartoApp.js.map +1 -1
  281. package/maps/app/ICartoData.js.map +1 -1
  282. package/maps/app/IGalleryItem.js.map +1 -1
  283. package/maps/app/IProjectItemData.js.map +1 -1
  284. package/maps/app/IProjectItemSeed.js.map +1 -1
  285. package/maps/app/IProjectItemVariant.js.map +1 -1
  286. package/maps/app/IProjectItemVariantSeed.js.map +1 -0
  287. package/maps/app/Project.js.map +1 -1
  288. package/maps/app/ProjectAutogeneration.js.map +1 -1
  289. package/maps/app/ProjectExporter.js.map +1 -1
  290. package/maps/app/ProjectItem.js.map +1 -1
  291. package/maps/app/ProjectItemCreateManager.js.map +1 -0
  292. package/maps/app/ProjectItemInference.js.map +1 -0
  293. package/maps/app/ProjectItemRelations.js.map +1 -1
  294. package/maps/app/ProjectItemUtilities.js.map +1 -1
  295. package/maps/app/ProjectItemVariant.js.map +1 -1
  296. package/maps/app/ProjectItemVariantCreateManager.js.map +1 -0
  297. package/maps/app/ProjectStandard.js.map +1 -1
  298. package/maps/app/ProjectUtilities.js.map +1 -1
  299. package/maps/cli/ClUtils.js.map +1 -1
  300. package/maps/cli/TaskWorker.js.map +1 -1
  301. package/maps/cli/index.js.map +1 -1
  302. package/maps/core/Constants.js.map +1 -1
  303. package/maps/core/ISimpleReference.js.map +1 -1
  304. package/maps/core/Utilities.js.map +1 -1
  305. package/maps/dataform/DataFormUtilities.js.map +1 -1
  306. package/maps/dataform/IField.js.map +1 -1
  307. package/maps/dataform/IFormDefinition.js.map +1 -1
  308. package/maps/devproject/EnvSettings.js.map +1 -1
  309. package/maps/devproject/NpmModule.js.map +1 -1
  310. package/maps/docgen/FormDefinitionTypeScriptGenerator.js.map +1 -1
  311. package/maps/docgen/FormJsonDocumentationGenerator.js.map +1 -1
  312. package/maps/docgen/FormMarkdownDocumentationGenerator.js.map +1 -1
  313. package/maps/docgen/JsonSchemaGenerator.js.map +1 -1
  314. package/maps/github/GitHubFile.js.map +1 -1
  315. package/maps/info/AnimationResourceInfoGenerator.js.map +1 -1
  316. package/maps/info/CooperativeAddOnItemRequirementsGenerator.js.map +1 -1
  317. package/maps/info/CooperativeAddOnRequirementsGenerator.js.map +1 -1
  318. package/maps/info/GeneratorRegistrations.js.map +1 -1
  319. package/maps/info/GeometryInfoGenerator.js.map +1 -1
  320. package/maps/info/PackInfoGenerator.js.map +1 -1
  321. package/maps/info/SchemaItemInfoGenerator.js.map +1 -1
  322. package/maps/info/SharingInfoGenerator.js.map +1 -1
  323. package/maps/info/StrictPlatformInfoGenerator.js.map +1 -1
  324. package/maps/info/TextureImageInfoGenerator.js.map +1 -1
  325. package/maps/info/TextureInfoGenerator.js.map +1 -1
  326. package/maps/info/TextureReferenceInfoGenerator.js.map +1 -1
  327. package/maps/info/TypesInfoGenerator.js.map +1 -1
  328. package/maps/info/UnknownItemGenerator.js.map +1 -1
  329. package/maps/info/WorldDataInfoGenerator.js.map +1 -1
  330. package/maps/info/fileGenerators/CheckNoBOMGenerator.js.map +1 -0
  331. package/maps/info/projectGenerators/CheckPackIconsGenerator.js.map +1 -0
  332. package/maps/info/projectGenerators/CheckWorldIconsGenerator.js.map +1 -0
  333. package/maps/integrations/BlockbenchModel.js.map +1 -1
  334. package/maps/integrations/IBlockbenchModel.js.map +1 -1
  335. package/maps/local/ILocalEnvironmentData.js.map +1 -1
  336. package/maps/local/LocalEnvironment.js.map +1 -1
  337. package/maps/manager/BaseGameVersionManager.js.map +1 -1
  338. package/maps/manager/BlocksCatalogManager.js.map +1 -1
  339. package/maps/manager/EntityTypeManager.js.map +1 -1
  340. package/maps/manager/FormatVersionManager.js.map +1 -1
  341. package/maps/manager/ItemTypeManager.js.map +1 -1
  342. package/maps/manager/MinEngineVersionManager.js.map +1 -1
  343. package/maps/manager/ScriptModuleManager.js.map +1 -1
  344. package/maps/manager/VsCodeFileManager.js.map +1 -1
  345. package/maps/minecraft/AnimationResourceDefinition.js.map +1 -1
  346. package/maps/minecraft/AttachableResourceDefinition.js.map +1 -1
  347. package/maps/minecraft/AudioDefinition.js.map +1 -1
  348. package/maps/minecraft/BehaviorManifestDefinition.js.map +1 -1
  349. package/maps/minecraft/BlockTypeDefinition.js.map +1 -1
  350. package/maps/minecraft/BlocksCatalogDefinition.js.map +1 -1
  351. package/maps/minecraft/Database.js.map +1 -1
  352. package/maps/minecraft/EntityTypeDefinition.js.map +1 -1
  353. package/maps/minecraft/EntityTypeResourceDefinition.js.map +1 -1
  354. package/maps/minecraft/FlipbookTextureCatalogDefinition.js.map +1 -1
  355. package/maps/minecraft/IAnimationResource.js.map +1 -1
  356. package/maps/minecraft/IEntityTypeResource.js.map +1 -1
  357. package/maps/minecraft/ItemTextureCatalogDefinition.js.map +1 -1
  358. package/maps/minecraft/ItemTypeDefinition.js.map +1 -1
  359. package/maps/minecraft/JsonUIResourceDefinition.js.map +1 -1
  360. package/maps/minecraft/LocManager.js.map +1 -1
  361. package/maps/minecraft/MCWorld.js.map +1 -1
  362. package/maps/minecraft/ManagedComponentGroup.js.map +1 -1
  363. package/maps/minecraft/ManagedPermutation.js.map +1 -1
  364. package/maps/minecraft/MinecraftDefinitions.js.map +1 -1
  365. package/maps/minecraft/MinecraftUtilities.js.map +1 -1
  366. package/maps/minecraft/MusicDefinitionCatalogDefinition.js.map +1 -1
  367. package/maps/minecraft/Pack.js.map +1 -1
  368. package/maps/minecraft/ParticleEffectResourceDefinition.js.map +1 -1
  369. package/maps/minecraft/ResourceManifestDefinition.js.map +1 -1
  370. package/maps/minecraft/SoundCatalogDefinition.js.map +1 -1
  371. package/maps/minecraft/SoundDefinitionCatalogDefinition.js.map +1 -1
  372. package/maps/minecraft/TerrainTextureCatalogDefinition.js.map +1 -1
  373. package/maps/storage/FileBase.js.map +1 -1
  374. package/maps/storage/FileSystemFolder.js.map +1 -1
  375. package/maps/storage/FolderBase.js.map +1 -1
  376. package/maps/storage/IFile.js.map +1 -1
  377. package/maps/storage/IFolder.js.map +1 -1
  378. package/maps/storage/ImageUtilites.js.map +1 -0
  379. package/maps/storage/StorageUtilities.js.map +1 -1
  380. package/maps/test/CommandLineTest.js.map +1 -1
  381. package/minecraft/AnimationResourceDefinition.js +13 -2
  382. package/minecraft/AttachableResourceDefinition.js +10 -10
  383. package/minecraft/AudioDefinition.js +2 -2
  384. package/minecraft/BehaviorManifestDefinition.js +6 -6
  385. package/minecraft/BlockTypeDefinition.js +10 -10
  386. package/minecraft/BlocksCatalogDefinition.js +2 -2
  387. package/minecraft/Database.js +38 -12
  388. package/minecraft/EntityTypeDefinition.js +21 -11
  389. package/minecraft/EntityTypeResourceDefinition.js +65 -15
  390. package/minecraft/FlipbookTextureCatalogDefinition.js +4 -4
  391. package/minecraft/ItemTextureCatalogDefinition.js +2 -2
  392. package/minecraft/ItemTypeDefinition.js +4 -4
  393. package/minecraft/JsonUIResourceDefinition.js +2 -2
  394. package/minecraft/LocManager.js +2 -2
  395. package/minecraft/MCWorld.js +2 -2
  396. package/minecraft/ManagedComponentGroup.js +3 -0
  397. package/minecraft/ManagedPermutation.js +3 -0
  398. package/minecraft/MinecraftDefinitions.js +23 -23
  399. package/minecraft/MinecraftUtilities.js +27 -0
  400. package/minecraft/MusicDefinitionCatalogDefinition.js +2 -2
  401. package/minecraft/Pack.js +15 -0
  402. package/minecraft/ParticleEffectResourceDefinition.js +4 -4
  403. package/minecraft/ResourceManifestDefinition.js +3 -3
  404. package/minecraft/SoundCatalogDefinition.js +4 -4
  405. package/minecraft/SoundDefinitionCatalogDefinition.js +4 -4
  406. package/minecraft/TerrainTextureCatalogDefinition.js +2 -2
  407. package/package.json +1 -1
  408. package/storage/FileBase.js +3 -0
  409. package/storage/FileSystemFolder.js +2 -1
  410. package/storage/FolderBase.js +9 -0
  411. package/storage/ImageUtilites.js +35 -0
  412. package/storage/StorageUtilities.js +52 -2
  413. package/test/CommandLineTest.js +141 -1
  414. package/maps/app/ProjectItemManager.js.map +0 -1
@@ -0,0 +1,709 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const Log_1 = require("../core/Log");
4
+ const Utilities_1 = require("../core/Utilities");
5
+ const MinecraftUtilities_1 = require("../minecraft/MinecraftUtilities");
6
+ const Pack_1 = require("../minecraft/Pack");
7
+ const StorageUtilities_1 = require("../storage/StorageUtilities");
8
+ const IProjectData_1 = require("./IProjectData");
9
+ const IProjectItemData_1 = require("./IProjectItemData");
10
+ const Project_1 = require("./Project");
11
+ class ProjectItemInference {
12
+ static async inferProjectItemsFromFolder(project, folder, fileSystemPrefix, folderContext, variantLabel, isInWorld, rootFolder, depth, source, force, processingCallback) {
13
+ if (project.projectFolder === null ||
14
+ (folder.name.startsWith(".") && !folder.name.startsWith(".vscode") && !folder.name.startsWith(".mct"))) {
15
+ Log_1.default.debugAlert("Could not process folder: " + folder.storageRelativePath);
16
+ return;
17
+ }
18
+ if (processingCallback) {
19
+ processingCallback("Scanning `" + folder.storageRelativePath + "` for Minecraft project items.");
20
+ }
21
+ await folder.load(force ? force : false);
22
+ let parentFolder = folder.parentFolder;
23
+ if (parentFolder === project.projectFolder.parentFolder) {
24
+ parentFolder = null;
25
+ }
26
+ const folderPathCanon = StorageUtilities_1.default.canonicalizePath(StorageUtilities_1.default.getFolderPath(folder.storageRelativePath));
27
+ const parentIsPacksRoot = parentFolder !== null &&
28
+ parentFolder.name.indexOf("_packs") >= 0 &&
29
+ (folderContext === Project_1.FolderContext.behaviorPack ||
30
+ folderContext === Project_1.FolderContext.resourcePack ||
31
+ folderContext === Project_1.FolderContext.skinPack);
32
+ const lastUnderscore = folder.storageRelativePath.lastIndexOf("_");
33
+ if (!variantLabel && lastUnderscore >= 0 && parentIsPacksRoot) {
34
+ // vanilla stores folders like:
35
+ // chemistry
36
+ // chemistry_1.20.50
37
+ // chemistry_1.20.60
38
+ // unify version variants with their parent
39
+ let potentialVersionSection = folder.storageRelativePath.substring(lastUnderscore + 1);
40
+ if (potentialVersionSection.endsWith("/")) {
41
+ potentialVersionSection = potentialVersionSection.substring(0, potentialVersionSection.length - 1);
42
+ }
43
+ if (Utilities_1.default.isNumericIsh(potentialVersionSection) && potentialVersionSection.indexOf(".") > 0) {
44
+ variantLabel = potentialVersionSection;
45
+ }
46
+ }
47
+ if (folderPathCanon.indexOf("/checkpoint_input") >= 0 ||
48
+ folderPathCanon.indexOf("/metadata") >= 0 ||
49
+ folderPathCanon.indexOf("/type_definitions") >= 0 ||
50
+ folderPathCanon.indexOf("/typedefs") >= 0 ||
51
+ folderPathCanon.indexOf("/script_modules/") >= 0 ||
52
+ folderPathCanon.indexOf("/vanilladata_modules/") >= 0 ||
53
+ folderPathCanon.indexOf("/engine_modules/") >= 0 ||
54
+ folderPathCanon.indexOf("/command_modules/") >= 0) {
55
+ folderContext = Project_1.FolderContext.typeDefs;
56
+ }
57
+ else if (folderPathCanon.indexOf("/data/") >= 0 || folderPathCanon.indexOf("/forms/") >= 0) {
58
+ folderContext = Project_1.FolderContext.metaData;
59
+ }
60
+ else if (folderPathCanon.indexOf("/.vscode") >= 0) {
61
+ folderContext = Project_1.FolderContext.vscodeFolder;
62
+ }
63
+ else if (folderPathCanon.indexOf("/.mct") >= 0) {
64
+ folderContext = Project_1.FolderContext.mctoolsWorkingFolder;
65
+ }
66
+ else if (MinecraftUtilities_1.default.pathLooksLikeBehaviorPackName(folderPathCanon)) {
67
+ folderContext = Project_1.FolderContext.behaviorPack;
68
+ }
69
+ else if (MinecraftUtilities_1.default.pathLooksLikeSubPacksFolderName(folderPathCanon)) {
70
+ // note this check must be above the .resourcePack check
71
+ folderContext = Project_1.FolderContext.resourcePackSubPack;
72
+ }
73
+ else if (MinecraftUtilities_1.default.pathLooksLikeResourcePackName(folderPathCanon)) {
74
+ folderContext = Project_1.FolderContext.resourcePack;
75
+ }
76
+ else if (MinecraftUtilities_1.default.pathLooksLikeSkinPackName(folderPathCanon) &&
77
+ folderContext === Project_1.FolderContext.unknown) {
78
+ folderContext = Project_1.FolderContext.skinPack;
79
+ }
80
+ else if (MinecraftUtilities_1.default.pathLooksLikePersonaPackName(folderPathCanon) &&
81
+ folderContext === Project_1.FolderContext.unknown) {
82
+ folderContext = Project_1.FolderContext.persona;
83
+ }
84
+ else if (MinecraftUtilities_1.default.pathLooksLikeWorldFolderName(folderPathCanon) &&
85
+ folderContext === Project_1.FolderContext.unknown) {
86
+ folderContext = Project_1.FolderContext.world;
87
+ isInWorld = true;
88
+ }
89
+ else if ((folderPathCanon.indexOf("/docs/") >= 0 ||
90
+ folderPathCanon.indexOf("/@minecraft/") >= 0 ||
91
+ folderPathCanon.indexOf("/mojang-commands") >= 0) &&
92
+ folderContext === Project_1.FolderContext.unknown) {
93
+ folderContext = Project_1.FolderContext.docs;
94
+ if (project.docsContainer === null) {
95
+ project.docsContainer = folder.parentFolder;
96
+ }
97
+ }
98
+ if (folderContext === Project_1.FolderContext.unknown &&
99
+ (folder.files["manifest.json"] || folder.files["pack_manifest.json"]) &&
100
+ !folder.files["level.dat"] &&
101
+ !folder.files["levelname.txt"]) {
102
+ for (const folderName in folder.folders) {
103
+ if (folderName) {
104
+ if (folderName.toLowerCase() === "persona" || folderName.toLowerCase().startsWith("persona_")) {
105
+ folderContext = Project_1.FolderContext.persona;
106
+ }
107
+ }
108
+ }
109
+ }
110
+ if (folderContext === Project_1.FolderContext.unknown &&
111
+ (folder.files["manifest.json"] || folder.files["pack_manifest.json"]) &&
112
+ !folder.files["level.dat"] &&
113
+ !folder.files["levelname.txt"]) {
114
+ if (folder.folders["models"] ||
115
+ folder.folders["textures"] ||
116
+ folder.folders["lighting"] ||
117
+ folder.folders["subpacks"] ||
118
+ folder.folders["assets"] ||
119
+ folder.folders["sounds"] ||
120
+ folder.folders["texture_sets"] ||
121
+ folder.folders["sounds"] ||
122
+ folder.folders["ui"]) {
123
+ folderContext = Project_1.FolderContext.resourcePack;
124
+ }
125
+ else if (folder.fullPath.indexOf("/rp/") >= 0 ||
126
+ folder.fullPath.indexOf(" rp/") >= 0 ||
127
+ folder.fullPath.indexOf("/rp ") >= 0 ||
128
+ folder.fullPath.indexOf("esource") >= 0) {
129
+ folderContext = Project_1.FolderContext.resourcePack;
130
+ }
131
+ else {
132
+ folderContext = Project_1.FolderContext.behaviorPack;
133
+ }
134
+ }
135
+ if (folder.files["world_behavior_packs.json"] ||
136
+ folder.files["world_resource_packs.json"] ||
137
+ folder.files["levelname.txt"]) {
138
+ if (folderContext === Project_1.FolderContext.unknown) {
139
+ folderContext = Project_1.FolderContext.world;
140
+ }
141
+ if (folder.parentFolder && !project.worldContainer) {
142
+ project.worldContainer = folder.parentFolder;
143
+ }
144
+ }
145
+ for (const fileName in folder.files) {
146
+ const canonFileName = StorageUtilities_1.default.canonicalizeName(fileName);
147
+ // console.log("Considering " + canonFileName + " in folder " + folder.storageRelativePath);
148
+ if (canonFileName !== "gulpfile.js" && canonFileName !== "package-lock.json") {
149
+ const candidateFile = folder.files[fileName];
150
+ if (candidateFile !== undefined) {
151
+ let pi = null;
152
+ let projectPath = undefined;
153
+ if (fileSystemPrefix.length > 0) {
154
+ projectPath = fileSystemPrefix + candidateFile.fullPath;
155
+ pi = project.getItemByProjectPath(projectPath);
156
+ }
157
+ else {
158
+ const frPath = candidateFile.getFolderRelativePath(rootFolder);
159
+ if (frPath !== undefined) {
160
+ projectPath = StorageUtilities_1.default.canonicalizePath(frPath);
161
+ pi = project.getItemByProjectPath(projectPath);
162
+ }
163
+ }
164
+ if ((pi === undefined || pi === null) && projectPath !== undefined) {
165
+ const fileExtension = candidateFile.type ? candidateFile.type.toLowerCase() : candidateFile.type;
166
+ const baseName = StorageUtilities_1.default.getBaseFromName(candidateFile.name);
167
+ const folderPath = StorageUtilities_1.default.canonicalizePath(StorageUtilities_1.default.getFolderPath(projectPath));
168
+ const folderPathLower = folderPath.toLowerCase();
169
+ const projectPathLower = projectPath.toLowerCase();
170
+ const isResourcePack = folderContext === Project_1.FolderContext.resourcePack || folderContext === Project_1.FolderContext.resourcePackSubPack;
171
+ if (canonFileName === "manifest.json" || canonFileName === "pack_manifest.json") {
172
+ if (folderContext === Project_1.FolderContext.world) {
173
+ project.defaultWorldFolder = folder;
174
+ project.worldContainer = parentFolder;
175
+ }
176
+ await candidateFile.loadContent(false);
177
+ if (candidateFile.content !== undefined &&
178
+ candidateFile.content !== "" &&
179
+ !variantLabel &&
180
+ typeof candidateFile.content === "string") {
181
+ try {
182
+ const manifest = JSON.parse(candidateFile.content);
183
+ if (manifest.header.uuid !== undefined) {
184
+ if (folderContext === Project_1.FolderContext.behaviorPack) {
185
+ project.defaultBehaviorPackUniqueId = manifest.header.uuid;
186
+ project.defaultBehaviorPackVersion = manifest.header.version;
187
+ project.defaultBehaviorPackFolder = folder;
188
+ project.behaviorPacksContainer = parentFolder;
189
+ project.ensurePackByFolder(folder, Pack_1.PackType.behavior);
190
+ }
191
+ else if (folderContext === Project_1.FolderContext.resourcePack) {
192
+ project.defaultResourcePackUniqueId = manifest.header.uuid;
193
+ project.defaultResourcePackVersion = manifest.header.version;
194
+ project.defaultResourcePackFolder = folder;
195
+ project.resourcePacksContainer = parentFolder;
196
+ project.ensurePackByFolder(folder, Pack_1.PackType.resource);
197
+ }
198
+ }
199
+ if (manifest.modules) {
200
+ for (let i = 0; i < manifest.modules.length; i++) {
201
+ const mod = manifest.modules[i];
202
+ if (mod.type === "script") {
203
+ project.defaultScriptModuleUniqueId = mod.uuid;
204
+ }
205
+ }
206
+ }
207
+ if (manifest.header.description !== undefined) {
208
+ project.description = manifest.header.description;
209
+ }
210
+ if (manifest.header.name !== undefined) {
211
+ project.title = manifest.header.name;
212
+ }
213
+ if (manifest.header.version !== undefined &&
214
+ manifest.header.version.length === 3 &&
215
+ folderContext === Project_1.FolderContext.behaviorPack) {
216
+ project.versionMajor = manifest.header.version[0];
217
+ project.versionMinor = manifest.header.version[1];
218
+ project.versionPatch = manifest.header.version[2];
219
+ }
220
+ }
221
+ catch (e) { }
222
+ }
223
+ let newPiType = IProjectItemData_1.ProjectItemType.unknown;
224
+ let tag = "";
225
+ if (folderContext === Project_1.FolderContext.behaviorPack) {
226
+ newPiType = IProjectItemData_1.ProjectItemType.behaviorPackManifestJson;
227
+ tag = "behaviorpackmanifest";
228
+ }
229
+ else if (folderContext === Project_1.FolderContext.resourcePack) {
230
+ newPiType = IProjectItemData_1.ProjectItemType.resourcePackManifestJson;
231
+ tag = "resourcepackmanifest";
232
+ }
233
+ else if (folderContext === Project_1.FolderContext.skinPack) {
234
+ newPiType = IProjectItemData_1.ProjectItemType.skinPackManifestJson;
235
+ tag = "skinpackmanifest";
236
+ }
237
+ else if (folderContext === Project_1.FolderContext.persona) {
238
+ newPiType = IProjectItemData_1.ProjectItemType.personaManifestJson;
239
+ tag = "personapackmanifest";
240
+ }
241
+ else if (folderContext === Project_1.FolderContext.world) {
242
+ newPiType = IProjectItemData_1.ProjectItemType.worldTemplateManifestJson;
243
+ tag = "worldtemplatemanifest";
244
+ }
245
+ // Log.assert(newPiType !== ProjectItemType.unknown, "Unknown manifest.json file found.");
246
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, newPiType, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, tag, isInWorld);
247
+ }
248
+ else if (projectPathLower.endsWith("/scripts/index.js")) {
249
+ await candidateFile.loadContent();
250
+ let creationType = IProjectItemData_1.ProjectItemCreationType.normal;
251
+ if (candidateFile.content === undefined ||
252
+ candidateFile.content === "" ||
253
+ (typeof candidateFile.content === "string" &&
254
+ candidateFile.content.indexOf(Project_1.AUTOGENERATED_CONTENT_TOKEN) >= 0)) {
255
+ creationType = IProjectItemData_1.ProjectItemCreationType.generated;
256
+ }
257
+ project.ensureItemByTag("jsindex", "index.js", IProjectItemData_1.ProjectItemType.catalogIndexJs, projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, creationType, candidateFile, isInWorld);
258
+ }
259
+ else if (projectPathLower.endsWith(".mctp.json") &&
260
+ folderContext === Project_1.FolderContext.mctoolsWorkingFolder) {
261
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.mcToolsProjectPreferences, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
262
+ }
263
+ else if (projectPathLower.endsWith("tasks.json") && folderContext === Project_1.FolderContext.vscodeFolder) {
264
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.vsCodeTasksJson, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
265
+ }
266
+ else if (projectPathLower.endsWith("launch.json") && folderContext === Project_1.FolderContext.vscodeFolder) {
267
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.vsCodeLaunchJson, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
268
+ }
269
+ else if (projectPathLower.endsWith("settings.json") && folderContext === Project_1.FolderContext.vscodeFolder) {
270
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.vsCodeSettingsJson, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
271
+ }
272
+ else if (projectPathLower.endsWith("extensions.json") && folderContext === Project_1.FolderContext.vscodeFolder) {
273
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.vsCodeExtensionsJson, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
274
+ }
275
+ else if (projectPathLower.endsWith("/tick.json")) {
276
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.tickJson, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
277
+ }
278
+ else if (fileExtension === "mcstructure") {
279
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.structure, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
280
+ }
281
+ else if (fileExtension === "mcfunction") {
282
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.MCFunction, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
283
+ }
284
+ else if (fileExtension === "material") {
285
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.material, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
286
+ }
287
+ else if (fileExtension === "vertex") {
288
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.materialVertex, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
289
+ }
290
+ else if (fileExtension === "fragment") {
291
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.materialFragment, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
292
+ }
293
+ else if (fileExtension === "geometry") {
294
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.materialGeometry, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
295
+ }
296
+ else if (canonFileName === "level.dat" &&
297
+ fileSystemPrefix.indexOf(".mcworld") < 0 && // don't create a project item if we're inside of a mcworld/mctemplate since that broader item has a link already
298
+ fileSystemPrefix.indexOf(".mctemplate") < 0 &&
299
+ folderContext !== Project_1.FolderContext.behaviorPack) {
300
+ isInWorld = true;
301
+ project.ensureItemByProjectPath(folderPath, IProjectItemData_1.ProjectItemStorageType.folder, candidateFile.name, IProjectItemData_1.ProjectItemType.worldFolder, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
302
+ }
303
+ else if (canonFileName === "just.config.ts") {
304
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.justConfigTs, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
305
+ }
306
+ else if (canonFileName === "eslint.config.mjs") {
307
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.esLintConfigMjs, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
308
+ }
309
+ else if (fileExtension === "js") {
310
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.js, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
311
+ }
312
+ else if (fileExtension === "ts") {
313
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.ts, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
314
+ }
315
+ else if (fileExtension === "mcworld") {
316
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.MCWorld, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
317
+ await project.inferProjectItemsFromZipFile(projectPath, candidateFile, force);
318
+ }
319
+ else if (fileExtension === "mcproject") {
320
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.MCProject, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
321
+ await project.inferProjectItemsFromZipFile(projectPath, candidateFile, force);
322
+ }
323
+ else if (fileExtension === "mctemplate") {
324
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.MCTemplate, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
325
+ await project.inferProjectItemsFromZipFile(projectPath, candidateFile, force);
326
+ }
327
+ else if (fileExtension === "mcaddon") {
328
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.MCAddon, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
329
+ await project.inferProjectItemsFromZipFile(projectPath, candidateFile, force);
330
+ }
331
+ else if (fileExtension === "mcpack") {
332
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.MCPack, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
333
+ await project.inferProjectItemsFromZipFile(projectPath, candidateFile, force);
334
+ }
335
+ else if (fileExtension === "zip") {
336
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.zip, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
337
+ await project.inferProjectItemsFromZipFile(projectPath, candidateFile, force);
338
+ }
339
+ else if (fileExtension === "png" ||
340
+ fileExtension === "jpg" ||
341
+ fileExtension === "gif" ||
342
+ fileExtension === "jpeg" ||
343
+ fileExtension === "tga") {
344
+ let imageType = IProjectItemData_1.ProjectItemType.image;
345
+ if (folderPathLower.indexOf("/marketing art/") >= 0) {
346
+ imageType = IProjectItemData_1.ProjectItemType.marketingAssetImage;
347
+ }
348
+ else if (folderPathLower.indexOf("/store art/") >= 0) {
349
+ imageType = IProjectItemData_1.ProjectItemType.storeAssetImage;
350
+ }
351
+ else if (folderPathLower.indexOf("/textures/ui/") >= 0) {
352
+ imageType = IProjectItemData_1.ProjectItemType.uiTexture;
353
+ }
354
+ else if (baseName === "pack_icon" || folder.files["manifest.json"]) {
355
+ imageType = IProjectItemData_1.ProjectItemType.iconImage;
356
+ }
357
+ else if (folderPathLower.indexOf("/textures/") >= 0) {
358
+ imageType = IProjectItemData_1.ProjectItemType.texture;
359
+ }
360
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, imageType, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
361
+ }
362
+ else if (fileExtension === "ogg" || fileExtension === "mp3" || fileExtension === "wav") {
363
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.audio, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
364
+ }
365
+ else if (fileExtension === "env" && baseName === "") {
366
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.env, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
367
+ }
368
+ else if (fileExtension === "lang") {
369
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, candidateFile.name, IProjectItemData_1.ProjectItemType.lang, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
370
+ }
371
+ else if (fileExtension === "json") {
372
+ let newJsonType = IProjectItemData_1.ProjectItemType.json;
373
+ let itemName = candidateFile.name;
374
+ if (folderContext === Project_1.FolderContext.behaviorPack && folderPathLower.indexOf("/loot_tables/") >= 0) {
375
+ newJsonType = IProjectItemData_1.ProjectItemType.lootTableBehavior;
376
+ }
377
+ else if (folderContext === Project_1.FolderContext.behaviorPack && folderPathLower.indexOf("/dialogue/") >= 0) {
378
+ newJsonType = IProjectItemData_1.ProjectItemType.dialogueBehaviorJson;
379
+ }
380
+ else if (folderContext === Project_1.FolderContext.behaviorPack && folderPathLower.indexOf("/recipes/") >= 0) {
381
+ newJsonType = IProjectItemData_1.ProjectItemType.recipeBehavior;
382
+ }
383
+ else if (folderContext === Project_1.FolderContext.behaviorPack &&
384
+ folderPathLower.indexOf("/spawn_rules/") >= 0) {
385
+ newJsonType = IProjectItemData_1.ProjectItemType.spawnRuleBehavior;
386
+ }
387
+ else if (folderContext === Project_1.FolderContext.behaviorPack &&
388
+ folderPathLower.indexOf("/cameras/") >= 0 &&
389
+ folderPathLower.indexOf("aim_assist_preset") >= 0) {
390
+ newJsonType = IProjectItemData_1.ProjectItemType.aimAssistPresetJson;
391
+ }
392
+ else if (folderContext === Project_1.FolderContext.behaviorPack &&
393
+ folderPathLower.indexOf("/aim_assist/categories/") >= 0) {
394
+ newJsonType = IProjectItemData_1.ProjectItemType.aimAssistCategoryJson;
395
+ }
396
+ else if (folderContext === Project_1.FolderContext.behaviorPack &&
397
+ folderPathLower.indexOf("/aim_assist/presets/") >= 0) {
398
+ newJsonType = IProjectItemData_1.ProjectItemType.aimAssistPresetJson;
399
+ }
400
+ else if (folderContext === Project_1.FolderContext.behaviorPack &&
401
+ folderPathLower.indexOf("/behavior_trees/") >= 0) {
402
+ newJsonType = IProjectItemData_1.ProjectItemType.behaviorTreeJson;
403
+ }
404
+ else if (folderPathLower.indexOf("/spawn_groups/") >= 0) {
405
+ newJsonType = IProjectItemData_1.ProjectItemType.spawnGroupJson;
406
+ }
407
+ else if (isResourcePack && folderPathLower.indexOf("/atmospherics/") >= 0) {
408
+ newJsonType = IProjectItemData_1.ProjectItemType.atmosphericsJson;
409
+ }
410
+ else if (isResourcePack && folderPathLower.indexOf("/point_lights/") >= 0) {
411
+ newJsonType = IProjectItemData_1.ProjectItemType.pointLightsJson;
412
+ }
413
+ else if (isResourcePack && folderPathLower.indexOf("/color_grading/") >= 0) {
414
+ newJsonType = IProjectItemData_1.ProjectItemType.colorGradingJson;
415
+ }
416
+ else if (folderContext === Project_1.FolderContext.behaviorPack && folderPathLower.indexOf("/cameras/") >= 0) {
417
+ newJsonType = IProjectItemData_1.ProjectItemType.cameraJson;
418
+ }
419
+ else if (folderContext === Project_1.FolderContext.behaviorPack && folderPathLower.indexOf("/trading/") >= 0) {
420
+ newJsonType = IProjectItemData_1.ProjectItemType.tradingBehaviorJson;
421
+ }
422
+ else if (folderContext === Project_1.FolderContext.behaviorPack &&
423
+ folderPathLower.indexOf("/animation_controllers/") >= 0) {
424
+ newJsonType = IProjectItemData_1.ProjectItemType.animationControllerBehaviorJson;
425
+ }
426
+ else if (folderContext === Project_1.FolderContext.behaviorPack && folderPathLower.indexOf("/animations/") >= 0) {
427
+ newJsonType = IProjectItemData_1.ProjectItemType.animationBehaviorJson;
428
+ }
429
+ else if (isResourcePack &&
430
+ (folderPathLower.indexOf("/models/") >= 0 ||
431
+ baseName.endsWith(".geo") ||
432
+ baseName.endsWith(".geometry"))) {
433
+ newJsonType = IProjectItemData_1.ProjectItemType.modelGeometryJson;
434
+ }
435
+ else if (baseName.endsWith(".mci")) {
436
+ newJsonType = IProjectItemData_1.ProjectItemType.contentIndexJson;
437
+ }
438
+ else if (baseName.endsWith(".mcr")) {
439
+ newJsonType = IProjectItemData_1.ProjectItemType.contentReportJson;
440
+ }
441
+ else if (folderContext === Project_1.FolderContext.behaviorPack && folderPathLower.indexOf("/dimension/") >= 0) {
442
+ newJsonType = IProjectItemData_1.ProjectItemType.dimensionJson;
443
+ }
444
+ else if ((folderContext === Project_1.FolderContext.behaviorPack || folderContext === Project_1.FolderContext.unknown) &&
445
+ folderPathLower.indexOf("/features/") >= 0) {
446
+ newJsonType = IProjectItemData_1.ProjectItemType.featureBehavior;
447
+ }
448
+ else if ((folderContext === Project_1.FolderContext.behaviorPack || folderContext === Project_1.FolderContext.unknown) &&
449
+ folderPathLower.indexOf("/feature_rules/") >= 0) {
450
+ newJsonType = IProjectItemData_1.ProjectItemType.featureRuleBehavior;
451
+ }
452
+ else if (isResourcePack && folderPathLower.indexOf("/animation_controllers/") >= 0) {
453
+ newJsonType = IProjectItemData_1.ProjectItemType.animationControllerResourceJson;
454
+ }
455
+ else if (isResourcePack && folderPathLower.indexOf("/animations/") >= 0) {
456
+ newJsonType = IProjectItemData_1.ProjectItemType.animationResourceJson;
457
+ }
458
+ else if (folderPathLower.indexOf("/attachables/") >= 0) {
459
+ newJsonType = IProjectItemData_1.ProjectItemType.attachableResourceJson;
460
+ }
461
+ else if (isResourcePack && folderPathLower.indexOf("/fogs/") >= 0) {
462
+ newJsonType = IProjectItemData_1.ProjectItemType.fogResourceJson;
463
+ }
464
+ else if (isResourcePack && folderPathLower.indexOf("/particles/") >= 0) {
465
+ newJsonType = IProjectItemData_1.ProjectItemType.particleJson;
466
+ }
467
+ else if (isResourcePack && folderPathLower.indexOf("/render_controllers/") >= 0) {
468
+ newJsonType = IProjectItemData_1.ProjectItemType.renderControllerJson;
469
+ }
470
+ else if (isResourcePack && folderPathLower.indexOf("/block_culling/") >= 0) {
471
+ newJsonType = IProjectItemData_1.ProjectItemType.blockCulling;
472
+ }
473
+ else if (folderContext === Project_1.FolderContext.behaviorPack &&
474
+ projectPathLower.indexOf("/item_catalog/crafting_item_catalog") >= 0) {
475
+ newJsonType = IProjectItemData_1.ProjectItemType.craftingItemCatalog;
476
+ }
477
+ else if (isResourcePack &&
478
+ (projectPathLower.endsWith("terrain_texture.json") ||
479
+ projectPathLower.endsWith("terrain_textures.json"))) {
480
+ newJsonType = IProjectItemData_1.ProjectItemType.terrainTextureCatalogResourceJson;
481
+ }
482
+ else if (isResourcePack && projectPathLower.endsWith("_global_variables.json")) {
483
+ newJsonType = IProjectItemData_1.ProjectItemType.globalVariablesJson;
484
+ }
485
+ else if (isResourcePack && projectPathLower.endsWith("flipbook_textures.json")) {
486
+ newJsonType = IProjectItemData_1.ProjectItemType.flipbookTexturesJson;
487
+ }
488
+ else if (isResourcePack &&
489
+ (projectPathLower.endsWith("item_texture.json") || projectPathLower.endsWith("item_textures.json"))) {
490
+ newJsonType = IProjectItemData_1.ProjectItemType.itemTextureJson;
491
+ }
492
+ else if (baseName === "contents") {
493
+ newJsonType = IProjectItemData_1.ProjectItemType.contentsJson;
494
+ }
495
+ else if (folderContext === Project_1.FolderContext.skinPack && projectPathLower.endsWith("skins.json")) {
496
+ newJsonType = IProjectItemData_1.ProjectItemType.skinCatalogJson;
497
+ }
498
+ else if (isResourcePack && folderPathLower.indexOf("/materials/") >= 0) {
499
+ newJsonType = IProjectItemData_1.ProjectItemType.materialSetJson;
500
+ }
501
+ else if (isResourcePack &&
502
+ folderPathLower.indexOf("/sounds/") >= 0 &&
503
+ baseName === "sound_definitions") {
504
+ newJsonType = IProjectItemData_1.ProjectItemType.soundDefinitionCatalog;
505
+ }
506
+ else if (isResourcePack &&
507
+ folderPathLower.indexOf("/sounds/") >= 0 &&
508
+ baseName === "music_definitions") {
509
+ newJsonType = IProjectItemData_1.ProjectItemType.musicDefinitionJson;
510
+ }
511
+ else if (folderPathLower.indexOf("/texts/") >= 0 || baseName === "languages") {
512
+ newJsonType = IProjectItemData_1.ProjectItemType.languagesCatalogResourceJson;
513
+ }
514
+ else if (isResourcePack && folderPathLower.indexOf("/textures/ui/") >= 0) {
515
+ newJsonType = IProjectItemData_1.ProjectItemType.ninesliceJson;
516
+ }
517
+ else if (isResourcePack && folderPathLower.indexOf("/texture_sets/") >= 0) {
518
+ newJsonType = IProjectItemData_1.ProjectItemType.textureSetJson;
519
+ }
520
+ else if (isResourcePack && folderPathLower.indexOf("/lighting/") >= 0) {
521
+ newJsonType = IProjectItemData_1.ProjectItemType.lightingJson;
522
+ }
523
+ else if (isResourcePack && folderPathLower.indexOf("/point_lights/") >= 0) {
524
+ newJsonType = IProjectItemData_1.ProjectItemType.lightingJson;
525
+ }
526
+ else if (isResourcePack && folderPathLower.indexOf("/pbr/") >= 0) {
527
+ newJsonType = IProjectItemData_1.ProjectItemType.pbrJson;
528
+ }
529
+ else if (isResourcePack && folderPathLower.indexOf("/water/") >= 0) {
530
+ newJsonType = IProjectItemData_1.ProjectItemType.waterJson;
531
+ }
532
+ else if (isResourcePack && folderPathLower.indexOf("/shadows/") >= 0) {
533
+ newJsonType = IProjectItemData_1.ProjectItemType.shadowsJson;
534
+ }
535
+ else if (folderContext === Project_1.FolderContext.behaviorPack &&
536
+ folderPathLower.indexOf("/worldgen/jigsaw_structures/") >= 0) {
537
+ newJsonType = IProjectItemData_1.ProjectItemType.jigsawStructure;
538
+ }
539
+ else if (folderContext === Project_1.FolderContext.behaviorPack &&
540
+ folderPathLower.indexOf("/worldgen/structure_sets/") >= 0) {
541
+ newJsonType = IProjectItemData_1.ProjectItemType.jigsawStructureSet;
542
+ }
543
+ else if (folderContext === Project_1.FolderContext.behaviorPack &&
544
+ folderPathLower.indexOf("/worldgen/template_pools/") >= 0) {
545
+ newJsonType = IProjectItemData_1.ProjectItemType.jigsawTemplatePool;
546
+ }
547
+ else if (folderContext === Project_1.FolderContext.behaviorPack &&
548
+ folderPathLower.indexOf("/worldgen/processors/") >= 0) {
549
+ newJsonType = IProjectItemData_1.ProjectItemType.jigsawProcessorList;
550
+ }
551
+ else if (isResourcePack && folderPathLower.indexOf("/ui/") >= 0) {
552
+ newJsonType = IProjectItemData_1.ProjectItemType.uiJson;
553
+ }
554
+ else if (folderContext === Project_1.FolderContext.docs && baseName === "example_files") {
555
+ newJsonType = IProjectItemData_1.ProjectItemType.fileListArrayJson;
556
+ }
557
+ else if (isResourcePack && baseName === "biomes_client") {
558
+ newJsonType = IProjectItemData_1.ProjectItemType.biomeResourceJson;
559
+ }
560
+ else if (folderPathLower.indexOf("/biomes/") >= 0) {
561
+ newJsonType = IProjectItemData_1.ProjectItemType.biomeBehaviorJson;
562
+ }
563
+ else if (isResourcePack && baseName === "blocks") {
564
+ newJsonType = IProjectItemData_1.ProjectItemType.blocksCatalogResourceJson;
565
+ }
566
+ else if (isResourcePack &&
567
+ (projectPathLower.endsWith("texture_list.json") || projectPathLower.endsWith("textures_list.json"))) {
568
+ newJsonType = IProjectItemData_1.ProjectItemType.textureListJson;
569
+ }
570
+ else if (isResourcePack && projectPathLower.endsWith("texture_set.json")) {
571
+ newJsonType = IProjectItemData_1.ProjectItemType.textureSetJson;
572
+ }
573
+ else if (isResourcePack && folderPathLower.indexOf("/items/") >= 0) {
574
+ newJsonType = IProjectItemData_1.ProjectItemType.itemTypeLegacyResource;
575
+ }
576
+ else if (isResourcePack && baseName === "sounds") {
577
+ newJsonType = IProjectItemData_1.ProjectItemType.soundCatalog;
578
+ }
579
+ else if (baseName === "education") {
580
+ newJsonType = IProjectItemData_1.ProjectItemType.educationJson;
581
+ }
582
+ else if (baseName === "world_behavior_packs") {
583
+ newJsonType = IProjectItemData_1.ProjectItemType.behaviorPackListJson;
584
+ }
585
+ else if (baseName === "world_resource_packs") {
586
+ newJsonType = IProjectItemData_1.ProjectItemType.resourcePackListJson;
587
+ }
588
+ else if (baseName === "world_behavior_pack_history") {
589
+ newJsonType = IProjectItemData_1.ProjectItemType.behaviorPackHistoryListJson;
590
+ }
591
+ else if (baseName === "world_resource_pack_history") {
592
+ newJsonType = IProjectItemData_1.ProjectItemType.resourcePackHistoryListJson;
593
+ }
594
+ else if (baseName === "tsconfig") {
595
+ newJsonType = IProjectItemData_1.ProjectItemType.tsconfigJson;
596
+ }
597
+ else if (baseName === "docfx") {
598
+ newJsonType = IProjectItemData_1.ProjectItemType.docfxJson;
599
+ }
600
+ else if (baseName === "jsdoc") {
601
+ newJsonType = IProjectItemData_1.ProjectItemType.jsdocJson;
602
+ }
603
+ else if (baseName === "jsconfig") {
604
+ newJsonType = IProjectItemData_1.ProjectItemType.jsconfigJson;
605
+ }
606
+ else if (baseName === "package") {
607
+ newJsonType = IProjectItemData_1.ProjectItemType.packageJson;
608
+ }
609
+ else if (baseName === "package.lock") {
610
+ newJsonType = IProjectItemData_1.ProjectItemType.packageLockJson;
611
+ }
612
+ else if (baseName === ".prettierrc") {
613
+ newJsonType = IProjectItemData_1.ProjectItemType.prettierRcJson;
614
+ }
615
+ else if (folderContext === Project_1.FolderContext.docs && baseName === "info") {
616
+ newJsonType = IProjectItemData_1.ProjectItemType.docInfoJson;
617
+ project.role = IProjectData_1.ProjectRole.documentation;
618
+ itemName = StorageUtilities_1.default.getLeafName(folderPath);
619
+ }
620
+ else if (isResourcePack && folderPathLower.indexOf("/textures/") >= 0) {
621
+ newJsonType = IProjectItemData_1.ProjectItemType.ninesliceJson;
622
+ }
623
+ else if (folderContext === Project_1.FolderContext.docs &&
624
+ (baseName === "_example_files" || baseName === "example_files")) {
625
+ newJsonType = IProjectItemData_1.ProjectItemType.fileListArrayJson;
626
+ project.role = IProjectData_1.ProjectRole.documentation;
627
+ itemName = StorageUtilities_1.default.getLeafName(folderPath);
628
+ }
629
+ else if (folderContext === Project_1.FolderContext.typeDefs && folderPathLower.indexOf("/command_modules") >= 0) {
630
+ newJsonType = IProjectItemData_1.ProjectItemType.commandSetDefinitionJson;
631
+ project.role = IProjectData_1.ProjectRole.documentation;
632
+ }
633
+ else if ((folderContext === Project_1.FolderContext.metaData && folderPathLower.indexOf("/forms") >= 0) ||
634
+ projectPathLower.endsWith(".form.json")) {
635
+ newJsonType = IProjectItemData_1.ProjectItemType.dataForm;
636
+ project.role = IProjectData_1.ProjectRole.meta;
637
+ }
638
+ else if (folderContext === Project_1.FolderContext.typeDefs && folderPathLower.indexOf("/script_modules") >= 0) {
639
+ newJsonType = IProjectItemData_1.ProjectItemType.scriptTypesJson;
640
+ project.role = IProjectData_1.ProjectRole.documentation;
641
+ }
642
+ else if (folderContext === Project_1.FolderContext.typeDefs &&
643
+ folderPathLower.indexOf("/vanilladata_modules") >= 0) {
644
+ newJsonType = IProjectItemData_1.ProjectItemType.vanillaDataJson;
645
+ project.role = IProjectData_1.ProjectRole.documentation;
646
+ }
647
+ else if (folderContext === Project_1.FolderContext.typeDefs && folderPathLower.indexOf("/engine_modules") >= 0) {
648
+ newJsonType = IProjectItemData_1.ProjectItemType.engineOrderingJson;
649
+ project.role = IProjectData_1.ProjectRole.documentation;
650
+ }
651
+ // these need to be near the bottom since URL segments like /items/, /blocks/, /entities etc. could theoretically be used in loot_tables, etc. and that should take precedence in detection
652
+ else if (folderContext === Project_1.FolderContext.behaviorPack && folderPathLower.indexOf("/items/") >= 0) {
653
+ newJsonType = IProjectItemData_1.ProjectItemType.itemTypeBehavior;
654
+ }
655
+ else if (folderContext === Project_1.FolderContext.behaviorPack && folderPathLower.indexOf("/blocks/") >= 0) {
656
+ newJsonType = IProjectItemData_1.ProjectItemType.blockTypeBehavior;
657
+ }
658
+ else if (isResourcePack &&
659
+ (folderPathLower.indexOf("/entities/") >= 0 || folderPathLower.indexOf("/entity/") >= 0)) {
660
+ newJsonType = IProjectItemData_1.ProjectItemType.entityTypeResource;
661
+ }
662
+ else if (folderContext === Project_1.FolderContext.behaviorPack &&
663
+ (folderPathLower.indexOf("/entities/") >= 0 || folderPathLower.indexOf("/entity/") >= 0)) {
664
+ newJsonType = IProjectItemData_1.ProjectItemType.entityTypeBehavior;
665
+ }
666
+ else {
667
+ // Log.debugAlert("General JSON file found: " + projectPath);
668
+ }
669
+ project.ensureItemByProjectPath(projectPath, IProjectItemData_1.ProjectItemStorageType.singleFile, itemName, newJsonType, folderContext, source, IProjectItemData_1.ProjectItemCreationType.normal, candidateFile, undefined, isInWorld);
670
+ }
671
+ }
672
+ else if (pi && projectPath !== undefined) {
673
+ if (pi.itemType === IProjectItemData_1.ProjectItemType.MCWorld ||
674
+ pi.itemType === IProjectItemData_1.ProjectItemType.MCProject ||
675
+ pi.itemType === IProjectItemData_1.ProjectItemType.MCTemplate ||
676
+ pi.itemType === IProjectItemData_1.ProjectItemType.MCAddon ||
677
+ pi.itemType === IProjectItemData_1.ProjectItemType.MCPack ||
678
+ pi.itemType === IProjectItemData_1.ProjectItemType.zip) {
679
+ await project.inferProjectItemsFromZipFile(projectPath, candidateFile, force);
680
+ }
681
+ }
682
+ }
683
+ }
684
+ }
685
+ for (const folderName in folder.folders) {
686
+ const childFolder = folder.folders[folderName];
687
+ if (childFolder && !childFolder.errorStatus) {
688
+ const name = StorageUtilities_1.default.canonicalizeName(folderName);
689
+ if (name === "build" || name === "out" || name === "dist") {
690
+ project.distBuildFolder = folder;
691
+ }
692
+ else if (name === "lib") {
693
+ project.libFolder = folder;
694
+ }
695
+ else if ((name.startsWith(".mct") || name.startsWith(".vscode") || !name.startsWith(".")) &&
696
+ !childFolder.canIgnore &&
697
+ (folderContext !== Project_1.FolderContext.unknown || depth < 4) &&
698
+ depth < 10) {
699
+ if (childFolder !== undefined) {
700
+ await ProjectItemInference.inferProjectItemsFromFolder(project, childFolder, fileSystemPrefix, folderContext, variantLabel, isInWorld, rootFolder, depth + 1, source, force, processingCallback);
701
+ }
702
+ }
703
+ }
704
+ }
705
+ }
706
+ }
707
+ exports.default = ProjectItemInference;
708
+
709
+ //# sourceMappingURL=../maps/app/ProjectItemInference.js.map