Description
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.
What it does
- Place — right-click a block to place the stand on that face, standing on the surface and facing you (nothing places if there is no room).
- Dress / Swap — right-click with horse armour to put it on; whatever was there returns to your inventory.
- Undress — right-click with an empty hand to take the armour off (can be disabled in config).
- Turn — sneak + right-click to rotate (default 45° per click); sneaking always turns, whatever is in your hand.
- Break — hit once to drop the stand and its armour (creative: armour only; explosions destroy the stand and leave the armour on the ground).
- Stays Put — armour is saved with the world; the stand does not fall if the block under it is mined (like an item frame).
- Modded Armour — accepts whatever the game classifies as horse armour (and datapack-made horse armour on 1.21.11+). Drawn with the vanilla horse-armour model, so it looks on the stand as it looks on a horse.
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.
Crafting

| 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).
Configuration
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. Setfalseon 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"] }
For Modpack Creators
Recipe and craft-material tag are datapack-driven — no jar rebuild and no config required for those.
Change what the stand is crafted from
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.
Replace or disable the recipe
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_stand
Details
- Real entity on the server, drawn on the client (like a vanilla armour stand).
- Creative tab: Functional Blocks (next to the vanilla armour stand).
- Sounds: vanilla armour-stand place/break; vanilla horse-armour sound when armour goes on or off. No particles.
- Ships 10 languages: English, Russian, Simplified Chinese, Spanish, French, German, Japanese, Brazilian Portuguese, Korean, and Italian.
Feedback
Please report any bugs, errors, or feature suggestions on Discord: https://discord.gg/HTkn94BXmA
More mods by Nikrecs: LeashAll · Better Caravans
My other mods that I recommend.


