Lets resource packs replace the 3D model of worn armor. EMF's per-piece armor models, backported to Minecraft 1.21.1.
What it does
Minecraft 1.21.1 locks worn armor to a fixed shape. Resource packs can only change the texture — and even that is pinned to a 64×32 layout.
This mod removes both limits. A pack can define armor geometry in OptiFine CEM format, at any texture size.
Why it exists
3D armor packs are built from per-piece CEM models — helmet.jem, chestplate.jem, leggings.jem, boots.jem. EMF's support for those is 1.21.2+ only, so 1.21.1 has no equivalent.
Enable a 3D armor pack on 1.21.1 and the armor renders garbled: the pack's 64×64 texture gets sampled by a model that assumes 64×32, so only the top half is stretched across the whole piece. This mod supplies the missing piece.
The vanilla equipment system added in 1.21.4 (
equipment/*.json) only defines texture layers, not geometry. That is not what this mod replaces.
Usage
1. Put the jar in mods. Client-side only — not needed on servers.
2. Put the 3D armor pack in resourcepacks and enable it in game. No editing needed — packs built for 1.21.4 and newer work as they are.
3. Put armor on. The log should say:
[armorcem] loaded 4 armor models [HEAD, CHEST, LEGS, FEET] (json 0 / jem 4)
If it loads 0 models, the pack has no armor models or isn't enabled.
Companion mods
These cover other parts of the same pack. Armor works without them.
| Mod | Covers |
|---|---|
| Modefite | Item appearance in hand and in the inventory |
| EMF | Entity models — horse armor, trident, armor stands |
What it reads
It looks for these in the resource pack. If none are present it does nothing and vanilla armor renders as usual.
assets/minecraft/optifine/cem/helmet.jem
assets/minecraft/optifine/cem/chestplate.jem
assets/minecraft/optifine/cem/leggings.jem
assets/minecraft/optifine/cem/boots.jem
It also bridges texture paths. Newer packs ship textures/entity/equipment/humanoid/<material>.png, while 1.21.1 looks for textures/models/armor/<material>_layer_1.png. The mod checks the newer path and uses it when present, leaving older packs untouched.
If the pack doesn't show up
Newer packs often declare min_format / max_format with no pack_format. 1.21.1's parser requires pack_format, so parsing fails and the pack never appears in the list at all — the most common reason a 3D armor pack won't enable.
The mod fills it in for you. As a side effect the pack is treated as a 1.21.1 pack, so newer-version overlays no longer match and stay inactive — their core shaders never get compiled, so they can't break the resource reload either.
For pack authors — hand-authored models
If jem parsing comes out wrong, override it with a pre-converted definition at assets/minecraft/armorcem/humanoid.json. It takes priority over any .jem.
{
"helmet": {
"textureSize": [64, 64],
"parts": [
{
"part": "head",
"pivot": [0, 0, 0],
"mirror": false,
"boxes": [
{ "origin": [-4, -8, -4], "size": [8, 8, 8], "inflate": 1.0, "uv": [0, 0] }
]
}
]
}
}
| Field | Meaning |
|---|---|
| top-level key | helmet, chestplate, leggings, boots |
textureSize |
UVs are divided by this — the 64×32 limit is gone |
part |
head, hat, body, right_arm, left_arm, right_leg, left_leg |
pivot |
Part origin, in vanilla entity model space (y down, origin near the neck) |
mirror |
Flips the texture horizontally |
origin / size |
Box corner and dimensions, relative to pivot |
inflate |
Grows the box on every side — same as vanilla's armor deformation |
uv |
Texture offset, same convention as vanilla models |
Pieces and parts are optional. Anything you leave out stays vanilla.
What it does not do
- No per-material geometry. One model per piece; materials differ by texture only.
- Vanilla armor items only. Modded armor is left alone.
- Held and inventory item models are out of scope — that's Modefite's job.
- Horse armor and entity models are EMF's job.
- Client-side only.
Compatibility
NeoForge 1.21.1.
Model replacement uses NeoForge's official IClientItemExtensions hook. Only the texture path and the pack-format fallback use mixins, and both are single return-value tweaks, so conflicts are unlikely.
If another mod registers client extensions for the same vanilla armor items, only one will apply.
Permissions
You may include this mod in any modpack — public or private, on any
platform — without asking. A link back to this page is appreciated but
not required.
You may not reupload the mod itself as a separate project.

