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, orno_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:
successwrong_threadinvalid_inputfeature_disabledskin_not_foundunsupported_itemblocked_itempermission_deniedeconomy_unavailableinsufficient_fundseconomy_charge_faileditem_model_unavailablealready_appliedcancelled
Notes:
permission_deniedonly matters when permission checking is still enabledeconomy_unavailableandinsufficient_fundsonly matter when cost checking is still enabledeconomy_charge_failedcan happen during the real apply, when SkinEngine tries to withdraw the skin costcancelledusually 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:
successwrong_threadinvalid_inputno_skincancelled
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 keyonly has a value in the skin apply eventskinengine event sourceis available in both apply and clear events- current event source values are
apiandgui
Events
SkinEngine exposes two cancellable Bukkit events to Skript:
skin applyskin clear
Patterns:
[skinengine] skin apply
[skinengine] skin clear
Inside those events:
playeris the affected playerevent-itemis the result itempast event-itemis 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 toolfor 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