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:
swordmacetridentaxepickaxeshovelhoespearbowcrossbowfishing_rodshieldelytrahelmetchestplateleggingsboots
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:
materialstyperesources.maincostparticle
Not supported:
- no special state resources
Notes:
resources.mainis 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:
typeresources.maincostparticle
Not supported:
materialsis ignored because mace is a single-material item- no special state resources
Notes:
resources.mainis requiredmaceuses the vanillaMACEmaterial 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.mainresources.throwingcostparticle
Loader rules:
tridentalways usesmodel
Not supported:
materialsis ignored because trident is a single-material item- custom
typevalues are ignored - no
pulling - no
charged - no
firework - no
cast - no
blocking
Notes:
resources.mainis requiredresources.throwingis optional- if present,
resources.throwingis 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:
materialstyperesources.maincostparticle
Not supported:
- no special state resources
Notes:
resources.mainis 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:
materialstyperesources.maincostparticle
Not supported:
- no special state resources
Notes:
resources.mainis 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:
materialstyperesources.maincostparticle
Not supported:
- no special state resources
Notes:
resources.mainis 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:
materialstyperesources.maincostparticle
Not supported:
- no special state resources
Notes:
resources.mainis 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:
materialstyperesources.maincostparticle
Not supported:
- no special state resources
Notes:
resources.mainis requiredspeargenerate 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:
typeresources.mainresources.pullingcostparticle
Not supported:
materialsis ignored because bow is a single-material item- no
charged - no
firework - no
cast - no
blocking
Notes:
resources.mainis requiredresources.pullingis 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:
typeresources.mainresources.pullingresources.chargedresources.fireworkcostparticle
Not supported:
materialsis ignored because crossbow is a single-material item- no
cast - no
blocking
Notes:
resources.mainis 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:
typeresources.mainresources.castcostparticle
Not supported:
materialsis ignored because fishing rod is a single-material item- no
pulling - no
charged - no
firework - no
blocking
Notes:
resources.mainis requiredresources.castis 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.mainresources.blockingcostparticle
Loader rules:
shieldalways usesmodel
Not supported:
materialsis ignored because shield is a single-material item- custom
typevalues are ignored - no
pulling - no
charged - no
firework - no
cast
Notes:
resources.mainis requiredresources.blockingis 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.mainresources.brokenresources.wingscostparticle
Loader rules:
elytraalways usesgenerate
Not supported:
materialsis ignored because elytra is a single-material item- custom
typevalues are ignored - no
pulling - no
charged - no
firework - no
cast - no
blocking - no
throwing
Notes:
resources.mainis requiredresources.mainis the elytra item texture used in inventories and normal item renderingresources.wingsis the worn elytra wings texture used on the player's backresources.wingsis required for a valid elytra skin- if
resources.wingsis omitted, SkinEngine falls back toelytra_wings.png, which still has to exist in the skin folder resources.brokenis 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:
materialstyperesources.maincost
Armor bundle requirements:
content.armor.layer_1content.armor.layer_2- optional
content.armor.particle
Notes:
resources.mainis 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:
materialsresources.maincost
Loader rules:
chestplatealways usesgenerate
Armor bundle requirements:
content.armor.layer_1content.armor.layer_2- optional
content.armor.particle
Notes:
resources.mainis required- custom
typevalues 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:
materialsresources.maincost
Loader rules:
leggingsalways usesgenerate
Armor bundle requirements:
content.armor.layer_1content.armor.layer_2- optional
content.armor.particle
Notes:
resources.mainis required- custom
typevalues 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:
materialsresources.maincost
Loader rules:
bootsalways usesgenerate
Armor bundle requirements:
content.armor.layer_1content.armor.layer_2- optional
content.armor.particle
Notes:
resources.mainis required- custom
typevalues 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 leatherfor armor categorieschainmailfor armorcopperon Minecraft1.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, andelytraignorematerials
Practical creation order
If you do not know where to start:
- start with one melee category
- add bow or crossbow next
- add shield only when the model path is ready
- add elytra when both the item texture and wings texture are ready
- add armor only when
layer_1andlayer_2are ready too
That order matches the real complexity of the systems in code.