How to Make Custom Armor in Minecraft Bedrock (2026)

Build a custom chestplate that equips correctly, protects the player, takes durability damage, can be repaired, and displays its own icon and worn texture.

Current item componentsThis guide was reviewed against the stable Minecraft Creator item, wearable, and durability documentation in July 2026. It separates gameplay behavior from the worn visual so each layer can be tested independently.

The short answer

Custom Bedrock armor starts as a custom item in the Behavior Pack. The minecraft:wearable component chooses the equipment slot and protection value, minecraft:durability controls breakage, and minecraft:repairable defines repair materials. The Resource Pack supplies the inventory icon and an attachable for the model or armor texture shown on the player.

Build one chestplate before making a four-piece set. First prove the item can be given and equipped. Then add protection and durability. Only after the gameplay item works should you debug the attachable and textures.

Create the armor file structure

Pack structure
RubyArmor_BP/
  manifest.json
  items/
    ruby_chestplate.json
  recipes/
    ruby_chestplate.json

RubyArmor_RP/
  manifest.json
  attachables/
    ruby_chestplate.json
  models/
    entity/
      ruby_armor.geo.json
  textures/
    item_texture.json
    items/
      ruby_chestplate.png
    models/
      armor/
        ruby_armor.png
  texts/
    en_US.lang
    languages.json

If your packs are not paired and loading yet, start with the Bedrock manifest.json guide. Armor files cannot compensate for a Resource Pack that is inactive or linked to the wrong Behavior Pack.

Step 1: create the wearable item

Create RubyArmor_BP/items/ruby_chestplate.json. This example uses a namespaced identifier, the chest equipment slot, ten protection points, durability, and ruby items as repair material.

items/ruby_chestplate.json
{
  "format_version": "1.21.90",
  "minecraft:item": {
    "description": {
      "identifier": "icedfox:ruby_chestplate",
      "menu_category": {
        "category": "equipment",
        "group": "minecraft:itemGroup.name.chestplate"
      }
    },
    "components": {
      "minecraft:icon": "ruby_chestplate",
      "minecraft:wearable": {
        "protection": 10,
        "slot": "slot.armor.chest",
        "dispensable": true
      },
      "minecraft:durability": {
        "max_durability": 720
      },
      "minecraft:repairable": {
        "repair_items": [
          {
            "items": ["icedfox:ruby"],
            "repair_amount": 180
          }
        ]
      },
      "minecraft:tags": {
        "tags": ["minecraft:is_armor"]
      }
    }
  }
}

The non-hand armor slot automatically behaves as a single-item equipment slot. The protection and durability numbers are design choices, not a target to maximize. Compare the full set against vanilla progression and test real combat before release.

Use the correct slot for each piece

  • Helmet: slot.armor.head
  • Chestplate: slot.armor.chest
  • Leggings: slot.armor.legs
  • Boots: slot.armor.feet

Give every piece a unique identifier and icon key. Copying the chestplate file and forgetting to change its slot is one of the fastest ways to create a set that overwrites itself in the same equipment slot.

Step 2: register the inventory icon and name

Save a square PNG as textures/items/ruby_chestplate.png, then add its key to textures/item_texture.json:

textures/item_texture.json
{
  "resource_pack_name": "Ruby Armor Resources",
  "texture_name": "atlas.items",
  "texture_data": {
    "ruby_chestplate": {
      "textures": "textures/items/ruby_chestplate"
    }
  }
}

The key ruby_chestplate must match minecraft:icon. Add the display name to texts/en_US.lang:

texts/en_US.lang
item.icedfox:ruby_chestplate.name=Ruby Chestplate

Step 3: make the armor visible when worn

An inventory icon does not define the player's worn appearance. Create an attachable with the same identifier as the item. The attachable selects the geometry, material, render controller, and texture.

