Skript Addon

Skript Addon for SkinEngine

SkinEngine can register its own Skript syntax when the Skript plugin is present during startup. No extra bridge plugin is needed.

Once both plugins are loaded, you can use Skript to:

  • open the SkinEngine GUI
  • check whether an item already has a SkinEngine skin
  • apply and clear skins
  • preview apply and clear results before changing the item
  • react to SkinEngine apply and clear events

Important behavior

A few practical rules matter more than anything else:

  • apply and clear only write the item back when the operation succeeds
  • if the operation fails, the original item expression stays unchanged
  • mutation syntax needs a changeable target such as player's tool
  • status expressions return lowercase names such as success, permission_denied, or no_skin

That means real inventory targets work well. Temporary copied values do not.

Conditions

Check whether SkinEngine is available

skinengine is available

Alternative form:

the skinengine plugin is available

This returns true only when SkinEngine has registered its API service and reports itself as available.


Check whether an item has a SkinEngine skin

player's tool has a skinengine skin

Pattern:

%itemstack% has [a] [skinengine] skin

Effects

Open the SkinEngine GUI

open skinengine gui for player

Pattern:

open [the] skinengine gui for %player%

This opens the main SkinEngine GUI for the target player.


Apply a skin with normal checks

apply skinengine skin "frostfall/frostblade" to player's tool for player

Patterns:

apply [the] skinengine skin %string% to %itemstack% for %player%
apply [the] skinengine skin %string% to %slot% for %player%

This uses SkinEngine's normal strict behavior. Permission checks still apply, and any configured skin cost is still checked and charged.


Apply a skin while ignoring permission

apply skinengine skin "frostfall/frostblade" to player's tool for player ignoring permission

Patterns:

apply [the] skinengine skin %string% to %itemstack% for %player% ignoring permission
apply [the] skinengine skin %string% to %slot% for %player% ignoring permission

Use this when your own Skript logic should allow the skin even if the player does not have the normal SkinEngine permission node.

Cost and economy checks still stay active in this form.


Apply a skin while ignoring cost

apply skinengine skin "frostfall/frostblade" to player's tool for player ignoring cost

Patterns:

apply [the] skinengine skin %string% to %itemstack% for %player% ignoring cost
apply [the] skinengine skin %string% to %slot% for %player% ignoring cost

Use this when SkinEngine should still respect permission checks, but should not require or charge the configured skin cost.


Apply a skin while ignoring both permission and cost

apply skinengine skin "frostfall/frostblade" to player's tool for player ignoring permission and cost

Patterns:

apply [the] skinengine skin %string% to %itemstack% for %player% ignoring permission and cost
apply [the] skinengine skin %string% to %slot% for %player% ignoring permission and cost

This is the most permissive form. It skips both checks and only asks SkinEngine to do the actual skin application.


Clear a skin from an item

clear skinengine skin from player's tool for player

Patterns:

clear [the] skinengine skin from %itemstack% for %player%
clear [the] skinengine skin from %slot% for %player%

Expressions

Get the current skin key of an item

set {_key} to skinengine skin key of player's tool

Pattern:

[the] skinengine skin key of %itemstack%

This returns the current skin key, such as frostfall/frostblade, or no value if the item is not skinned.


Get all registered skin keys

loop all skinengine skin keys:
    send "%loop-value%" to player

Pattern:

all [the] skinengine skin keys

This returns all currently loaded skin keys from all loaded packs.


Preview apply status with normal checks

set {_status} to skinengine apply status of player's tool for player with skin "frostfall/frostblade"

Pattern:

[the] skinengine apply status of %itemstack% for %player% with skin %string%

This asks what would happen if SkinEngine tried to apply the skin right now under the normal strict rules.


Preview apply status while ignoring permission

set {_status} to skinengine apply status of player's tool for player with skin "frostfall/frostblade" ignoring permission

Pattern:

[the] skinengine apply status of %itemstack% for %player% with skin %string% ignoring permission

This is useful when you want to know whether the item and skin would otherwise work, without letting the permission requirement decide the result.


Preview apply status while ignoring cost

set {_status} to skinengine apply status of player's tool for player with skin "frostfall/frostblade" ignoring cost

Pattern:

[the] skinengine apply status of %itemstack% for %player% with skin %string% ignoring cost

This is useful when you want to ignore the economy side and only check whether everything else is valid.


Preview apply status while ignoring both permission and cost

set {_status} to skinengine apply status of player's tool for player with skin "frostfall/frostblade" ignoring permission and cost

Pattern:

