Wiki 9Minecraft Wiki 9Minecraft

Creating Custom Armor

Define wearable armor items in Behavior Packs and render 3D armor layers using Resource Pack attachables.

6Sections
3Code examples
4Known errors

Custom armor in Minecraft Bedrock requires pairing a Behavior Pack item definition with a Resource Pack attachable. The Behavior Pack controls the armor's defense rating, durability, equipment slot, and repair materials. The Resource Pack tells the game how to render the 3D armor model on the player or mob body when the item is equipped.

Armor Architecture Overview

Unlike simple hand-held items that only need an item icon, a piece of custom armor has two distinct visual states: the 2D icon shown in the inventory and the 3D model worn on a character's body. In the Behavior Pack, every armor piece—whether it is a helmet, chestplate, leggings, or boots—is just a standard custom item that uses the wearable component to restrict it to an armor slot and grant protection points.

In the Resource Pack, the inventory icon is mapped through textures/item_texture.json just like any basic item. The 3D worn appearance, however, is handled by an attachable definition. Attachables bind a geometry file and a texture to the skeleton of the entity wearing the item, allowing the armor pieces to move naturally with the player's arms, legs, head, and torso.

Behavior Pack Item Definition

To make an item function as armor, you must include the minecraft:wearable component in your Behavior Pack item JSON. This component defines which equipment slot the item goes into and how much defense it provides. Because armor cannot stack in a player's inventory, you must also set minecraft:max_stack_size to 1.

Most armor also needs durability so that it takes damage during combat, which is configured through minecraft:durability. If you want players to repair the armor on an anvil, include minecraft:repairable and list the items that restore its durability, along with a Molang expression or integer for how much durability each item restores. To allow the armor to be enchanted on an enchanting table, add the minecraft:enchantable component with an appropriate armor slot type and an enchantability value.

BP/items/ruby_chestplate.json
{
  "format_version": "1.20.80",
  "minecraft:item": {
    "description": {
      "identifier": "wiki:ruby_chestplate",
      "menu_category": {
        "category": "equipment",
        "group": "itemGroup.name.chestplate"
      }
    },
    "components": {
      "minecraft:max_stack_size": 1,
      "minecraft:icon": "ruby_chestplate",
      "minecraft:durability": {
        "max_durability": 500
      },
      "minecraft:wearable": {
        "slot": "slot.armor.chest",
        "protection": 7
      },
      "minecraft:repairable": {
        "repair_items": [
          {
            "items": [
              "wiki:ruby"
            ],
            "repair_amount": "query.max_durability * 0.25"
          }
        ]
      },
      "minecraft:enchantable": {
        "value": 12,
        "slot": "armor_torso"
      }
    }
  }
}

Armor Slots and Enchantable Values

The slot string used in minecraft:wearable is different from the slot string used in minecraft:enchantable. Mixing these two up is a common cause of content log errors. The wearable component uses the entity equipment slot names, while the enchantable component uses enchantment table target categories.

Use the table below to match each armor piece to its proper wearable slot, enchantable slot, and standard creative menu group.

Armor Pieceminecraft:wearable slotminecraft:enchantable slotCreative Menu Group
Helmetslot.armor.headarmor_headitemGroup.name.helmet
Chestplateslot.armor.chestarmor_torsoitemGroup.name.chestplate
Leggingsslot.armor.legsarmor_legsitemGroup.name.leggings
Bootsslot.armor.feetarmor_feetitemGroup.name.boots

Resource Pack Attachable Definition

Without an attachable file in your Resource Pack, equipping your custom armor will work mechanically, but nothing will appear on the player's body. Create a JSON file inside the RP/attachables/ folder. The identifier inside the attachable description must match the identifier of your Behavior Pack item exactly.

For standard armor that uses the vanilla armor shape, you do not need to create a custom 3D model in Blockbench. You can inherit the built-in humanoid armor geometries directly. Helmets, chestplates, and boots share one texture layout (customarily named layer 1), while leggings use a second texture layout (layer 2) so the pants do not overlap with the chestplate waist and boots.

