Skin Particles

Skin Particles

SkinEngine can add real particle effects to your skins while players are actually using them in-game. That means particles are not just a cosmetic note inside a config file. They are part of live gameplay.

A skin can use particles when a player fights with a weapon, breaks or transforms blocks with a tool, shoots a bow, crossbow, or trident, casts a fishing rod, blocks with a shield, glides with a skinned elytra, or wears skinned armor.

[!INFO] SkinEngine supports all Minecraft particles. You can find the full list on Spigot API.

For particles to appear at all, three things must be true:

  • particles must be enabled in the main plugin config
  • the item or armor piece must really have a SkinEngine skin on it
  • that skin must define a particle effect

Where to set particles

You can attach a particle effect to an item category inside the skin file, or to the armor section for armor-wide effects.

In practice, item particles are used for event-based effects such as hits, shots, casts, and blocks. Armor particles are better for aura-like effects that follow the player over time.

Here is a simple example:

content:
  items:
    sword:
      resources:
        main: "sword.png"
      particle: CRIT

  armor:
    layer_1: "armor_layer_1.png"
    layer_2: "armor_layer_2.png"
    particle: DUST

[!WARNING] If your server version does not support a particle, SkinEngine cannot use it. Always match your skin setup to the version your server actually uses.

The simple way and the detailed way

There are two normal ways to define a particle.

The first is the short form. This is the easiest option, and it is usually the best place to start. You only write the particle name, and SkinEngine fills in the rest with its built-in defaults.

particle: CRIT

The second is the full form. Use this when you want to control how strong the effect looks, how spread out it is, or when the chosen particle needs extra data such as a color, a material, or a target.

particle:
  effect: DUST
  count: 4
  offset: 0.2
  extra: 0.01
  data:
    color: "#8FE9FF"
    size: 1.2

In the full form, you can control:

  • the particle type itself
  • how many particles are spawned
  • how far they can spread on each axis
  • the extra value used by that particle
  • any special data the selected particle needs

If you use offset, SkinEngine treats it as the shared value for all three axes, unless you choose to override individual axes separately.

Default behavior

If you use the short form, or if you leave optional values out, SkinEngine falls back to built-in defaults.

For item particles, the default is a slightly more visible effect: six particles, light spread on all axes, and a small extra value.

For armor particles, the default is lighter and tighter: two particles, a bit more height, and no extra value.

What happens in-game

Different skin categories use particles in different ways.

Tools

Tool particles are used by:

  • sword
  • mace
  • axe
  • pickaxe
  • shovel
  • hoe
  • spear

These particles can appear when the player hits an entity, breaks a block, strips logs with an axe, turns dirt into farmland with a hoe, or makes a dirt path with a shovel.

Bows and crossbows

Bow and crossbow particles do not stay on the item. Instead, they follow the fired projectile as a trail.

SkinEngine checks the projectile every two ticks and stops tracking it when it hits something, becomes invalid, lands on the ground, or lives too long. The current lifetime limit is 200 ticks, and the plugin tracks up to 128 projectiles at once.

Tridents

Trident particles also use projectile trail tracking.

If the held trident has a SkinEngine particle configured, the plugin follows the thrown trident in flight using the same projectile tracking limits as bows and crossbows.

Fishing rods

Fishing rod particles follow the hook while the player is in the real FISHING cast state.

Shields

Shield particles appear when a player truly blocks incoming damage with the shield raised.

SkinEngine checks the off-hand first, then the main hand, and spawns the effect on the correct side of the player model.

Elytras

Elytra particles are handled as glide trails.

If the player is currently gliding with a skinned elytra that has a particle configured, SkinEngine spawns the effect behind both wings on a repeating two-tick task.

Armor

Armor particles are handled separately from item particles. They come from the armor section of the skin file and are emitted around the player on a repeating task.

The update speed is controlled by the armor particle interval setting in config.yml. The default interval is 10 ticks.

