Not Cosmetic Armor
Cosmetic Armor Reworked gives you two sets of armor: one you wear for looks, one for stats. This addon closes the gap. The cosmetic set actually behaves like worn armor — what you see is what you get.
What works from a cosmetic slot
- Attributes — armor, toughness, knockback resistance, movement speed and anything else the item declares are added on top of your real armor. Modifier UUIDs are regenerated per player and per slot, so they never collide with the real set.
- Enchantments — Protection, Feather Falling, Thorns, Respiration and the rest apply, and they stack with the real armor's enchantments (vanilla still caps total EPF at 20). Both sides are covered, so client-side checks such as water breathing and flight see the cosmetic piece too.
- Item ticks —
inventoryTickand Forge'sonArmorTickrun for cosmetic items, so modded armor that does its work on tick (energy storage, jetpacks, water breathing upgrades) behaves normally. - Durability — damage taken by the real armor is mirrored onto the cosmetic piece, Unbreaking rolls included.
- Movement — if a cosmetic item changes your velocity, the change is sent back to you, so a jetpack in a cosmetic slot actually lifts you.
- Mod equip checks — mods that ask
getItemBySlot/getArmorSlotssee the cosmetic item. Set bonuses, flight permissions, damage-reduction events and spell containers all follow. The real armor keeps working as real armor: this mod never removes it, never rewrites the armor inventory outside a tick, and has no renderer of its own. Cosmetic Armor Reworked still handles the looks.
Requirements
- Minecraft 1.20.1, Forge 47.x, Java 17
- Cosmetic Armor Reworked — required, on the client and the server
Install
- Put Cosmetic Armor Reworked (1.20.1) in
mods/. - Put
notcosmeticarmor-1.20.1-<version>.jarinmods/on both the client and the server. - Run
/notcosmeticarmor status(permission level 2).car: detectedandmode=INTERLEAVEmean it is live.
Tested with
| Mod | What works from the cosmetic slot | |---|---| | Tinkers' Construct + Mantle | attributes and durability | | Iron Jetpacks + Cucumber | flight | | ManaitaMTK | zero damage, no death | | Advanced AE | quantum helmet water breathing | | Project E | gem armor flight, step assist, saturation | | Mekanism | MekaSuit effects stay active with cosmetics worn on top | | fantasy_ending + EndingLib | 4-piece set bonus, shield, damage nullification, revive | | Sophisticated Backpacks | a backpack in the cosmetic chest opens with B and renders on your back | | Apotheosis | affix attributes and damage-reduction affixes | | Iron's Spellbooks | upgrade orb attributes and inscribed spells | Armor that uses the vanilla attribute and durability path should work the same way.
Configuration
config/notcosmeticarmor-server.toml. Everything is on by default.
| Key | Meaning |
|---|---|
| general.enabled | master switch |
| behavior.mirrorAttributes | add the cosmetic item's attribute modifiers |
| behavior.overrideQueries | report the cosmetic item as worn armor |
| behavior.interleave | keep the cosmetic item visible inside the tick window |
| behavior.tickCosmeticItems | tick cosmetic items |
| behavior.cosmeticDurability | mirror durability damage |
| behavior.ignoreSkinArmorFlag | also use slots CAR flags as "skin armor" |
| behavior.realPriorityNamespaces | namespaces whose real armor wins when both slots are filled (["mekanism"] by default) |
| compat.patchProjectE | let Project E's flight and step-assist checks see cosmetics |
| compat.patchSophisticatedBackpacks | let the backpack search see a cosmetic chest |
Commands
/notcosmeticarmor status
/notcosmeticarmor cosmetic <feet|legs|chest|head> <item id|none|hand>
/notcosmeticarmor probe
status prints the CAR state, the mode, every slot's real and cosmetic item, modifier counts, armor points and
durability. cosmetic swaps a cosmetic slot without leaving the world, and hand copies the held stack with its NBT.
Known limits
- Enchantment damage reduction is capped by vanilla (EPF 20 = 80%).
- Jetpack thrust is one stack's worth: a real and a cosmetic jetpack do not stack, the real one wins.
- Mods that read the raw
Inventory#armorlist do not see cosmetics. Project E and Sophisticated Backpacks have bundled patches; more can be added through the config. - Slots listed in
behavior.realPriorityNamespacesshow the real armor to mods when both slots are filled, which is what keeps the MekaSuit's abilities alive under a cosmetic set. - Anything that reads
getItemBySlot/getArmorSlotssees the cosmetic item, including cheat-style mods. Do not put this on a server where that matters. - Cosmetic armor does not provoke piglins, because vanilla decides that by checking worn armor.
Links
- Source and issue tracker: https://github.com/code-onigiri/not-cosmetic-armor
- Changelog: https://github.com/code-onigiri/not-cosmetic-armor/blob/main/CHANGELOG.md
Licensed under MIT.