RP/attachables/ruby_chestplate.json
{
  "format_version": "1.10.0",
  "minecraft:attachable": {
    "description": {
      "identifier": "wiki:ruby_chestplate",
      "materials": {
        "default": "armor",
        "enchanted": "armor_enchanted"
      },
      "textures": {
        "default": "textures/models/armor/ruby_layer_1",
        "enchanted": "textures/misc/enchanted_item_glint"
      },
      "geometry": {
        "default": "geometry.humanoid.armor.chestplate"
      },
      "scripts": {
        "parent_setup": "variable.chest_layer_visible = 0.0;"
      },
      "render_controllers": [
        "controller.render.armor"
      ]
    }
  }
}

Vanilla Armor Geometries and Scripts

When creating attachables for the remaining pieces of an armor set, change the default geometry and the parent_setup script to match the piece you are building. The parent_setup script hides the player's outer skin layer (hat, jacket, sleeves, or pant legs) underneath that specific armor piece so the player's skin does not clip through tight-fitting armor.

For a helmet, use geometry.humanoid.armor.helmet and set variable.helmet_layer_visible = 0.0; in parent_setup. For leggings, use geometry.humanoid.armor.leggings, point the default texture to your layer 2 texture file, and set variable.leg_layer_visible = 0.0;. For boots, use geometry.humanoid.armor.boots and set variable.boot_layer_visible = 0.0;. All four pieces can use the built-in controller.render.armor render controller, which automatically switches from the default material to the enchanted material when the item is enchanted.

Registering Inventory Icons

The attachable only controls what is rendered on the entity wearing the armor. To display the 2D item icon in the hotbar, inventory, and in the player's hand when holding the armor unequipped, map the icon shortname you used in the Behavior Pack's minecraft:icon component inside RP/textures/item_texture.json.

Place your 16x16 item PNG textures in RP/textures/items/ and place your 64x32 worn armor layer sheets in RP/textures/models/armor/ so they stay organized and match vanilla folder conventions.

RP/textures/item_texture.json
{
  "resource_pack_name": "wiki_rp",
  "texture_name": "atlas.items",
  "texture_data": {
    "ruby_helmet": {
      "textures": "textures/items/ruby_helmet"
    },
    "ruby_chestplate": {
      "textures": "textures/items/ruby_chestplate"
    },
    "ruby_leggings": {
      "textures": "textures/items/ruby_leggings"
    },
    "ruby_boots": {
      "textures": "textures/items/ruby_boots"
    }
  }
}

Which versions this applies to

Applies to Bedrock Edition 1.20.80 and newer. The minecraft:wearable, minecraft:durability, minecraft:repairable, and minecraft:enchantable components are stable in format_version 1.20.80+ and do not require any experimental toggles.

When it does not work

What you seeWhyThe fix
The armor equips in the armor slot and gives protection points, but it is completely invisible on the player's body.The identifier in RP/attachables/ does not match the identifier in BP/items/, or the attachable file is placed in the wrong folder.Ensure the description.identifier in your attachable JSON is identical (including the namespace) to the item's identifier, and verify the file is inside RP/attachables/.
When the armor is enchanted, the entire 3D armor piece turns solid purple and magenta or glows opaque white.The controller.render.armor render controller expects a texture mapped to the 'enchanted' key and a material mapped to the 'enchanted' key inside the attachable description.Add "enchanted": "textures/misc/enchanted_item_glint" to textures and "enchanted": "armor_enchanted" to materials in your attachable JSON.
Content Log shows an error parsing minecraft:enchantable or minecraft:wearable saying the slot value is invalid.You used a wearable slot name (like slot.armor.chest) inside minecraft:enchantable, or an enchantable slot name (like armor_torso) inside minecraft:wearable.Use slot.armor.head, slot.armor.chest, slot.armor.legs, or slot.armor.feet for minecraft:wearable, and armor_head, armor_torso, armor_legs, or armor_feet for minecraft:enchantable.
The armor model appears in the player's hand like a giant 3D torso when holding the item in the hotbar.In format versions 1.20.80 and above, items with an attachable will render their 3D attachable geometry in first-person and third-person hand views unless restricted, or if you used a custom attachable setup that lacks item rendering conditions.Stick to format_version 1.10.0 for the attachable JSON when using vanilla armor geometries, as the game automatically renders the 2D icon in hand for standard armor attachables at that version.

Reference, straight from the game files

Read out of the game itself, so the ids match the version you are building for.