attachables/ruby_chestplate.json
{
  "format_version": "1.20.60",
  "minecraft:attachable": {
    "description": {
      "identifier": "icedfox:ruby_chestplate",
      "materials": {
        "default": "armor",
        "enchanted": "armor_enchanted"
      },
      "textures": {
        "default": "textures/models/armor/ruby_armor",
        "enchanted": "textures/misc/enchanted_item_glint"
      },
      "geometry": {
        "default": "geometry.ruby_armor"
      },
      "scripts": {
        "parent_setup": "variable.chest_layer_visible = 1.0;"
      },
      "render_controllers": ["controller.render.armor"]
    }
  }
}

The exact geometry identifier must match the exported description.identifier in ruby_armor.geo.json. Use the vanilla attachables and armor geometry as references for bone names and layer visibility. A custom player armor model must follow the expected player bones or it will float, rotate incorrectly, or disappear in some poses.

Do not debug item JSON and geometry at the same timeIf the chestplate equips but appears invisible, the Behavior Pack item is already working. Focus on the Resource Pack, attachable identifier, geometry, render controller, and texture path.

Step 4: add a survival recipe

A public armor set needs a clear acquisition path. Add a shaped recipe after the custom material and chestplate both work:

recipes/ruby_chestplate.json
{
  "format_version": "1.21.90",
  "minecraft:recipe_shaped": {
    "description": {
      "identifier": "icedfox:ruby_chestplate_recipe"
    },
    "tags": ["crafting_table"],
    "pattern": [
      "R R",
      "RRR",
      "RRR"
    ],
    "key": {
      "R": { "item": "icedfox:ruby" }
    },
    "result": {
      "item": "icedfox:ruby_chestplate",
      "count": 1
    }
  }
}

See the Bedrock custom recipes guide for tag choices, shaped versus shapeless recipes, and recipe debugging.

Turn one chestplate into a complete set

  1. Duplicate the Behavior Pack item and change identifier, icon, menu group, and equipment slot.
  2. Choose protection and durability values as one balanced set.
  3. Create an icon and translation key for every piece.
  4. Add or adapt attachables for head, chest, legs, and feet visibility.
  5. Create individual recipes and test each result.
  6. Test mixed vanilla and custom armor combinations.

Use a consistent namespace and file naming pattern such as ruby_helmet, ruby_chestplate, ruby_leggings, and ruby_boots. Consistency makes texture and translation mistakes much easier to spot.

Armor test checklist

  • Run /give @s icedfox:ruby_chestplate and confirm the icon and name.
  • Equip it manually and with a dispenser.
  • Take damage and confirm protection and durability change.
  • Repair it with the intended material.
  • Test first-person, third-person, sneaking, swimming, gliding, and riding.
  • Test enchantment glint if the armor can be enchanted.
  • Join with a second player and verify the worn model is visible remotely.
  • Reload the world and confirm the equipped item persists.

Common custom armor problems

The item cannot be equipped

Check the minecraft:wearable component and exact slot string. Confirm the item JSON parses and the active world is loading the version you edited.

The armor equips but is invisible

Check that the Resource Pack is active, the attachable identifier equals the item identifier, and the geometry, material, render controller, and texture references all exist.

The armor icon is missing

Compare minecraft:icon, the texture_data key, and the PNG path. This is separate from the worn armor texture.

All pieces go into one slot

Each copied item needs its correct slot.armor.* value. The file name alone does not determine where armor equips.

The recipe does not appear

Test the output item with /give first, then inspect the recipe identifier, crafting tag, pattern dimensions, key entries, and Content Log.

Frequently asked questions

Do I need Blockbench for custom armor?

Not for the gameplay item or a basic texture workflow. Blockbench becomes useful when you need custom geometry, fitted bones, or a model that differs from standard armor layers.

Can custom armor use armor trims?

Current Bedrock item and attachable workflows support trimmable armor when the required tags, textures, and compatible format versions are configured. Build and test the basic armor first, then follow the official custom item trim example.

Can armor trigger special abilities?

Yes. Use data-driven components where possible, or Script API for mechanics that need equipment checks, cooldowns, effects, or coordinated set bonuses. Keep multiplayer and item-removal edge cases in the test plan.

Official sources checked