How to Use the Custom Trim Builder

  1. 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).
  2. Fill in the Trim Material section – material ID, asset name, description, and the armor-material-to-asset override map.
  3. 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.
  4. Copy both generated JSON blocks into data/<namespace>/trim_pattern/<name>.json and data/<namespace>/trim_material/<name>.json respectively.

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_material has an ingredient item, an item_model_index (a numeric hash), and an override_armor_materials map keyed by bare material names (no minecraft: prefix, e.g. just iron). trim_pattern includes a template_item field.
  • 1.21.4: item_model_index is removed, replaced by override_armor_assets – note the map keys here are namespaced (e.g. minecraft:iron), unlike the older map. ingredient and template_item are both still present.
  • 1.21.5+: ingredient and template_item are removed entirely from both files. The item is instead wired up via a #trim_material item tag combined with the smithing_trim recipe’s own addition/pattern fields.

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