If a player wears multiple skinned armor pieces with particle effects, SkinEngine chooses one skin to represent. The skin worn on the highest number of armor pieces wins. If that count is tied, the priority order is chestplate first, then leggings, then helmet, then boots.

Viewer range

Particles are only sent to nearby players, not to the whole server.

That distance is controlled by the particle viewer range setting in the main plugin config. The default value is 32 blocks.

Full particle list

The table below matches the current particle enum that SkinEngine parses.

If the second column says Yes, that particle needs extra setup. Click the link to jump to the explanation further down this page.

Particle Name Needs extra setup?
ANGRY_VILLAGER No
ASH No
BLOCK Yes
BLOCK_CRUMBLE Yes
BLOCK_MARKER Yes
BUBBLE No
BUBBLE_COLUMN_UP No
BUBBLE_POP No
CAMPFIRE_COSY_SMOKE No
CAMPFIRE_SIGNAL_SMOKE No
CHERRY_LEAVES No
CLOUD No
COMPOSTER No
COPPER_FIRE_FLAME No
CRIMSON_SPORE No
CRIT No
CURRENT_DOWN No
DAMAGE_INDICATOR No
DOLPHIN No
DRAGON_BREATH Yes
DRIPPING_DRIPSTONE_LAVA No
DRIPPING_DRIPSTONE_WATER No
DRIPPING_HONEY No
DRIPPING_LAVA No
DRIPPING_OBSIDIAN_TEAR No
DRIPPING_WATER No
DUST Yes
DUST_COLOR_TRANSITION Yes
DUST_PILLAR Yes
DUST_PLUME No
EFFECT Yes
EGG_CRACK No
ELDER_GUARDIAN No
ELECTRIC_SPARK No
ENCHANT No
ENCHANTED_HIT No
END_ROD No
ENTITY_EFFECT Yes
EXPLOSION No
EXPLOSION_EMITTER No
FALLING_DRIPSTONE_LAVA No
FALLING_DRIPSTONE_WATER No
FALLING_DUST Yes
FALLING_HONEY No
FALLING_LAVA No
FALLING_NECTAR No
FALLING_OBSIDIAN_TEAR No
FALLING_SPORE_BLOSSOM No
FALLING_WATER No
FIREFLY No
FIREWORK No
FISHING No
FLAME No
FLASH Yes
GLOW No
GLOW_SQUID_INK No
GUST No
GUST_EMITTER_LARGE No
GUST_EMITTER_SMALL No
HAPPY_VILLAGER No
HEART No
INFESTED No
INSTANT_EFFECT Yes
ITEM Yes
ITEM_COBWEB No
ITEM_SLIME No
ITEM_SNOWBALL No
LANDING_HONEY No
LANDING_LAVA No
LANDING_OBSIDIAN_TEAR No
LARGE_SMOKE No
LAVA No
MYCELIUM No
NAUTILUS No
NOTE No
OMINOUS_SPAWNING No
PALE_OAK_LEAVES No
POOF No
PORTAL No
RAID_OMEN No
RAIN No
REVERSE_PORTAL No
SCRAPE No
SCULK_CHARGE Yes
SCULK_CHARGE_POP No
SCULK_SOUL No
SHRIEK Yes
SMALL_FLAME No
SMALL_GUST No
SMOKE No
SNEEZE No
SNOWFLAKE No
SONIC_BOOM No
SOUL No
SOUL_FIRE_FLAME No
SPIT No
SPLASH No
SPORE_BLOSSOM_AIR No
SQUID_INK No
SWEEP_ATTACK No
TINTED_LEAVES Yes
TOTEM_OF_UNDYING No
TRAIL Yes
TRIAL_OMEN No
TRIAL_SPAWNER_DETECTION No
TRIAL_SPAWNER_DETECTION_OMINOUS No
UNDERWATER No
VAULT_CONNECTION No
VIBRATION Yes
WARPED_SPORE No
WAX_OFF No
WAX_ON No
WHITE_ASH No
WHITE_SMOKE No
WITCH No

