Skin Categories

Skin Categories

This page explains every supported item category in SkinEngine and what each one expects from your skin file.

The goal here is to be explicit, even when that means repeating the same information more than once. If an option is supported on a category, it should be listed on that category instead of being left implicit.

Full supported list

SkinEngine currently supports:

  • sword
  • mace
  • trident
  • axe
  • pickaxe
  • shovel
  • hoe
  • spear
  • bow
  • crossbow
  • fishing_rod
  • shield
  • elytra
  • helmet
  • chestplate
  • leggings
  • boots

How to read this page

For every category, check these same questions:

  • does it support materials
  • does it support type
  • does it support resources.main
  • does it support extra state resources
  • does it support cost
  • does it support particle
  • does it have forced loader rules

That is the safest way to avoid wrong assumptions while building skins.

sword

Example:

content:
  items:
    sword:
      materials:
        - iron
        - diamond
        - netherite
      type: generate
      cost: 500
      particle: CRIT
      resources:
        main: "sword.png"

Supported options:

  • materials
  • type
  • resources.main
  • cost
  • particle

Not supported:

  • no special state resources

Notes:

  • resources.main is required
  • particles trigger on melee hit and block break

mace

Example:

content:
  items:
    mace:
      type: generate
      cost: 500
      particle: CRIT
      resources:
        main: "mace.png"

Supported options:

  • type
  • resources.main
  • cost
  • particle

Not supported:

  • materials is ignored because mace is a single-material item
  • no special state resources

Notes:

  • resources.main is required
  • mace uses the vanilla MACE material only
  • particles trigger on melee hit and block break

trident

Example:

content:
  items:
    trident:
      cost: 500
      particle: CRIT
      resources:
        main: "trident.json"
        throwing: "trident_throwing.json"

Supported options:

  • resources.main
  • resources.throwing
  • cost
  • particle

Loader rules:

  • trident always uses model

Not supported:

  • materials is ignored because trident is a single-material item
  • custom type values are ignored
  • no pulling
  • no charged
  • no firework
  • no cast
  • no blocking

Notes:

  • resources.main is required
  • resources.throwing is optional
  • if present, resources.throwing is used while the player is using the trident before release
  • SkinEngine also writes a dedicated projectile definition so thrown tridents can keep the skinned look in flight
  • trident particles trail the thrown projectile

axe

Example:

content:
  items:
    axe:
      materials:
        - iron
        - diamond
      type: generate
      cost: 500
      particle: CRIT
      resources:
        main: "axe.png"

Supported options:

  • materials
  • type
  • resources.main
  • cost
  • particle

Not supported:

  • no special state resources

Notes:

  • resources.main is required
  • particles trigger on melee hit and block break

pickaxe

Example:

content:
  items:
    pickaxe:
      materials:
        - iron
        - diamond
      type: generate
      cost: 500
      particle: CRIT
      resources:
        main: "pickaxe.png"

Supported options:

  • materials
  • type
  • resources.main
  • cost
  • particle

Not supported:

  • no special state resources

Notes:

  • resources.main is required
  • particles trigger on melee hit and block break

shovel

Example:

content:
  items:
    shovel:
      materials:
        - iron
        - diamond
      type: generate
      cost: 500
      particle: CRIT
      resources:
        main: "shovel.png"

Supported options:

  • materials
  • type
  • resources.main
  • cost
  • particle

Not supported:

  • no special state resources

Notes:

  • resources.main is required
  • particles trigger on melee hit and block break

hoe

Example:

content:
  items:
    hoe:
      materials:
        - iron
        - diamond
      type: generate
      cost: 500
      particle: CRIT
      resources:
        main: "hoe.png"

Supported options:

  • materials
  • type
  • resources.main
  • cost
  • particle

Not supported:

  • no special state resources

Notes:

  • resources.main is required
  • particles trigger on melee hit and block break

spear

Example:

content:
  items:
    spear:
      materials:
        - wooden
        - stone
        - iron
        - golden
        - diamond
        - netherite
        - copper
      type: generate
      cost: 500
      particle: CRIT
      resources:
        main: "spear.png"

Supported options:

  • materials
  • type
  • resources.main
  • cost
  • particle

Not supported:

  • no special state resources

Notes:

  • resources.main is required
  • spear generate models use the handheld item parent, like other melee tools
  • spears require Minecraft/Paper 1.21.11+, regardless of material
  • particles trigger on melee hit and block break

bow

Example:

content:
  items:
    bow:
      type: generate
      cost: 500
      particle: CRIT
      resources:
        main: "bow.png"
        pulling:
          - "bow_pulling_0.png"
          - "bow_pulling_1.png"
          - "bow_pulling_2.png"

Supported options:

  • type
  • resources.main
  • resources.pulling
  • cost
  • particle

Not supported:

  • materials is ignored because bow is a single-material item
  • no charged
  • no firework
  • no cast
  • no blocking

Notes:

  • resources.main is required
  • resources.pulling is optional
  • up to three pulling states are used
  • particles can trail the fired projectile

crossbow

Example:

content:
  items:
    crossbow:
      type: generate
      cost: 500
      particle: CRIT
      resources:
        main: "crossbow.png"
        pulling:
          - "crossbow_pulling_0.png"
          - "crossbow_pulling_1.png"
          - "crossbow_pulling_2.png"
        charged: "crossbow_charged.png"
        firework: "crossbow_firework.png"

Supported options:

  • type
  • resources.main
  • resources.pulling
  • resources.charged
  • resources.firework
  • cost
  • particle

Not supported:

  • materials is ignored because crossbow is a single-material item
  • no cast
  • no blocking

Notes:

  • resources.main is required
  • all state resources are optional
  • particles can trail fired projectiles

fishing_rod

