A Horse Armor Stand — the horse-armour equivalent of the vanilla armour stand. Place the rack, put horse armour on it, and it stays on display. Any item the game itself calls horse armour works, including armour from other mods, without this mod knowing that mod exists.
Install on both the client and the server. Works in singleplayer — just drop it into your mods folder.
Dependencies: Fabric & NeoForge require Architectury API. Forge requires no additional dependencies.
Free to use in any modpack — public or private, no permission needed.
Limitation (1.0.0): armour that replaces the horse with a fully custom 3D model (instead of a vanilla-style texture/equipment asset) will not use that custom model on the stand — it may draw on the standard shape or not draw at all, but the stand still holds and returns the item. Use extraHorseArmorItems / blockedHorseArmorItems in config if a pack needs to force-allow or block a specific id.

| Row | Pattern |
|---|---|
| top | Stick · Leather · Stick |
| middle | (empty) · Stick · (empty) |
| bottom | Stick · Smooth Stone Slab · Stick |
Five sticks, one leather, one smooth stone slab → 1 Horse Armor Stand (vanilla armour-stand recipe with leather in the top middle). The leather slot is the tag #horsearmorstand:stand_craft_materials (ships with minecraft:leather).
File: config/horsearmorstand.json (created on first launch). Same file and keys on Fabric, Forge, and NeoForge — ship one config for every loader.
{
"rotationStepDegrees": 45,
"emptyHandRemovesArmor": true,
"adventureModeCanInteract": false,
"extraHorseArmorItems": [],
"blockedHorseArmorItems": [],
"renderScale": 1.0,
"renderHeightOffset": 0.0,
"debugLogging": false
}
Keys:
rotationStepDegrees (45, range 1–180) — degrees per sneak-right-click; also the snap step for a freshly placed stand.emptyHandRemovesArmor (true) — empty-hand right-click undresses the stand. Set false on a display server so visitors cannot undress exhibits.adventureModeCanInteract (false) — whether adventure-mode players may dress, undress, turn, or break a stand.extraHorseArmorItems ([]) — item ids accepted in addition to what the game classifies as horse armour.blockedHorseArmorItems ([]) — item ids refused even if the game calls them horse armour (wins over the list above).renderScale (1.0, range 0.25–2.0) — display size multiplier (1.0 = a real horse).renderHeightOffset (0.0, range −1.0–1.0) — lift or sink the display, in blocks.debugLogging (false) — log every accept/refuse decision when debugging modded armour.Item ids are forgiving: Iron_Horse_Armor, iron horse armor, and minecraft:iron_horse_armor all match; a missing namespace defaults to minecraft. Out-of-range values are clamped on load. Unknown keys keep their defaults.
Force-allow one mod's item:
{ "extraHorseArmorItems": ["my_mod:steel_horse_armor"] }
Block one item even though the game calls it horse armour:
{ "blockedHorseArmorItems": ["some_mod:cursed_barding"] }
Recipe and craft-material tag are datapack-driven — no jar rebuild and no config required for those.
Override #horsearmorstand:stand_craft_materials:
{
"replace": true,
"values": ["minecraft:iron_ingot", "minecraft:copper_ingot"]
}
| Minecraft | Path |
|---|---|
| 1.19.2, 1.20.1 | data/horsearmorstand/tags/items/stand_craft_materials.json |
| 1.21.1+ | data/horsearmorstand/tags/item/stand_craft_materials.json |
"replace": false adds to the default leather instead of replacing it.
Keep recipe id horsearmorstand:horse_armor_stand so yours overrides the built-in one.
| Minecraft | Path | Ingredient form | Result key |
|---|---|---|---|
| 1.19.2, 1.20.1 | data/horsearmorstand/recipes/horse_armor_stand.json |
{"item": "minecraft:stick"} |
"item" |
| 1.21.1 | data/horsearmorstand/recipe/horse_armor_stand.json |
{"item": "minecraft:stick"} |
"id" |
| 1.21.11, 26.2, 26.3 | data/horsearmorstand/recipe/horse_armor_stand.json |
"minecraft:stick" |
"id" |
To disable crafting, override with an unsatisfiable recipe (e.g. a single minecraft:barrier) — there is no config toggle for this on purpose (a datapack override works on every supported line).
Translations (resource pack): assets/horsearmorstand/lang/<locale>.json
item.horsearmorstand.horse_armor_standitem.horsearmorstand.horse_armor_stand.tooltipentity.horsearmorstand.horse_armor_standPlease report any bugs, errors, or feature suggestions on Discord: https://discord.gg/HTkn94BXmA
My other mods that I recommend.