Armor

Back to PackEngine

Each file in a pack’s armor/ folder, next to items/, is one wearable piece. PackEngine draws it with its own renderer from a Blockbench or GeckoLib format .geo.json model. GeckoLib doesn’t need to be installed.

Armor is registered as packengine:<namespace>_<id>, the same way items are, and items/ and armor/ share one set of IDs per pack.

{
  "id": "field_helmet",
  "display_name": "Field Helmet",
  "lore": ["Steel shell, padded liner"],
  "creative_tab": "my_tab",
  "slot": "head",
  "model": "my_pack:geo/armor/field_helmet.geo.json",
  "texture": "my_pack:textures/armor/field_helmet.png",
  "animation": "my_pack:animations/armor/field_helmet.animation.json",
  "idle_animation": "idle",
  "hide_skin_layer": ["head"],
  "armor": 3,
  "toughness": 2.0,
  "knockback_resistance": 0.05,
  "durability": 400,
  "repair_ingredient": "minecraft:iron_ingot",
  "equip_sound": "minecraft:item.armor.equip_iron",
  "attributes": [
    { "attribute": "minecraft:generic.movement_speed", "amount": -0.02, "operation": "multiply_total" }
  ]
}

Fields

Field Default Meaning
id required Lowercase ID, unique across the pack’s items/ and armor/.
display_name, translation_key id, tidied up The name, or a lang key that replaces it.
lore, lore_translation_keys none Tooltip lines, as for items.
icon 3D model Item texture for the inventory icon. Without one the model is drawn at a three-quarter angle and framed to fit.
creative_tab PackEngine’s tab Tab ID. A bare ID uses the pack’s namespace.
slot required head, chest, legs, feet, or none for gear another mod equips (a Curios slot, for example).
render_as the slot Which bones are drawn and how they follow the body: head, chest, legs, feet, or body for a uniform that covers everything but the head from one slot. none pieces default to chest.
model, texture required Model and texture.
animation, idle_animation none Animation file and the clip that loops while worn. idle_animation needs animation.
hidden_bones none Model bones that are never drawn.
hide_skin_layer false true, or a list of head, chest, legs. Hides the wearer’s outer skin layer (hat, jacket and sleeves, trousers) there so it can’t poke through.
armor 0 Armor points, 0 to 100.
toughness 0 Armor toughness.
knockback_resistance 0 0 to 1.
durability 0 0 never breaks.
enchantability 15  
repair_ingredient none Item ID or #tag for anvil repair.
equip_sound leather Sound played when it’s put on.
fire_resistant false Survives fire and lava when dropped.
stack_size 1 1 to 64.
attributes none Extra modifiers while worn. Each has attribute, amount and operation.

operation is add, multiply_base or multiply_total. The 1.21 names add_value, add_multiplied_base and add_multiplied_total work too.

Models

The model is fitted to the wearer through eight bones named as in GeckoLib armor:

Bone Drawn for render_as
armorHead head
armorBody, armorRightArm, armorLeftArm chest, body
armorRightLeg, armorLeftLeg legs, body
armorRightBoot, armorLeftBoot feet, body

Put everything else in the model under one of these bones. The arms are narrowed for players with slim skins. A body piece’s icon shows only the chest.

The same renderer draws the piece in the inventory, in hand, on the ground and in item frames, so the icon always matches what’s worn.

Mods that build on PackEngine armor can add their own fields and folders. See Armor hooks.