Example:

content:
  items:
    fishing_rod:
      type: generate
      cost: 500
      particle: CRIT
      resources:
        main: "fishing_rod.png"
        cast: "fishing_rod_cast.png"

Supported options:

  • type
  • resources.main
  • resources.cast
  • cost
  • particle

Not supported:

  • materials is ignored because fishing rod is a single-material item
  • no pulling
  • no charged
  • no firework
  • no blocking

Notes:

  • resources.main is required
  • resources.cast is optional
  • particles follow the fishing hook while cast

shield

Example:

content:
  items:
    shield:
      cost: 500
      particle: CRIT
      resources:
        main: "shield.json"
        blocking: "shield_blocking.json"

Supported options:

  • resources.main
  • resources.blocking
  • cost
  • particle

Loader rules:

  • shield always uses model

Not supported:

  • materials is ignored because shield is a single-material item
  • custom type values are ignored
  • no pulling
  • no charged
  • no firework
  • no cast

Notes:

  • resources.main is required
  • resources.blocking is optional
  • shield particles trigger when a player actually blocks damage
  • SkinEngine checks off-hand first, then main-hand

elytra

Example:

content:
  items:
    elytra:
      cost: 900
      particle:
        effect: END_ROD
      resources:
        main: "elytra.png"
        broken: "elytra_broken.png"
        wings: "elytra_wings.png"

Supported options:

  • resources.main
  • resources.broken
  • resources.wings
  • cost
  • particle

Loader rules:

  • elytra always uses generate

Not supported:

  • materials is ignored because elytra is a single-material item
  • custom type values are ignored
  • no pulling
  • no charged
  • no firework
  • no cast
  • no blocking
  • no throwing

Notes:

  • resources.main is required
  • resources.main is the elytra item texture used in inventories and normal item rendering
  • resources.wings is the worn elytra wings texture used on the player's back
  • resources.wings is required for a valid elytra skin
  • if resources.wings is omitted, SkinEngine falls back to elytra_wings.png, which still has to exist in the skin folder
  • resources.broken is fully optional and only changes the broken vanilla elytra item state when durability is depleted
  • elytra particles trail behind the player while gliding

helmet

Example:

content:
  armor:
    layer_1: "armor_layer_1.png"
    layer_2: "armor_layer_2.png"
    particle:
      effect: DUST
      data:
        color: "#9fd3ff"
        size: 1.0
    items:
      helmet:
        materials:
          - leather
          - chainmail
          - iron
          - gold
          - diamond
          - netherite
        type: generate
        cost: 500
        resources:
          main: "helmet.png"

Supported options:

  • materials
  • type
  • resources.main
  • cost

Armor bundle requirements:

  • content.armor.layer_1
  • content.armor.layer_2
  • optional content.armor.particle

Notes:

  • resources.main is required
  • armor particles come from content.armor.particle, not from the helmet item entry itself

chestplate

Example:

content:
  armor:
    layer_1: "armor_layer_1.png"
    layer_2: "armor_layer_2.png"
    items:
      chestplate:
        materials:
          - leather
          - chainmail
          - iron
          - gold
          - diamond
          - netherite
        cost: 500
        resources:
          main: "chestplate.png"

Supported options:

  • materials
  • resources.main
  • cost

Loader rules:

  • chestplate always uses generate

Armor bundle requirements:

  • content.armor.layer_1
  • content.armor.layer_2
  • optional content.armor.particle

Notes:

  • resources.main is required
  • custom type values are ignored
  • armor particles come from content.armor.particle

leggings

Example:

content:
  armor:
    layer_1: "armor_layer_1.png"
    layer_2: "armor_layer_2.png"
    items:
      leggings:
        materials:
          - leather
          - chainmail
          - iron
          - gold
          - diamond
          - netherite
        cost: 500
        resources:
          main: "leggings.png"

Supported options:

  • materials
  • resources.main
  • cost

Loader rules:

  • leggings always uses generate

Armor bundle requirements:

  • content.armor.layer_1
  • content.armor.layer_2
  • optional content.armor.particle

Notes:

  • resources.main is required
  • custom type values are ignored
  • armor particles come from content.armor.particle

boots

Example:

content:
  armor:
    layer_1: "armor_layer_1.png"
    layer_2: "armor_layer_2.png"
    items:
      boots:
        materials:
          - leather
          - chainmail
          - iron
          - gold
          - diamond
          - netherite
        cost: 500
        resources:
          main: "boots.png"

Supported options:

  • materials
  • resources.main
  • cost

Loader rules:

  • boots always uses generate

Armor bundle requirements:

  • content.armor.layer_1
  • content.armor.layer_2
  • optional content.armor.particle

Notes:

  • resources.main is required
  • custom type values are ignored
  • armor particles come from content.armor.particle

Material token behavior

For categories that support materials, SkinEngine accepts:

  • all
  • tier names like wood, stone, iron, gold, diamond, netherite
  • leather for armor categories
  • chainmail for armor
  • copper on Minecraft 1.21.9+ and newer
  • direct Bukkit material names like DIAMOND_SWORD

Examples:

axe:
  materials:
    - iron
    - diamond
helmet:
  materials:
    - leather
    - chainmail
    - diamond

Important notes:

  • if a material token belongs to the wrong category, the plugin rejects it
  • if no valid materials are left after validation, that item entry is skipped
  • bow, mace, trident, crossbow, fishing_rod, shield, and elytra ignore materials

Practical creation order

If you do not know where to start:

  1. start with one melee category
  2. add bow or crossbow next
  3. add shield only when the model path is ready
  4. add elytra when both the item texture and wings texture are ready
  5. add armor only when layer_1 and layer_2 are ready too

That order matches the real complexity of the systems in code.