Armor Pieces
Pieces, skins and cloth for armor — because someone else at spawn is wearing your diamond set.
For Minecraft 26.2 with Fabric · Client & Server · version 0.3.0
Downloads are on Modrinth and CurseForge, whose creator programmes support the mod. This site hosts the editor, the wiki, the gallery and the pack libraries; it does not host the mod.
You know the one. You walk into spawn in your best diamond and the first person you see is wearing the same helmet, the same chestplate, the same Sentry trim in the same netherite. Vanilla can build 1,568,239,201 unique sets of diamond armor, which sounds like plenty right up until this happens to you twice in a week.
We'll make sure that never happens again! Armor Pieces takes that number to 3 × 10⁸⁴ — more than thirty thousand unique diamond sets for every atom in the observable universe.
It gives one piece of armor four layers of decoration, each an independent choice:
- a piece hung on a socket,
- a skin that changes what the plate itself is made of,
- a cloth worn over the chest,
- and vanilla's own trim underneath them all.
Every one of them is applied at a smithing table, and none of them replaces another - a helmet can carry a skin, a trim, a crest, a browband and a pair of horns at once.
Ninety-one pieces, over twelve sockets. crest, brow, horns, pauldrons, back,
collar, vambraces, belt, tassets, knees, spurs, greaves - a plume on the helmet,
spaulders on the shoulders, a sash on the belt, spurs on the heels. Pieces are real geometry hung
on the body, not paint on the texture. A socket holds one piece and every socket has at least six
to choose from, so the choice is the expressive act. Each piece is applied with a trim material and
takes that material's colour.
Fourteen armor skins. A skin is the armor's own texture - what the plate is, rather than what is bolted to it. Plate, gothic, milanese, mail, chainmail, lorica, runic, hoplite, samurai, gambeson, brigandine, varangian, scale and lamellar. Each is recoloured through the armor material's own palette, so a skinned iron helmet still reads as iron and a modded armor material is skinned for free from the texture it already ships. A skin is paid for in the metal the piece is made of: re-skinning is re-forging.
Two cloths. A tunic or a tabard over a chestplate, carrying the design of any banner you make at a loom - so the heraldry is yours rather than a list the mod maintains. It is baked into the armor's texture rather than hung off it, so it clips nothing and the plate's own rivets and edges read through it.
Fittings. Some pieces have a second colour, set separately: a gem in the circlet, a metal buckle and a dyed strap on the sash, a dyed inlay on the greaves, a banner on the back banner. One more smithing step, one template per fitting, and the item decides where it goes.
Most of it is found rather than made. Thirty pieces have a crafting recipe, the ones where the item is plainly the piece or what it is made of; the rest turn up in the chests that suit them, each theme in its own kind of structure, with the skins and the fitting templates alongside. An advanced smithing table shows a whole set worn by a stand and takes a piece, a fitting, a trim, a skin or a cloth off again, which the smithing table cannot.
Every piece, skin and cloth is a datapack entry, a model and a texture, no code - and a pack adds its own the same way, from Blockbench, in folders of its own.
New in 0.3.0
The release that turned a set of pieces into a wardrobe.
- Seventy-one new pieces — ninety-one in total. Every one of the twelve sockets now has at
least six answers, and the six themes reach across the whole suit. Among them a family of
seven flat visor styles on the
browsocket, whose sights are real openings with your own face behind them rather than paint. - Armor skins. A third template family, and the first thing in the mod that changes the armor itself instead of adding to it. Fourteen ship, each recoloured through the armor material's own vanilla palette, so a skin costs no per-material art and a modded material gets one free.
- Cloth. A fourth layer: a Tunic or a Tabard over a chestplate, wearing the design of any banner you make at a loom, painted into the armor's texture rather than hung off it.
- Most pieces are now found rather than crafted. A loot group is one file naming a category of vanilla tables and a tag of pieces found in them; six ship, one per theme — knightly gear in strongholds and trial chambers, beast trophies in bastions, court jewellery in mansions and ancient cities, tidal pieces in shipwrecks and ocean ruins, and so on. Skins are divided over the same six, and a fitting template turns up in all of them.
- The chance belongs to the table, not to the piece. One pool per table, rolled once: a chest's odds of holding something of ours stay put however many pieces are added. Another piece changes which one you find, never how often.
- The advanced smithing table. Crafted from a smithing table, an armor stand and two iron ingots. It holds a whole set worn by a stand and lists each piece's sockets and fittings as rows of icons, with its trim, its skin and its cloth on a row of its own — and Remove is the one way any of them ever comes off.
- Thirty recipes, not ninety-one. A template recipe now ships only where the centre item is plainly the piece or what it is made of — a bell for the bells, a goat horn for the horns. The rest are found.
- One template per fitting. Gemstone, Guard, Inlay and Banner, each with its own look, name and recipe, instead of one template that guessed.
- Any recipe the mod ships can be switched off by overriding its file with
{"type": "armorpieces:disabled"}. - Pieces on the first-person hand. Vanilla shows a bare sleeve there and no armor at all;
pauldrons and vambraces now ride the hand you actually spend the game looking at.
first_person_partsinconfig/armorpieces.jsonturns it off — the mod's first setting. - Blockbench, for your pack. The plugin no longer assumes content lives in this repository: it opens a piece on the vanilla player wearing real armor, paints master, static layer and fitting masks in place, previews any trim material live, and on Save writes every file into your datapack and resource pack — which it makes, finds and zips for you.
What it does
Twelve sockets, one piece at a time
crest, brow, horns, pauldrons, back, collar, vambraces, belt, tassets, knees, spurs, greaves. A socket holds one piece, so a new crest replaces the crest — and with ninety-one pieces every socket has at least six to choose from. Seven of the sockets are mirrored pairs, so spaulders means both shoulders.
Coloured by vanilla trim materials
One grayscale master per piece is mapped onto each material's own palette at load time. A new trim material costs a piece no new art at all.
On your own hands, in first person
Vanilla draws a bare sleeve on the first-person hand and nothing else — not armor, not a trim — so the one view you spend the whole game in is the one that never showed what you were wearing. Pauldrons and vambraces show there now, on the same player model the world sees, swinging with the arm through every animation the hand already has. They are close to the camera and they are meant to be — and there is a setting to turn them off, if you would rather keep the view clear.
Fourteen armor skins
The one thing here that changes the armor itself rather than adding to it — plate, gothic, milanese, mail, chainmail, lorica, runic, hoplite, samurai, gambeson, brigandine, varangian, scale, lamellar. One greyscale master pair on vanilla's own armor grid, recoloured at load through eight shades taken from that armor material's vanilla texture, with vanilla's own panel edges and shadows mixed back over it. A skinned iron helmet still reads as iron, gold still reads as gold, and a modded armor material is skinned for free from the texture it already ships. Applied at the advanced smithing table with the piece's own reforging material — re-skinning is re-forging, and it costs the metal the piece is made of.
Cloth over the chest
A Tunic or a Tabard, applied with a cloth template and a banner, and the design is the banner's — sixteen dyes crossed with every pattern layer, made at a loom, so the heraldry is a player's choice rather than a list the mod keeps. It is painted into the armor's own texture rather than hung off it, so it moves with the armor, clips nothing, and the plate's rivets and edges read through it. It sits over the skin, under every piece and under the trim. One greyscale cut mask ships the whole feature; there is no per-material art and no per-banner art.
Fittings
A piece can declare places for a second material — gemstone, guard, inlay, banner — and a fitting template sets one: gems and metals by trim material, inlays by dye, banners from a banner made at a loom. There is a template per fitting, each with its own look and recipe, and the template with the third slot empty takes its fitting out again. Fittings are data too — a pack's new fitting gets its template from a recipe — and an effect can be gated on one.
Found in the world
Most pieces are found rather than crafted, each theme in the structures that suit it — knightly gear in strongholds and trial chambers, beast trophies in bastions, court jewellery in mansions and ancient cities, tidal pieces in shipwrecks and ocean ruins. A loot group is one file naming a category of tables and the tag of pieces found in them, so a pack adds a whole look to the world at once, or drops one piece into one chest from its own data file — the one thing a datapack cannot do for itself, since it can only replace a vanilla table whole. Armor skins are found the same way, divided over the same groups, and a fitting template turns up in every one of them. The odds belong to the table, so a chest's chance of holding something stays put however many pieces are added. A loot function puts a piece on the armor a table drops, gem and all.
Taking pieces off
The advanced smithing table, crafted from a smithing table, an armor stand and two iron ingots, holds a whole set worn by a stand at once and lists each piece's sockets and their fittings as rows of icons, with the piece's own row under them — its trim, its skin and, on a chestplate, its cloth. Pick one and Remove empties it — the one way a piece, a fitting, a trim, a skin or a cloth ever comes off. An empty place shows a hint of the template that would fill it. Its own template and material slots run the smithing table's recipes, with the result on the stand before it is paid for, and a fitting goes into the socket that is picked rather than into every piece that takes one.
One smithing recipe per socket, forever
The piece rides on the template item as a component, so a pack hands out a template and needs no recipe of its own. And any recipe the mod ships can be switched off by overriding its file with {"type": "armorpieces:disabled"} — a piece that is found rather than made, a server without fittings.
Optional behaviour
A piece may carry effects — attributes, mob effects, a projectile dodge, gliding — configured in the same JSON file. pinions is a cut-down elytra that actually flies.
A Blockbench plugin for making pieces
Opens a piece on the vanilla player wearing real armor, walk cycle and all. Master, static layer and fitting masks are painted in place, any trim material previews live with its fittings filled or empty, the name, sockets, fittings, effects and loot are a dialog, and Save writes every file the pack needs — into your own datapack and resource pack, which it makes, finds and zips for you.
Gallery
How many sets is that?
A diamond set in vanilla is one look plus a trim. Eighteen patterns times eleven materials, plus untrimmed, is 199 states per piece — and 1,568,239,201 for a set of four.
Now count that same diamond set with this mod installed. Each piece keeps all 199 of its trims and gains a skin (fourteen, or bare), a piece in each of its sockets, each piece in one of eleven materials, each piece's fittings filled or left empty — a gem from seven, a metal from four, an inlay from sixteen dyes — and the chestplate a tunic or a tabard on top.
| Vanilla diamond | With Armor Pieces | |
|---|---|---|
| Helmet | 199 | 1,833,029,934,300 |
| Chestplate | 199 | 5,113,599,898,358,700 |
| Leggings | 199 | 1,839,405,834,600 |
| Boots | 199 | 1,187,185,245 |
| Full set | 1,568,239,201 | 20,468,798,559,625,822,847,874,604,407,037,697,665,836,570,000,000 |
That is 2 × 10⁴⁹ — about 10⁴⁰ times the whole of vanilla, and roughly a sixth of the atoms in the Earth. Some smaller ways to hold it:
- The boots alone come to 1,187,185,245 arrangements: three quarters of every trimmed diamond set vanilla can build, on your feet.
- The helmet alone is 1,169 times vanilla's entire four-piece space.
- Shape alone, before a single colour is chosen — which piece sits in which socket, and nothing else — is 368,709,304,320 distinct silhouettes. 235 times vanilla's fully trimmed space, in pure geometry.
- Pick a set a second and you exhaust vanilla in fifty years. You exhaust this one in 4.7 × 10³¹ times the age of the universe.
And all of that counts a banner as a single design, which it is not. A banner is sixteen base colours and up to six layers of forty-two patterns in sixteen dyes: 1,475,646,641,940,097,552 banners, any of which can go on the back banner, the cloak, the tunic or the tabard. Count them properly and the chestplate alone reaches 7.7 × 10⁵⁰, and a full set:
3.07 × 10⁸⁴ — over thirty thousand distinct diamond sets for every atom in the observable universe. (There are about 7.3 × 10⁷⁹ of those, if you take Planck's numbers and the baryons they imply.)
And every number on this page is diamond alone, because that is what vanilla is being compared against. Diamond is one of seven armor materials, six of which take a skin — which multiplies the whole table by about thirteen hundred again, before leather has been dyed.
Nobody at spawn is wearing yours.
Installing
- Install Fabric Loader 0.19.3+ on Minecraft 26.2 (Java 25).
- Drop this mod and Fabric API into
mods/. - Install it on both sides — the client draws the pieces, the server owns their behaviour.
Needs Fabric API.
Configuration
One file, written for you on first launch: config/armorpieces.json. It is read on the client
and by the client alone — every setting in it moves pixels and nothing else, so it never has to
match the server's.
| Key | Default | What it does |
|---|---|---|
first_person_parts |
true |
Draws the pieces on your arms — pauldrons and vambraces — on the first-person hand as well as on your body. Vanilla shows a bare sleeve there and no armor at all. They sit close to the camera; false keeps the view clear. |
A change takes effect on the next launch. A key you leave out takes its default and is written back, so a setting added by a later version turns up in the file you already have — and a file that does not parse is left alone and the defaults used, so a typo costs a log line and nothing else.
Questions
Does a piece replace the armor trim?
No. Armor carries its trim and its pieces at once.
How do I put a gem in the circlet?
Craft a gemstone fitting template (an amethyst block in a ring of paper), then smithing table: template, the decorated helmet, and the gem. Every piece on the armor is offered the item, so one gem fills the stone of each piece that has one — or of the one socket picked, at the advanced smithing table. The same template with the third slot empty takes the gem out again. A guard template does the same for metals, an inlay template for dyes, a banner template for banners. Re-applying a piece at its own socket template keeps what is set in it, so changing a circlet's metal does not cost the gem.
How do I take a piece off?
At the advanced smithing table. Put the armor in one of its four slots, pick the socket's row and click Remove. What was in the piece's fittings goes with it. Picking one of the fitting icons beside the piece takes just that fitting out, and the armor's own row under the sockets holds its trim, its skin and — on a chestplate — its cloth, each taken off the same way.
Can two pieces share a socket?
No — applying a new crest replaces the crest. Several pieces may be available for one socket (horns and helm_wings both fit horns); the choice is the expressive act.
The pieces on my hands are in the way. Can I turn them off?
Yes. Set "first_person_parts": false in config/armorpieces.json and restart the game — the file writes itself on first launch. Only the first-person hand is affected; your pieces are still on your body, and still on everyone else's. It is the mod's only setting, and deliberately so: everything else about a piece is pack data rather than a preference, and nothing in that file changes what an item does, so it never has to match the server's.
Do I need the mod to add pieces?
You need the mod installed, but adding a piece takes no Java — a datapack and a resource pack. Only a brand-new effect type needs code. The authoring guide walks through it.
Changes in 0.3.0
Armor skins. A third template family beside the socket templates and the fitting templates. A
skin is the armor's own texture - what the plate is, rather than what is bolted to it or painted
over it - so a piece, a trim and a skin are three independent choices on one piece of armor.
Fourteen ship: plate, mail, gambeson, gothic, milanese, brigandine, scale, lamellar, then lorica,
varangian, hoplite, samurai and runic - and chainmail, the one that was not drawn. Each is one
greyscale master pair on vanilla's own armor grid, recoloured at load through eight shades taken
from that armor material's vanilla texture, with vanilla's own panel edges and shadows mixed back
over it - so a skinned iron helmet still reads as iron, and a modded armor material is skinned for
free from the texture it already ships. A skin is applied at the advanced smithing table with the
piece's own reforging material in the addition slot, asked of the armor item itself rather than
of a table the mod maintains: re-skinning is re-forging, and it costs the metal the piece is made
of. Chainmail armor takes no skin - its ramp is dead and its identity is the weave - and says so
through a tag a pack can disagree with; chainmail the look goes the other way, and every other
material can wear it. That fourteenth skin is the only one nobody drew.
tools/convert_chainmail_skin.py greys vanilla's own sheet, stretches the four tones it has out of
the forty-three luma levels they were compressed into, and fills the one hole in vanilla's
silhouette - a bare boot.bottom, the single texel in either sheet that Mojang did not put there.
The gradient is not invented but read back out of vanilla's own per-row means, per face, which is
what takes a ramp the checker calls dead to seven of the eight shades; the script re-runs in a
second, so a Minecraft bump that redraws chainmail.png is answered by running it again. Leather's
dyeable layer takes the skin, so dye still multiplies into it; trims are drawn
after the base layer as they always were, and are unaffected. A skin never paints a visor: the
face opening is the shape the brow parts are drawn to sit in. Every skin's template wears its own
icon, and the icon is the skin: the front of that skin's own chestplate, greyed and set in the
template card, so a hotbar of them says which look is which without a tooltip being read. The game
draws those icons itself, as the item atlas is built - a sprite source finds every skin sheet any
pack ships and an item model type of the mod's own picks between them - so a skin a PACK adds gets
an icon on the same terms the mod's do. minecraft:select, the vanilla way to do this, could never
have: its cases are one file, and a resource pack wins a file whole rather than merging it.
A skin is drawn in the same Blockbench the parts are, on a second workspace: the same figure with
the armor unlocked and nothing modelled, both master sheets read and written as rows of the
sixteen greys (armorpieces_skins, _open_skin, _skin_sheet, _skin_paint, _skin_material,
_skin_check, _save_skin), with .claude/agents/skin-author.md the profile for one session per
skin. tools/skin_sheets.py is the net every one of them shares, tools/bake_skin.py the bake
outside the game, tools/check_skin.py the check a master has to pass - unpainted texels under a
face, a silhouette with a hole in it, a ramp so narrow the material cannot show through it -
and tools/sync_skin_masters.py installs one - which saving in Blockbench does for you.
That second workspace is now a workspace rather than a set of calls. It has an Armor Skin panel
beside the piece one - which skin, the four shells on switches of their own, the pose, and the
template recipe with the same Craftable switch a part has - and a New Skin… and Skin… pair
that write the datapack half the plugin used to owe: the master pair, blank or seeded on a vanilla
material's own silhouette, the armor_skin file, its loot rows, the template recipe, the language
line, and the sheets installed into whichever resource pack you picked. The palette becomes the
sixteen levels a skin is actually written in, 0-f seventeen apart, rather than the nine stops a
part's continuous ramp gets. And a stroke over a skin shown on a material now lands on the master:
it used to land on the internal preview texture, which is never saved and is recomposited over on
the next edit, so the paint went with no message that it had - the Textures panel, which a piece
hides and a skin did not, was what made it reachable.
The other half of the contrast budget. A skin's texel is not read at the value it was drawn at:
vanilla's own texture for the material is added first, which is what keeps a skinned plate reading
as metal. Measured, that offset is +/-45 - two and a half of the sixteen levels - and between two
texels side by side vanilla can put five levels of its own, so the "shade four to five levels apart"
rule was a floor against the ramp and never against the light, and nothing said so. Now three
things do: bake_skin.py --lighting prints the swing per material and a clause of it rides in the
rule the authoring bridge injects; check_skin.py counts the adjacent pairs the light actually
overrules - bakes level, or the wrong way round - on the material that suffers worst, which the
fourteen shipped skins survive at 2-11%; and the panel draws the offset on its own, mid grey where
it changes nothing, with a slider from the pattern alone to twice the mix. The number was always in
the picture and never visible as a thing of its own.
The mod also gains its first test:
SkinBakeTest reproduces docs/plans/skin-bake-reference.json for all eight vanilla materials,
the eight shades, the sampled table and the SHA-1 of each material's lighting map, so the Java bake
and the Python one cannot drift apart unnoticed. JUnit is a build-time dependency and ships in
nothing.
Cloth. A fourth layer, after the part, the trim and the skin. A cloth is a garment cut out of the humanoid armor net, painted with a banner's design and baked into the armor's own texture - so it is not geometry, moves with the armor, clips nothing, and the plate's own rivets and edges read through it. Two ship, Tunic and Tabard, chestplate only, applied at a smithing table with a Cloth Smithing Template and a banner: the design is the banner's, so sixteen dyes crossed with every pattern layer is a player's choice rather than a list the mod maintains. The template comes from a banner pattern in a ring of paper, one item for every cloth there will ever be, and the empty addition slot takes the garment off again.
Where it sits falls out of where it is drawn and costs nothing: over the skin, because the skin is
the shell texture the cloth composites onto; under every part, because parts are an appended render
layer; under the trim, because the trim is a later pass - a surcoat would cover its trim in life,
but the trim staying visible is the mod's premise. Like a skin it ships no per-material art: one
greyscale cut mask, where alpha is the garment, value is the cloth's own folds, and the two torso
panels are where the banner's pattern goes. Both panels read from outside rather than
front-and-mirrored-back, because a tabard is two panels and not one sheet seen from behind. The
bake runs at 4x so a charge painted for a shield still lands on an 8x12 chest, mixes the armor's
own lighting in at 0.30 where a skin uses 0.35, and caches on an LRU of 64, because the key space
is unbounded - a player can wear any banner. It goes on the last, untinted layer of the equipment
asset, which is the counterpart of the skin's isShell rule and for the same reason: leather's
shell is multiplied by its dye, and a cloth composited into it would come out brown on undyed
leather and purple on blue. #armorpieces:clothable_armor ships chest armor and nothing else; the
recipe still accepts leg armor, so a pack that wants a hem ships a humanoid_leggings.png mask and
edits the tag, with no code changed. Head and foot armor are refused outright, because a helmet
draws on the humanoid sheet but its model does not sample the torso's UVs. There is no drape - a
garment that hangs is geometry, which is a part, and this is deliberately the other thing. On the
advanced smithing table a cloth has a place of its own, last on the piece's own row beside the trim
and the skin and drawn only on a piece that may wear one, so a garment goes on and comes off there
the way everything else does; at a plain smithing table taking one off is the empty addition, as a
skin's is.
Found in the world. Most parts are found rather than crafted, and the mod puts them into
vanilla's tables as those load - the one thing a datapack cannot do for itself, since it can only
replace a table whole. A loot group, data/<ns>/armorpieces/loot_group/<name>.json, is a
category of loot tables and the templates found in it: the tables, a chance, and a TAG of parts.
Six ship, over the six themes the parts are drawn in - knightly in strongholds, dungeons, trial
chamber rewards and the mansion; court in the mansion, ancient cities, end city treasure, the
desert pyramid and a village temple; beast in the bastions, the nether bridge, the jungle temple
and mineshafts; wayfarer in village houses, igloos, shipwreck supplies and ruined portals;
tidal in ocean ruins, shipwreck treasure and buried treasure; carapace in end city treasure,
the jungle temple and mineshafts - and all ninety-one parts are in one. A part joins a group by
being TAGGED, so a pack puts a whole look into the world in one file, and adds its own part to one
of ours without overriding a file of ours. The loot list on a part's own data file is unchanged
and stays the exact route, for a part that belongs in one named place: the twenty parts this mod
shipped before 0.3.0 keep theirs - wings in end cities, horns in bastions, the circlet in ancient
cities, mittens in igloos - on top of their group.
The chance now belongs to the table, not to the part, which is what makes the above possible.
One pool per table, rolled once, with a single random_chance on the POOL: 0.12 means a chest of
that kind holds one of ours about one time in eight, and goes on meaning that as parts are added -
another part changes WHICH one is found, never how often. Under the old shape, a chance per entry,
a table's real odds were 1-∏(1-c): 0.28 over the four entries already on pillager_outpost, and
climbing to near-certainty once a theme's worth of parts named one table. Where several groups and
rows name one table the highest chance wins and their members pool together, so a chest still never
holds two of ours, and a part offered twice is one entry rather than two.
All four template families are found, and the split between them is what each one means. A
skin is a look, so the fourteen divide across the six groups the way the parts do - plate,
gothic, milanese, mail, chainmail and lorica are knightly; runic, hoplite and samurai are court;
gambeson and brigandine wayfarer; varangian beast; scale tidal; lamellar carapace - on top of the
one signature chest each already had, chainmail in a mineshaft, runic in an ancient city, hoplite
in buried treasure. A fitting template is not a look but the second step of one the player
already has, and wanting a gem for the circlet in your hand is theme-blind: all six groups name
#armorpieces:common and the four are found everywhere, which is also the only route they
have. A Fitting is a dispatched codec, one record per type, so a loot field on it would have to
be added to every type including a pack's own, where a group naming a tag of fittings says the same
thing from the outside and costs nothing. Cloths keep their two hand-placed chests, the tunic in a
village armorer's and the tabard in a woodland mansion. In a full pool that lands at roughly three
quarters parts, a tenth skins and a tenth fitting templates. A second loot function,
armorpieces:set_decoration, puts
a part on a piece of armor a table hands out, with a socket, a part, a material and optionally its
fittings, so a chest can hold a helmet already wearing a gold circlet with an emerald in it.
/armorpieces stage loot <table> [rolls] rolls a table and counts what the mod put in it.
Thirty recipes, not ninety-one. A template recipe now ships only where the centre item is
plainly the part or what it is made of - a bell for the bells, a saddle for the spurs, a goat horn
for the horns, an ingot for the circlet. The sixty-one reached for because the grid happened to be
free - wolf armor for the mantle, a porkchop for the tusks, a golden chestplate for the cuffs - are
gone, and those parts are found instead. Nothing is disabled: they are recipes the mod no longer
has, and a pack that wants one writes it. check_authoring.py fails on a part with no recipe, no
loot row and no group's tag - a part that ships complete and cannot be had in survival, which no
other check could see; one that means to be creative-only says so with "loot": [].
One template per fitting. The fitting template now names the fitting it is for, the way a
socket template names its part: one item, and an armorpieces:fitting component on the stack,
with its own look and name - Gemstone Fitting Smithing Template, made from an amethyst block,
Guard from a copper ingot, Inlay from any dye, Banner from a loom, each in a ring of paper -
and a tooltip that says what it goes on and what goes in. A named template offers the third-slot
item to that fitting alone on each part, so a gemstone template and a ruby fill a circlet's stone
and do nothing to a sash; with the third slot empty it takes out that fitting and nothing else.
The bare template, with no fitting named, is unchanged: it still routes anything to the first
fitting that takes it and empties every fitting at once, so a world holding one keeps working; it
just has no recipe any more. Because the fitting is a component, a pack's own fitting gets its
template from a recipe alone, and ingredients on a fitting file supplies the tooltip's words,
with a default per type. The apply and clear recipes stay one file each.
Your own pack, in Blockbench. The plugin no longer assumes content lives in this repository.
The repository is the toolkit - still required, for the rigs, the preview and the game-asset
extraction, and the settings and the first-run message now say so - but a piece can sit anywhere:
Packs... is a list of folders the author owns, added with a folder picker; New Pack... makes a
datapack or resource pack folder with its pack.mcmeta at the format the game this mod is built
for wants; Export Pack... zips one for handing round. Pieces are found in that list, in the
repository's own places, and in the installed game's resourcepacks/ and every world's
datapacks/, and a piece has two packs: the halves of a namespace:name are paired across every
folder, the list shows both when they differ, New Armor Piece... asks for both, and every write
goes to the right one - the part file, fittings, recipes and tags to the datapack, the geometry,
textures and the language file to the resource pack. Only the mod's own namespace has masters in
tools/decoration_masters; anyone else's circlet edits its own file.
Disabling recipes. A recipe type that loads and does nothing, armorpieces:disabled. A
datapack cannot delete a file the mod ships, so it overrides the file with
{"type": "armorpieces:disabled"} instead: the recipe has no fields, matches nothing, and has no
display, so it is out of the recipe book and out of any recipe viewer that reads displays. That
makes a part loot-only (recipe/template_circlet.json), a server fitting-free
(recipe/apply_fitting.json and recipe/clear_fitting.json), or a socket closed to smithing
(recipe/apply_horns.json) - any recipe the mod has, and any other mod's just the same. Every
field but the type is ignored.
The advanced smithing table. A block, crafted from a smithing table, an armor stand and two
iron ingots, that shows a set of armor and lets what is on it come off again. Four display slots
hold a helmet, a chestplate, leggings and boots, all worn at once by an armor stand that can be
turned by dragging; an arrow beside each slot picks the piece to work on, and a box opens out of
that slot - a neck running back into it in the slot's own grey, at the slot's own height - listing
what that piece wears. A row is one socket, drawn as the socket template that carries the part with
one place after it per fitting that part declares; the last row is the piece's own - its trim,
beside it its skin, and on a chestplate its cloth, which is the only place here that is not on
every piece. Every filled icon wears a half-size second icon in its corner naming what it is made
of - the ingot behind a gold pauldron, the emerald in its stone - which is the one thing a template
icon alone never said, and the socket a row means is in its tooltip rather than written beside it.
An empty place shows a hint of the template that would fill it rather than an empty frame, the way
the vanilla smithing table shows a faint template in its own template slot; the frame is spent on
the selection instead, and the empty template slot under the stand wears the hint of whatever is
picked, so the question the picking raises is answered in the slot the answer goes into. Clicking
an icon works on it: Apply then puts a fitting into that socket alone rather than into every part
on the piece that takes one, and Remove empties whatever is picked - a part, one of its fittings,
the trim, the skin or the cloth - which is the one way any of them is ever taken off, since the
smithing table has no ingredient that means "nothing". Nothing is refunded; the template was spent
putting it on, as a trim's is. Apply itself is deliberately not a new rule: the template and
material slots plus the selected piece go to the ordinary smithing recipe lookup, so a socket
template puts a part on, a fitting template sets a stone, a skin template with the piece's own
reforging material reforges it, a cloth template with a banner clothes it, and a vanilla trim
template trims, while a recipe a pack has turned off stays off. The result is written back into the
display slot rather than into a result slot, so a helmet takes a part, then a stone, then another
part without being picked up in between, and the stand wears it before Apply is pressed, as the
smithing table's stand does. The box is always the size of the longest list a piece can have - the
chestplate's four sockets and its own row - so it does not jump as pieces are picked. Nothing is
kept in the block; everything goes back to the player when the menu closes, whether it was opened
at the block or by /armorpieces table.
A gallery on the stage. /armorpieces stage gains three modes that are for the picture rather
than the check. Its older modes are each a cross product with one axis free, which is what makes
them readable and what makes them drab - a row of identical stands in eleven colours, on plain iron,
with every fitting empty - and there is no longer a shot of the mod in them. stage pieces puts
every part in the game down exactly once, a row per socket, each on its own randomly dressed suit:
some armor, some skin over it, some colour, and something in every fitting the part declares.
stage random [count] builds whole sets the same way, nothing about them chosen - base, skin,
cloth, part, material and fittings all rolled - which is also the fastest way to find two parts that
cannot be worn at once. Both report the seed they used and take it back, so a stage worth
photographing can be built again after a texture is fixed. stage set [<name>] is the opposite:
six sets written out by hand, one per theme the parts were authored in - Knight Errant, High Court,
Wild Hunt, Far Road, Deep Tide, Chitin - each filling all twelve sockets, staged the same way every
time. stage parts and stage full are gone, being what the first two replace; bases, fittings,
skins, loot and clear are unchanged.
Tools. The Blockbench panel gains a Craftable switch beside the two recipe items: off, Save
writes the recipe with its type swapped and the pattern and items kept, so the choices survive
until it is switched back on, and the summary line says not craftable. The Part dialog gains a
Loot group - rows of table, weight and chance, the table id autocompleting from the game jar
(vanilla_assets.py --list-loot-tables) - and the summary line says where the part is found.
The New Fitting dialog takes the template's "Ingredients:" words and its two recipe items, and
writes the fitting's template recipe with the definition. check_authoring.py round-trips every
part's template recipe, switched on or off, the way it does the data files, checks every loot row
is in the shape the dialog writes, and checks every fitting's template recipe; given two folders it
checks a piece split over a datapack and a resource pack, and it checks that a skin's select
case and its icon name each other, since a case with no texture draws the missing-texture chequer
and a texture with no case is art nothing can show. gen_template_icons.py draws the four
fitting template icons beside the bare one, and cuts every skin template's icon out of that skin's
own sheet - writing the icon, the item model and the minecraft:select case together, so a skin
drawn later gets all three by existing and there is no JSON to write by hand. It does the same for
the cloths, except that a cloth's icon is its cut rather than a swatch of it - read off the mask
that ships, because a tunic's collar gap and a tabard's open flanks are the whole difference
between them and both are visible at 8x10. export_pack.py zips a pack folder with its contents
at the root, and is what the plugin's Export Pack... runs. preview_material.py takes --pack
more than once, for a piece whose two halves are two folders.
check_authoring.py grew four more checks over the year's features: every cloth's data file, the
sheet it names, its cut masks and its template recipe; the cloth icons on the skins' terms, where
the case is an object and the garment has to be read out of it; every loot group's shape and the
existence of the tag it names, since a group naming a tag nobody wrote loads without complaint and
fills no chest; and no two shaped recipes sharing a crafting grid, which is not a theoretical risk
when every template in the mod is the same ring of paper - two parts given one centre item is one
part the game silently never hands out. paint_cloth_masks.py cuts and shades both garments,
reading the net out of skin_sheets.py so the panels cannot drift from the rects the bake samples,
and preview_cloth.py composites one outside the game. shrink_shot.py crops a Blockbench
screenshot to the figure before resizing it, which is the difference between 1290 tokens of mostly
background and 113 tokens of armor, re-sent for the rest of a session either way.
Ninety-one parts. Seventy-one new parts. Sixty-four of them are every candidate in
docs/plans/part-variety.md, so each of the twelve sockets has at least six answers and the six
themes reach across the whole suit. Antlers, bandolier, beast head, buckled belt, chain of
office, claws, coronet, garters, head fins, mantle, pelt, puttees, quiver, scale shins, scale
skirt, streamers and wraps were authored by hand; nasal, spire, antennae, horsetail, girdle,
knee studs, wing cases, talons, aerials, carapace, pendant, dorsal fin, swim fins, bangles, bone
mask, epaulettes, pouch belt, thigh sheath, padding, bedroll, ears, fang necklace, shin spikes,
spine ridge, cord, loin panels, winged cops, rowel spurs, comb, cheek guards, spiked pauldrons,
buckler, laurel, scarf, cuffs, boot cuffs, browband, tusks, fanged cop, bells, lames, ruff,
chain belt, anklets, cloak, fauld and mail fringe came through the bridge below, one session per
part. Cloak is the first part after Banner to carry a real banner design: the banner fitting
is geometry rather than a mask, so its cloth is a single cube in a bone named banner.
The other seven are a family of their own: visor styles, flat faceplates on the brow socket,
which takes it from seven parts to fourteen. The mod shipped one visor, a snouted bascinet built
the way every other part is built. These are the flat answer to the same question - a plate a
quarter of a unit thick whose whole character is what has been cut out of it. A historical visor
is a plate with holes in it, and a hole is the one thing armorCutoutNoCull gives away: an
unpainted texel is absent rather than transparent, so a sight is a real opening with the player's
own face behind it, at a hue no trim material produces. Barbute is a T cut through a smooth plate
with no relief at all; Sallet Slit one ocularium under a jutting brow reinforce; Bellows Visor two
slots between three proud ribs; Great Helm a riveted reinforce cross with breaths on the sword
side; Savoyard the death's-head, a stone set in its brow; Frog-Mouth one slot at the very top over
a blank jutting face; Spectacle Visor a brille, the only one that cuts the raised bar. All seven
stay on the master, so a faceplate takes the armor's own material and a gold suit makes a gold
visor - colour is an inlay, a guard or a gemstone where the part wants one. Two paint calls each,
and no shape or brush tool anywhere in the family.
Authoring from an agent. tools/mcp is an MCP server in front of Blockbench's own MCP
plugin: an authoring profile of its tools, piece-level tools (armorpieces_open, _new,
_check, _paint, _save, _part, _set_part, _pieces, _close), and after every editing
call the same check every shipped part passes, appended to the reply - clearance and shared
planes from trace_geometry.py, unpainted faces and stray paint from the sheet checks, together
in the new tools/check_part.py, which also runs by hand over a shipped part, a pack piece or
the piece open in Blockbench. armorpieces_paint paints whole faces by name, shaded, in one call.
The plugin publishes the open piece after each edit for that check, drops the bridge's empty undo
entries, and gained a scripting surface for it. .claude/agents/part-author.md is the profile
for one session per part; docs/plans/briefs/ holds the briefs and each session's lessons.
Whole-texel nets. A box's UV net is whole texels, rounded up, everywhere: the mod hands vanilla the rounded size and shrinks each axis back with a per-axis deformation, so a 2.1-wide face no longer shares a texel column with its neighbour in game, and the plugin lays cubes out the same way. Whole sizes plus inflate remain the cleaner way to a sub-texel thickness.
License
Released under a custom license — see LICENSE.
Use it, play with it, and modify it for yourself: no permission needed, no fee. Redistribution needs written permission first. That covers re-uploading the jar or the pack zips, mirroring them, and bundling the mod in a modpack, server pack or launcher — paid or not — as well as publishing a fork. Linking to an official download page never needs permission.
Ask on the issue tracker; permission is given in writing and covers the distribution it describes.
Source on GitHub; bugs and permission requests on the issue tracker. The hosted editor runs Armor Pieces 0.3.0 at 0.3.0-11-g5d34331.