Armor
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.