Content generated with AI — it may contain mistakes.

Configuring

Effects

What a skin does beyond looking different: the equip and unequip effects, the ambient it repeats while worn, and the set bonus for wearing every piece it fits.

Every skin may declare an effects block. All of it is optional, and a skin with none simply looks different and does nothing else.

skins.yml
skins:
  inferno:
    effects:
      on-equip:
        sound:
          name: ITEM_ARMOR_EQUIP_NETHERITE
          volume: 0.8
          pitch: 1.2
        title:
          text: '{warning}&lINFERNO'
          subtitle: '{letters}The armour burns'
      on-unequip:
        sound:
          name: BLOCK_FIRE_EXTINGUISH
      ambient:
        particle: 'FLAME|5|0.3|0'
        sound: ''
        interval: 1.0
        radius: 32.0
      set:
        on-complete:
          sound:
            name: ITEM_FIRECHARGE_USE
            volume: 1.0
            pitch: 1.4
        on-break: {}
        ambient:
          particle: 'FLAME|4|0.4|0.01'
          sound: ''
          interval: 0.25
          radius: 32.0
BlockWhen it runs
on-equip / on-unequipThe moment a piece with this skin goes on or comes off.
ambientRepeated at each worn piece, at that piece's own height.
setOnce every piece the skin fits is worn with it — see Set bonus.

on-equip and on-unequip

Both are standard ExyliaLib effects, so each one may carry any combination of six sections. They are played to the wearer.

SectionKeys
titletext, subtitle, fade-in, stay, fade-out, countdown, time-style
action-bartext, duration, countdown, time-style
boss-bartext, colour, overlay, countdown, count-up, progress, time-style
soundname, volume, pitch, category
particlename, count, spread, speed
fireworkcolours, fades, shape, flicker, trail

A section that says nothing is left out of the file entirely, which is why the default skins.yml shows no sound: block under on-equip. Write the section by hand and it is read from then on. The full reference lives in the ExyliaLib effects module.

They fire on a real equip, not on every redraw

on-equip plays when a piece is equipped or when its skin changes on the body. Joining, respawning, changing world, /armorskinsadmin refresh and /armorskinsadmin reload all rebuild the visual silently — a player logging in is not greeted by four titles.

ambient

Repeated for as long as the piece is worn.

KeyDefaultWhat it is
particle''NAME|count|spread|speed. Empty for none.
sound''NAME|volume|pitch. Empty for none.
interval1.0Seconds between repetitions. Values below 0.05 are raised to it.
radius32.0Blocks around the player that can see or hear it. Values below 1.0 are raised to it.

Both lines are pipe-separated, and a namespaced key survives because the colon is never a separator: minecraft:flame|10|0.4|0.01 is valid. The particle line also accepts the longer NAME|count|dx|dy|dz|speed form when you want the spread to differ per axis.

Where it plays

At the wearer's feet plus the height of the piece the skin is on, so four skinned pieces are four different heights:

PieceHeight
helmet1.7
chestplate1.2
leggings0.7
boots0.2

What it costs

One repeating task per worn piece that declares an ambient, bound to the player's entity so Folia is happy and so it dies with them. It is cancelled the moment the piece comes off, the skin changes, or the player quits; nothing survives a plugin disable.

An interval of 0.05 is a task every tick, per piece, per player

The floor exists so a typo cannot ask for less, not as an invitation. A particle once a second on a chestplate is what the defaults are shaped for.

Set bonus

effects.set fires when a player wears every piece the skin fits with that same skin. For a skin with an empty pieces list that means all four; for golden_sentry, which fits only the helmet and the chestplate, two pieces complete the set.

KeyWhat it is
on-completeAn effect played once, the moment the set becomes complete.
on-breakAn effect played once, the moment it stops being complete.
ambientThe same four keys as the per-piece ambient, played around the player at a fixed height of 1.0 while the set holds.

The set is judged from the topmost skinned piece downwards: whatever skin sits in the first occupied slot is the only one that can complete. Three inferno pieces and an ocean helmet complete nothing.

One extra timer, and only while the set holds

The set ambient is a single timer per player, on top of the per-piece ones. It is cancelled the tick the set breaks, when the wearer quits, and on disable.

What the defaults ship

Every shipped skin now carries the full show: a sound as it goes on, a particle around the body while the set holds, an action bar line — ✦ Full set » <NAME> — when it closes and ✧ Set broken when it ends.