[the] skinengine apply status of %itemstack% for %player% with skin %string% ignoring permission and cost

This gives you the cleanest compatibility check, because it removes both permission and economy from the decision.

Current apply status values:

  • success
  • wrong_thread
  • invalid_input
  • feature_disabled
  • skin_not_found
  • unsupported_item
  • blocked_item
  • permission_denied
  • economy_unavailable
  • insufficient_funds
  • economy_charge_failed
  • item_model_unavailable
  • already_applied
  • cancelled

Notes:

  • permission_denied only matters when permission checking is still enabled
  • economy_unavailable and insufficient_funds only matter when cost checking is still enabled
  • economy_charge_failed can happen during the real apply, when SkinEngine tries to withdraw the skin cost
  • cancelled usually means another plugin or script cancelled the underlying SkinEngine event

Preview clear status

set {_status} to skinengine clear status of player's tool for player

Pattern:

[the] skinengine clear status of %itemstack% for %player%

Current clear status values:

  • success
  • wrong_thread
  • invalid_input
  • no_skin
  • cancelled

Read SkinEngine event values

Inside SkinEngine events you can use:

skinengine event skin key
skinengine event source

Patterns:

[the] skinengine event skin key
[the] skinengine event source

Notes:

  • skinengine event skin key only has a value in the skin apply event
  • skinengine event source is available in both apply and clear events
  • current event source values are api and gui

Events

SkinEngine exposes two cancellable Bukkit events to Skript:

  • skin apply
  • skin clear

Patterns:

[skinengine] skin apply
[skinengine] skin clear

Inside those events:

  • player is the affected player
  • event-item is the result item
  • past event-item is the original item before the SkinEngine action

For skin apply you also get:

  • skinengine event skin key

For both events you also get:

  • skinengine event source

Usage examples

Open the GUI safely

command /skins:
    trigger:
        if skinengine is available:
            open skinengine gui for player
        else:
            send "&cSkinEngine is not available right now." to player

Apply a specific skin normally

command /frostblade:
    trigger:
        if player's tool is air:
            send "&cYou must hold an item." to player
            stop
        apply skinengine skin "frostfall/frostblade" to player's tool for player

Let an admin bypass the normal permission check

command /grantskin <text>:
    permission: skinadmin.grant
    trigger:
        apply skinengine skin arg-1 to player's tool for player ignoring permission

Grant a paid skin for free

command /rewardskin <text>:
    permission: skinadmin.reward
    trigger:
        apply skinengine skin arg-1 to player's tool for player ignoring cost

Check status before applying

command /applyskin <text>:
    trigger:
        set {_status} to skinengine apply status of player's tool for player with skin arg-1
        if {_status} is not "success":
            send "&cCannot apply skin: %{_status}%." to player
            stop
        apply skinengine skin arg-1 to player's tool for player
        send "&aSkin applied."

Check raw compatibility without permission or economy getting in the way

command /canuseskin <text>:
    trigger:
        set {_status} to skinengine apply status of player's tool for player with skin arg-1 ignoring permission and cost
        if {_status} is "success" or {_status} is "already_applied":
            send "&aThis item setup is compatible with that skin."
        else:
            send "&cThis skin still cannot be used here: %{_status}%."

Clear the current skin

command /clearskin:
    trigger:
        set {_status} to skinengine clear status of player's tool for player
        if {_status} is "no_skin":
            send "&eThat item has no SkinEngine skin." to player
            stop
        if {_status} is not "success":
            send "&cCannot clear skin: %{_status}%." to player
            stop
        clear skinengine skin from player's tool for player
        send "&aSkin cleared."

Read the skin key from the held item

command /whatskin:
    trigger:
        if player's tool has skinengine skin:
            send "&7Skin: &f%skinengine skin key of player's tool%" to player
        else:
            send "&7This item does not have a SkinEngine skin."

React to skin application

on skin apply:
    broadcast "&7%player% applied &f%skinengine event skin key%&7 via &f%skinengine event source%&7."

Block a specific skin in Skript

on skin apply:
    if skinengine event skin key is "frostfall/admin_only":
        cancel event
        send "&cThat skin is blocked by a Skript rule." to player

Practical notes

  • skin keys use the format <pack_id>/<skin_id>
  • SkinEngine syntax is registered only if Skript is present during plugin startup
  • use status expressions when you want predictable failure handling
  • use slot targets or changeable item expressions such as player's tool for apply and clear
  • ignoring permission does not ignore cost
  • ignoring cost does not ignore permission
  • if another plugin or script cancels SkinEngine events, apply and clear can fail with cancelled