DUXPLIMA Documentation

Skin

Player skins by name, by link or from a file, with Bedrock and cracked servers covered.

Skin gives every player a face without a second plugin. They take one by name (/skin Notch), from an image on the web (/skin url <link>) or from one you dropped on the server (/skin file <name>), and drop it again with /skin clear. Nobody has to type anything for the common case: a cracked server dresses a paid account in its real skin, a Bedrock player arrives wearing their Bedrock skin, and everyone else is dressed from a pool you choose instead of appearing as Steve.

Module skin · disabled by default · modules/skin/config.conf

Commands

CommandWhat it doesPermission
/skin (/skins)Wear the skin of another account, an image on the web, or one of the server's own.uxmessentials.skin.use

/skin carries its own subcommands: set <name> [player], url <link> [slim], file <name> [slim], clear [player], update, drop <player>, info <player> and purge <name>. /skin <name> is the short form of set.

Permissions

NodeDefaultGrants
uxmessentials.module.skinopHot-reload / inspect the skin module (the skin a player wears).
uxmessentials.skin.dropop/skin drop <player>: delete a stored skin, so their next join derives one afresh.
uxmessentials.skin.fileop/skin file <name>: wear one of the skins the operator dropped in the server's skin folder.
uxmessentials.skin.infoop/skin info <player>: which skin somebody wears, from where, and when it was set.
uxmessentials.skin.name.<skin>everyoneWear the skin of one named account; only checked for the skins the operator restricted.
uxmessentials.skin.otherop/skin set <name> <player> and /skin clear <player>: dress or undress somebody else.
uxmessentials.skin.purgeop/skin purge <name>: forget a cached texture so the next lookup goes back to the source.
uxmessentials.skin.updateeveryone/skin update: re-fetch your skin, for an account whose skin changed at the source.
uxmessentials.skin.urleveryone/skin url <link>: wear the skin drawn in an image published on the web.
uxmessentials.skin.useeveryone/skin <name> and /skin clear: wear another account's skin, or go back to your own.

Settings

KeyDefaultWhat it does
sources.nametrue/skin <name>: the skin worn by that account, resolved through Mojang
sources.urltrue/skin url <link>: an image on the web, uploaded to MineSkin to be signed
sources.filetrue/skin file <name>: an image the operator dropped into the folder named under mineskin below
sources.bedrocktruea Bedrock player's own skin, when Floodgate is installed
login.premium-skintruedress a name that belongs to a paid account with the skin that account really wears
login.default-pool[]names used when nothing else resolves; a player keeps the same one on every join
login.timeout-seconds3how long a login lookup may take before the player is let in undressed
bedrock.refresh-on-jointruelook the skin up on every join, so a change made on the Bedrock side shows here
bedrock.retries2how many times a failed lookup is retried before the join falls through undressed
limits.cooldown-seconds30between one change and the next; 0 turns the cooldown off
limits.blocked-skins[]names nobody may wear, matched without regard to case
limits.allowed-url-hosts["i.imgur.com", "textures.minecraft.net"]hosts /skin url accepts; empty allows any host
mineskin.api-key""optional; without a key MineSkin rate-limits harder
mineskin.folder"skins"the folder under the plugin's data folder /skin file reads a <name>.png from

Placeholders

PlaceholderRenders
%uxmessentials_skin_chosen%Whether the player chose a skin of their own (yes/no).
%uxmessentials_skin_model%The player model the skin was cut for: classic or slim.
%uxmessentials_skin_source%Where the player's chosen skin came from: by-name, by-url, by-file, bedrock or fallback.
%uxmessentials_skin_value%What that source names: the account, the link, the file or the Bedrock id.

Notes

  • The module ships off, because an online-mode server already dresses everybody correctly and would gain nothing but extra traffic. Switch it on for a cracked server, a Bedrock-facing one, or one where players should be able to choose.
  • A join is dressed before the player exists. The profile is edited during the login handshake, so there is no respawn, no flicker and nothing to re-send; a live /skin change goes through the player's own profile and the server re-sends them.
  • The join order stops at the first hit: the player's stored choice, then their real premium skin, then their Bedrock skin, then one from login.default-pool picked from their UUID so they keep the same face.
  • Nothing costs a login. Every lookup runs off the server thread and is waited on for at most login.timeout-seconds; a slow Mojang, a MineSkin outage or a missing Geyser endpoint lets the player in undressed rather than holding the connection.
  • A link is uploaded to MineSkin to be signed, because an unsigned texture renders wrongly for other players on some clients. limits.allowed-url-hosts decides which hosts are accepted; leave it empty to accept any.
  • /skin file reads only from the configured folder. A path that tries to leave it is refused without the file being read.
  • Bedrock skins come from Floodgate and the public Geyser skin service. Without Floodgate the step resolves nothing and the join order moves on, so a Java-only server is unaffected.
  • A shared database is all cross-server sync needs: the chosen skin is a row, so a player wears the same face on every server that reads the same database.

Related: Player State, Presence, NPCs