Introduction
What ExyliaArmorSkin is: a colour and a trim drawn over any armour piece with packets, while the real item keeps everything it had.
ExyliaArmorSkin puts a skin on a piece of armour. A skin is a colour, an optional trim and an optional animation, and it is drawn on the way to the client: the netherite chestplate stays a netherite chestplate on the server, and everyone sees blue leather with a vex trim.
The armour itself is never converted. Applying a skin writes one value into the item's data —
exyliaarmorskin:skin, the skin id — and nothing else changes. Enchantments, attributes, durability,
custom model data and any other plugin's data stay exactly where they were.
What the client is shown
| On the real item | On the visual |
|---|---|
| Netherite chestplate | The leather piece of the same slot, in the skin's colour |
| Its trim, or none | The skin's trim, when the skin sets one |
| Its display name | The same name, or the vanilla name of the real material |
| Its lore | The same lore, then a blank line, then the armor-lore lines |
| Its enchantments | Hidden, but the glint is kept |
| Its durability | The real damage and the real maximum, so the bar reads true |
| Its attributes | Hidden, and never replaced by leather's |
Who sees a skin
| Viewer | Sees |
|---|---|
| Everyone tracking the wearer | The skin, on the body |
| The wearer, in their own inventory and paper doll | The skin |
| The wearer in creative | The real armour — a creative client echoes its slots back to the server, so it must be shown the truth |
| Anyone looking at a skinned piece in a chest, hotbar or on the cursor | The real item with the skin's lore lines added |
| Everyone, when the wearer lacks that skin's permission | The real armour — the id stays on the item, or the row stays in the wardrobe, and the look returns with the node |
| Anyone looking at an elytra | The elytra. It sits in the chest slot but is not armour, and dressing it as a chestplate would cost the wearer their flight |
What ships
Twenty skins in skins.yml — every one of them animated — and twenty-one animations in
animations.yml, built from seven animation types: rainbow, pulse, frames, wave, sweep,
bloom and flicker. Each skin also
carries a set bonus: particles around the body, a line when the set closes and another when it
breaks, once every piece it fits is worn with it.
Each skin owns a permission derived from its id, exyliaarmorskin.skin.<id>, with a node per slot
underneath it (…skin.<id>.helmet), and by default a player needs it both to wear the skin and to be
seen wearing it.
Two ways a skin gets worn
| Way | Whose it is | Which server it suits |
|---|---|---|
| A skin item | The armour's: one value is written onto the piece and travels with it through chests, trades and deaths. | Survival, economy |
| The wardrobe | The player's: stored per player and per slot in a table, and it lands on whatever they equip. | Practice, PvP |
behaviour.mode decides which is read — item, wardrobe or both — and is covered in
The wardrobe.
A skin item is used by dragging: drop it onto a piece of armour in your own inventory and it is
applied; drop a remover onto skinned armour and the skin comes off and is handed back as the item
again. The wardrobe is /wardrobe: one screen, click a slot, click a skin.
An applied skin item writes a single value onto the piece; a wardrobe choice writes nothing at all. Everything else is packets, so what any other plugin reads from that armour is exactly what it had.
The jars it needs, the files it writes and the wardrobe table.
First stepsGive yourself a skin, wear it, take it off, then write your own.
The wardrobeOne screen that dresses the player instead of the armour.
SkinsEvery key in skins.yml, and the twenty that ship.
The seven types, their options, and the twenty-one presets.
Something missing on this page? Tell us on Discord