Skip to content

Minecraft Custom Armor Trims: Patterns and Materials

Make minecraft custom armor trims with a data pack: add a trim pattern and material, then give the trimmed armour with /give in 26.3.

Updated 5 Nov 2026Written for Minecraft 26.33 min read

Written for Minecraft 26.3.

Minecraft custom armor trims are defined in a data pack (the pattern and the material) and drawn by a resource pack (the textures). You add one JSON file for each, then apply the result with the trim item component.

Before you start

  • Minecraft Java Edition 26.3: data pack format 121.0, resource pack format 97.1.

  • A data pack and a resource pack. New to packs? Read pack basics first.

  • An image editor for the pattern texture and an 8 by 1 pixel palette image.

Both packs need a pack.mcmeta. In 26.3 you use min_format and max_format and leave out pack_format:

{
  "pack": {
    "description": "Custom trims",
    "min_format": 121,
    "max_format": 121
  }
}

For the resource pack use "min_format": [97, 1] and "max_format": [97, 1].

Add the trim pattern and material

  1. Create data/example/trim_pattern/stripes.json. The asset_id names the pattern's texture. decal is optional and defaults to false.

  2. Create data/example/trim_material/ender.json. Since 26.3 snapshot 1 the material uses palette_id (a palette texture ID) instead of the old asset_name.

The pattern, in stripes.json:

{
  "asset_id": "example:stripes",
  "description": { "translate": "trim_pattern.example.stripes" }
}

The material, in ender.json:

{
  "palette_id": "example:trim/ender",
  "description": { "color": "#258474", "translate": "trim_material.example.ender" }
}

A palette ID namespace:path resolves to namespace:textures/palettes/path.png. Here that is assets/example/textures/palettes/trim/ender.png, an image 8 pixels wide and 1 pixel tall. Vanilla palettes also live in textures/palettes/trim/ since 26.3 snapshot 1.

Let players craft the trim

A smithing recipe ties a template item to your pattern. Save it as data/example/recipe/stripes_armor_trim.json:

{
  "type": "minecraft:smithing_trim",
  "addition": "#minecraft:trim_materials",
  "base": "#minecraft:trimmable_armor",
  "template": "minecraft:stick",
  "pattern": "example:stripes"
}

To make your own material work in the smithing table, add its item to the minecraft:trim_materials item tag (data/minecraft/tags/item/trim_materials.json) and give that item the provides_trim_material component.

Add the resource pack assets

  1. Add your grayscale pattern textures to the resource pack under the example namespace, matching the file layout vanilla uses for the pattern's asset_id.

  2. Add the palette image from the previous section.

  3. Add language keys in assets/example/lang/en_us.json: trim_pattern.example.stripes and trim_material.example.ender.

Armour that wants a different look for one material or pattern uses trim_overrides in its equipment asset (see custom armor). Each entry has a when object with material and/or pattern, plus a texture and/or a palette. The first match wins.

Restart after changes. Trim pattern and material files do not apply on /reload: leave and reopen the world, or restart the server.

Apply a trim with /give

Give yourself armour that already carries the trim:

/give @s leather_leggings[trim={pattern:"example:stripes",material:"example:ender"}]

The give command builder helps with the bracket syntax. Players can also trim armour at a smithing table once the recipe above is loaded.

Check it worked

  • Hover the armour: the tooltip should list your pattern and material names in the colour you set.

  • Wear it. The pattern should show, tinted by your palette.

  • Run /give @s stick and try the smithing table with your template, armour and material item.

Common problems

The tooltip shows raw keys

The language file is missing or the keys do not match the translate values exactly.

The pattern is invisible

The pattern texture is not where the game looks for the asset_id, or the palette image is missing.

The recipe is not found

Check the folder is recipe (singular) and the pack loaded. Run /datapack list.

Old pack from before 26.3 breaks

Older materials used asset_name and override_armor_assets. Both changed in 26.3 snapshot 1. Update the JSON and move palettes to textures/palettes/trim/.

Join our Discord

Get help with your purchases, see what we're building next and talk to other server owners.