tryEnrichWithArmorAttachable
Items-pipeline-driven enrichment hook. Called per (item × base item) mapping after the flat-icon (2D) path registers the mapping. If the item looks like armor for the given base item, resolves the corresponding Java equipment file, picks the right layer for the slot, copies the armor texture into the Bedrock pack, and writes a worn-armor attachable whose description.identifier EQUALS the supplied bedrockIdentifier (i.e. the identifier the Geyser mapping points at via minecraft:item_model).
Texture path convention (matches the previous standalone pipeline so we don't churn pack contents): textures/entity/equipment/<safeNs>/<materialStem>_<slot>.png.
Attachable filesystem path: attachables/<namespace>/<bedrockIdentifierPath>.json, symmetric with FMM and generic-3D attachables (see FmmAttachableGenerator.writeAttachable comments around line 201).
Return
true if a worn-armor attachable was actually written.
Parameters
Identifier the Geyser mapping points at, e.g. "elitemobs:gear_bronze_chestplate_icon__iron_chestplate". The attachable's description.identifier is set to this verbatim so Geyser's bedrock-identifier-based lookup finds it.
Filesystem stem under attachables/ (no extension), e.g. "elitemobs/gear_bronze_chestplate_icon__iron_chestplate".
Source namespace (e.g. "elitemobs"). Used to locate the equipment definition under assets/<ns>/equipment/....
Filename stem of the items definition (e.g. "bronze_chestplate" for items/gear/bronze_chestplate.json). Drives the inferSlot filename heuristic and supplies the material stem when stripped of slot suffix.
Target Java armor base item (e.g. "minecraft:iron_chestplate"). Used to validate the inferred slot matches and to detect the elytra special case.
Cache for assets/<ns>/equipment/*.json lookups.
Root of the merged Java pack on disk (for texture-source lookup).
Root of the Bedrock pack being written.