SkinSet ambient particleIntervalon-equip soundon-complete sound
rainbowNOTE|3|0.5|00.5 sBLOCK_NOTE_BLOCK_CHIMEENTITY_PLAYER_LEVELUP
pastelEND_ROD|2|0.4|00.5 sBLOCK_AMETHYST_BLOCK_CHIMEBLOCK_AMETHYST_BLOCK_CHIME
infernoFLAME|4|0.4|0.010.25 sITEM_FIRECHARGE_USEENTITY_BLAZE_SHOOT
oceanBUBBLE_POP|3|0.4|00.3 sAMBIENT_UNDERWATER_ENTERENTITY_DOLPHIN_SPLASH
heartbeatHEART|1|0.3|01.2 sENTITY_WARDEN_HEARTBEATENTITY_WARDEN_HEARTBEAT
toxicSNEEZE|2|0.4|0.020.4 sENTITY_CREEPER_HURTENTITY_CREEPER_PRIMED
galaxyEND_ROD|2|0.5|0.010.4 sBLOCK_PORTAL_TRIGGERBLOCK_END_PORTAL_FRAME_FILL
auroraGLOW|3|0.5|00.4 sBLOCK_AMETHYST_CLUSTER_PLACEBLOCK_BEACON_ACTIVATE
emberSMALL_FLAME|3|0.4|0.010.4 sBLOCK_FIRE_AMBIENTITEM_FIRECHARGE_USE
voltageELECTRIC_SPARK|4|0.4|0.050.25 sBLOCK_COPPER_BULB_TURN_ONENTITY_LIGHTNING_BOLT_IMPACT
tempestCLOUD|3|0.5|0.020.4 sENTITY_BREEZE_WIND_BURSTENTITY_LIGHTNING_BOLT_THUNDER
sakuraCHERRY_LEAVES|3|0.5|00.4 sBLOCK_CHERRY_WOOD_PLACEBLOCK_NOTE_BLOCK_CHIME
shogunCRIT|3|0.4|0.050.5 sITEM_ARMOR_EQUIP_NETHERITEENTITY_PLAYER_ATTACK_SWEEP
dragonfireLAVA|2|0.4|00.35 sENTITY_ENDER_DRAGON_FLAPENTITY_ENDER_DRAGON_SHOOT
void_dragonDRAGON_BREATH|3|0.5|0.010.35 sENTITY_ENDER_DRAGON_GROWLENTITY_ENDER_DRAGON_GROWL
frostbiteSNOWFLAKE|4|0.5|0.010.4 sBLOCK_POWDER_SNOW_STEPBLOCK_GLASS_BREAK
neonGLOW|3|0.4|00.3 sBLOCK_BEACON_POWER_SELECTBLOCK_BEACON_POWER_SELECT
verdantFALLING_SPORE_BLOSSOM|2|0.5|00.5 sBLOCK_MOSS_PLACEBLOCK_AZALEA_PLACE
bloodmoonCRIMSON_SPORE|4|0.5|00.4 sENTITY_WOLF_GROWLENTITY_WOLF_HOWL
celestialWAX_ON|3|0.5|00.4 sBLOCK_AMETHYST_BLOCK_CHIMEITEM_TOTEM_USE

Every one of them uses a radius of 32 blocks, an equip sound at volume 0.8 and a completion sound at volume 1.0, pitch 1.4, category PLAYERS. on-break is the same everywhere: BLOCK_BEACON_DEACTIVATE at volume 0.7 with the broken-set line.

Swapping one complete set for another is silent

Changing straight from a complete inferno set to a complete ocean set plays ocean's on-complete but not inferno's on-break — the break line is for a set that actually ended.

Applying and removing

Putting a skin on and taking it off play their own effect, and those two live in config.yml rather than on the skin, because they belong to the system:

config.yml
effects:
  on-apply:
    sound:
      name: BLOCK_SMITHING_TABLE_USE
      volume: 1.0
      pitch: 1.2
  on-remove:
    sound:
      name: BLOCK_GRINDSTONE_USE
      volume: 1.0
      pitch: 1.0

Both are full ExyliaLib effects, both are played to the player who did it, and both only fire on a successful drag in the inventory — a refused apply plays nothing, and the API plays nothing either.

Something missing on this page? Tell us on Discord