Particles that need extra setup

Some particles need more than just their name. When that happens, SkinEngine expects a data section with the correct values. If the required data is missing, the plugin skips that particle entry instead of trying to guess what you meant.

The sections below show the exact data formats that are supported by the current SkinEngine parser.

Dust

This is used for:

  • DUST

This particle needs a color. You can also give it a custom size.

Example:

particle:
  effect: DUST
  data:
    color: "#8FE9FF"
    size: 1.2

Dust color transition

This is used for:

  • DUST_COLOR_TRANSITION

This version of dust blends from one color into another. You must provide both the starting color and the ending color. Size is optional.

Example:

particle:
  effect: DUST_COLOR_TRANSITION
  data:
    from: "#8FE9FF"
    to: "#FFFFFF"
    size: 1.0

Block particles

This is used for:

  • BLOCK
  • BLOCK_CRUMBLE
  • BLOCK_MARKER
  • DUST_PILLAR
  • FALLING_DUST

These particles need a block material. In other words, the material must exist and it must really be a block.

Example:

particle:
  effect: BLOCK
  data:
    material: ICE

Item particles

This is used for:

  • ITEM

This particle needs an item material. AIR is not valid here.

Example:

particle:
  effect: ITEM
  data:
    material: DIAMOND

Color-based particles

This is used for:

  • ENTITY_EFFECT
  • FLASH
  • TINTED_LEAVES

These particles need a color.

Example:

particle:
  effect: ENTITY_EFFECT
  data:
    color: "143,233,255"

SkinEngine accepts colors in several readable forms:

  • a hex color such as #8FE9FF
  • RGB text such as "143,233,255"
  • a section with red, green, blue
  • a section with r, g, b

Section example:

particle:
  effect: FLASH
  data:
    color:
      red: 143
      green: 233
      blue: 255

Spell particles

This is used for:

  • EFFECT
  • INSTANT_EFFECT

These particles need both a color and a power value.

Example:

particle:
  effect: EFFECT
  data:
    color: "#CC8844"
    power: 0.8

Number-based particles

This is used for:

  • DRAGON_BREATH
  • SCULK_CHARGE
  • SHRIEK

These particles need a numeric value. The first two use decimal-style values, while SHRIEK is treated as an integer.

Example:

particle:
  effect: SHRIEK
  data:
    value: 10

Trail particles

This is used for:

  • TRAIL

This particle needs a target position, a color, and a duration.

The target is written as relative coordinates. The duration must be a positive number.

Example:

particle:
  effect: TRAIL
  data:
    target:
      x: 0.0
      y: 1.0
      z: 0.0
    color: "#3366FF"
    duration: 20

Vibration particles

This is used for:

  • VIBRATION

This particle is the most detailed setup supported by SkinEngine. It needs an origin, a destination, and an arrival time.

The destination can point either to a relative block position or to an entity anchor. For entity-based destinations, SkinEngine currently supports OWNER and VIEWER.

Block destination example:

particle:
  effect: VIBRATION
  data:
    origin:
      x: 0.0
      y: 0.5
      z: 0.0
    destination:
      type: block
      target:
        x: 1.0
        y: 0.0
        z: 0.0
    arrival-time: 15

Entity destination example:

particle:
  effect: VIBRATION
  data:
    origin:
      x: 0.0
      y: 0.5
      z: 0.0
    destination:
      type: entity
      anchor: OWNER
    arrival-time: 15

Practical advice

If you are not sure where to begin, start with a simple particle name first and make sure the effect appears in-game before you tune anything else.

After that:

  • add a full section only when you need finer control
  • only add extra data when the selected particle really requires it
  • keep particle counts moderate so the effect stays clean and readable
  • use armor particles for persistent aura-style visuals
  • use item particles for moments of action such as hits, shots, casts, shield blocks, and elytra glide trails