Custom Trim Builder — Custom Armor Trim Pattern & Material JSON (Java 1.21+)
How to Use the Custom Trim Builder
- Fill in the Trim Pattern section – pattern ID, asset ID, description, and whether it’s a decal (overlays edge-to-edge rather than following the armor’s shape).
- Fill in the Trim Material section – material ID, asset name, description, and the armor-material-to-asset override map.
- Pick the schema tier that matches your target version: pre-1.21.4, 1.21.4, or 1.21.5+ – the field names genuinely differ between them.
- Copy both generated JSON blocks into
data/<namespace>/trim_pattern/<name>.jsonanddata/<namespace>/trim_material/<name>.jsonrespectively.
Why This Schema Has Three Tiers
A custom armor trim needs two separate JSON files working together – the pattern (the swirl/shape design) and the material (the color palette and, on older versions, what item applies it) – but the exact fields required have changed twice across recent versions:
- Pre-1.21.4:
trim_materialhas aningredientitem, anitem_model_index(a numeric hash), and anoverride_armor_materialsmap keyed by bare material names (nominecraft:prefix, e.g. justiron).trim_patternincludes atemplate_itemfield. - 1.21.4:
item_model_indexis removed, replaced byoverride_armor_assets– note the map keys here are namespaced (e.g.minecraft:iron), unlike the older map.ingredientandtemplate_itemare both still present. - 1.21.5+:
ingredientandtemplate_itemare removed entirely from both files. The item is instead wired up via a#trim_materialitem tag combined with thesmithing_trimrecipe’s ownaddition/patternfields.
Also note the key naming across both files: trim_pattern uses asset_id, while trim_material uses asset_name – a small but easy-to-miss difference if you’re hand-editing instead of using a generator.
Frequently Asked Questions
Do I need both the trim_pattern and trim_material files, or just one?
Both – a usable custom trim needs the pattern (which defines the shape/swirl) and the material (which defines the color palette and, on older versions, the ingredient) working together. Neither file alone produces an applicable trim.
How do I actually apply a custom trim to armor in-game?
At a smithing table, using a smithing template item that references this pattern, combined with a piece of armor and this material’s ingredient (pre-1.21.5) or an item carrying the #trim_material tag (1.21.5+). The exact recipe wiring differs by schema tier, which is why picking the right tier above matters.
Why did override_armor_materials become override_armor_assets?
The old item_model_index system used a numeric hash to pick a model variant, which was fragile and hard to extend; 1.21.4 replaced it with a cleaner asset-ID-based override map. The map’s key format changed at the same time – from bare material names to namespaced ones – so a straight field rename alone won’t produce valid 1.21.4+ JSON.
My trim isn’t applying – what’s the most common mistake?
Mixing schema tiers is the most common cause – for example, including an ingredient field on a 1.21.5+ target (where it’s been removed), or using bare material keys in an override_armor_assets map (which expects namespaced keys, unlike the older override_armor_materials map). Double-check the schema tier matches your actual target version before troubleshooting further.
Related Tools
- Custom Enchantment Builder – design a matching custom enchantment to pair with your trim.
- Armor Give Command Generator – give yourself armor with a vanilla trim pattern/material to test against.
- Item ID Browser – look up vanilla ingredient item IDs for your trim material.