🎉 You can now upload skin .png files here!
SkinsRestorer LogoSkinsRestorer

Configuration Options

Learn the various configuration options in SkinsRestorer.

The plugin should be able to run without extra configuration needed, but if you need to change the plugin behavior, you're in the right place here.

After changing the configuration, you need to either reload the plugin with the command /sr reload or restart the server.

If you run a proxy network (BungeeCord/Velocity), you need to have the exact same config.yml file on the proxy and all servers. If you make a change to the config on the proxy, you need to make the same change on all servers. Make sure to reload the plugin on the proxy and all servers after changing the configuration. The /sr reload command is only available on the proxy (because all backend servers are in Proxy Mode), you'll need to restart the servers to use the new config.

File structure

Below is an example of what the file structure of the SkinsRestorer plugin looks like. Click a folder to expand it.

config.yml

Storage settings

Configure how skin data is cached and stored.

storage:
  defaultSkins:
    enabled: false
    applyForPremium: false
    list:
      - "xknat"
      - "pistonmaster"
      - "<random>"
  disallowAutoUpdateSkin: false
  skinExpiresAfter: 15
  uuidExpiresAfter: 60
OptionDefaultDescription
defaultSkins.enabledfalseEnable default skins for players without a set skin
defaultSkins.applyForPremiumfalseApply default skins even to premium players
defaultSkins.list["xknat", "pistonmaster", "<random>"]List of default skins. Use <random> for recommended skins
disallowAutoUpdateSkinfalseRequire players to run /skin update manually
skinExpiresAfter15Minutes before re-fetching skin data from API
uuidExpiresAfter60Minutes before re-fetching player UUID from API

Setting cache expiration to 0 will always request fresh data from the API. This is not recommended for production servers.

Command settings

Configure command behavior, cooldowns, and restrictions.

commands:
  skinChangeCooldown: 30
  skinErrorCooldown: 5
  skullCooldown: 30
  skullErrorCooldown: 5
  disabledSkins:
    - "steve"
    - "owner"
  restrictSkinUrls:
    enabled: false
    list:
      - "https://i.imgur.com"
      - "https://storage.googleapis.com"
      - "https://cdn.discordapp.com"
      - "https://textures.minecraft.net"
  perSkinPermissions:
    enabled: false
    list: []
  forceDefaultPermissions: true
  customPlayerHistory: 18
  customFavourites: 90
  disableSkinCommand: false
  disableSkullCommand: false
  disableGUICommand: false
OptionDefaultDescription
skinChangeCooldown30Seconds between /skin commands
skinErrorCooldown5Seconds to wait after a failed skin change
skullCooldown30Seconds between /skull commands
skullErrorCooldown5Seconds to wait after a failed skull command
disabledSkins["steve", "owner"]Skins that cannot be used
restrictSkinUrls.enabledfalseOnly allow URLs from whitelisted domains
restrictSkinUrls.list(see above)Allowed URL domains when restriction is enabled
perSkinPermissions.enabledfalseRequire skinsrestorer.skin.<name> for specific skins
perSkinPermissions.list[]Skins that require permissions
forceDefaultPermissionstrueGive all players skinsrestorer.player by default
customPlayerHistory18Max entries in /skin undo history
customFavourites90Max entries in /skin favourite list
disableSkinCommandfalseDisable the /skin command registration
disableSkullCommandfalseDisable the /skull command registration
disableGUICommandfalseDisable the /skins command registration

Login settings

Configure skin behavior during player login.

login:
  noSkinIfLoginCanceled: true
  alwaysApplyPremium: false
OptionDefaultDescription
noSkinIfLoginCanceledtrueDon't apply skins if login is canceled (e.g., by AntiBot)
alwaysApplyPremiumfalseApply skins even for premium players on online-mode servers

Server settings (Backend only)

These settings only apply to backend servers, not proxies.

server:
  resourcePackFix: true
  dismountPlayerOnUpdate: true
  remountPlayerOnUpdate: true
  dismountPassengersOnUpdate: false
  sound:
    enabled: true
    value: "ENTITY_PLAYER_TELEPORT, 0.7"
  proxyMode:
    detection: AUTO
    api: true
OptionDefaultDescription
resourcePackFixtrueReapply skins after resource pack loads
dismountPlayerOnUpdatetrueDismount player from vehicle during skin update
remountPlayerOnUpdatetrueRemount player after skin update
dismountPassengersOnUpdatefalseDismount passengers riding the player
sound.enabledtruePlay sound when skin changes
sound.value"ENTITY_PLAYER_TELEPORT, 0.7"Sound to play (format: SOUND_NAME, volume)
proxyMode.detectionAUTOProxy detection: AUTO, ENABLED, or DISABLED
proxyMode.apitrueEnable API on backend servers (requires database)

Proxy settings (Proxy only)

These settings only apply to proxy servers (BungeeCord/Velocity).

proxy:
  notAllowedCommandServers:
    enabled: true
    ifNoneBlockCommand: true
    allowList: false
    list:
      - "auth"
OptionDefaultDescription
notAllowedCommandServers.enabledtrueEnable server-based command restrictions
notAllowedCommandServers.ifNoneBlockCommandtrueBlock commands before joining any server
notAllowedCommandServers.allowListfalseIf true, only listed servers allow commands
notAllowedCommandServers.list["auth"]Servers to block/allow commands on

API settings

Configure external API integrations.

api:
  mineSkinApiKey: ""
  mineSkinSecretSkins: false
  fetchRecommendedSkins: true
  mojangBatchWindowSeconds: 1
OptionDefaultDescription
mineSkinApiKey(empty)Your MineSkin API key for faster requests
mineSkinSecretSkinsfalseHide generated skins from MineSkin's public gallery
fetchRecommendedSkinstrueLoad curated recommended skins (required for /skin random)
mojangBatchWindowSeconds1Batch window for Mojang API requests to avoid rate limits

Use coupon code SKINSRESTORER10 for 10% off your first three months of MineSkin API plans (except Lite).

GUI settings

Configure the /skins GUI appearance and content.

gui:
  notUnlockedSkin: "c10591e6909e6a281b371836e462d67a2c78fa0952e910f32b41a26c48c1757c"
  customSkins:
    enabled: true
    index: 0
    onlyList: false
    list:
      - "xknat"
      - "pistonmaster"
  playerSkins:
    enabled: false
    index: 1
    onlyList: false
    list: []
  recommendations:
    enabled: true
    index: 2
    onlyList: false
    list:
      - "vampire"
      - "space-suit"
OptionDefaultDescription
notUnlockedSkin(texture hash)Skin shown for locked skins (when using perSkinPermissions)
customSkins.enabledtrueShow custom skins tab in GUI
customSkins.index0Tab order (lower = first)
customSkins.onlyListfalseOnly show skins in the list
customSkins.list["xknat", "pistonmaster"]Skins to show in custom tab
playerSkins.enabledfalseShow online player skins tab
playerSkins.index1Tab order
recommendations.enabledtrueShow recommended skins tab
recommendations.index2Tab order

Advanced settings

These settings are in the "Danger Zone". Only modify if you understand the implications.

advanced:
  disableOnJoinSkins: false
  enablePaperJoinListener: true
  teleportRefresh: false
  noConnections: false
  playerHeadChatObjects: false
OptionDefaultDescription
disableOnJoinSkinsfalseDon't apply skins on player join
enablePaperJoinListenertrueUse Paper's join event for instant skin application
teleportRefreshfalseUse teleport instead of hiding for skin refresh
noConnectionsfalseDisable all web connections (offline mode)
playerHeadChatObjectsfalseShow player heads in chat messages

Debug settings

dev:
  debug: false
OptionDefaultDescription
debugfalseEnable debug logging for API requests and troubleshooting

Who can change skins?

With SkinsRestorer, players can use /skin <skin> to change their look. You will have to use a permissions plugin to control who can change their skin.

You can read the commands and permissions guide to learn how to control who can change skins.

Default skins

By default, SkinsRestorer applies players the skin that belongs to their Minecraft account that was set via the launcher. Some players who join your server may not own their own Minecraft account where they can set their skin. So for those cases, SkinsRestorer will set their skin to a steve skin.

Default skins are base skins set for players who did not explicitly set a skin using /skin <skin>. If a player joins the server and did set a skin using /skin <skin>, SkinsRestorer will not set their skin to a default skin and instead use the skin they set.

If you want to change this behavior, you can do so by changing the storage.defaultSkins configuration in the config.yml file. Changing it allows you to set what skin players will have when they join your server and don't have a Minecraft account associated with their username.

Additionally, if you set applyForPremium to true, SkinsRestorer will apply default skins for every player, even if they own a Minecraft account.

Disabled skins

If you want to disable certain skins from being used on your server using /skin <skin>, you can do so by changing the commands.disabledSkins configuration in the config.yml file.

This feature is useful if you want to prevent players from using, for example, explicit or inappropriate skins.

Permissions per skin

By default, SkinsRestorer allows players to set any skin when they have access to the /skin <skin> command. You can override this behavior by setting up commands.perSkinPermissions in the config.yml file. Any skin in that list will force the player to have the permissions skinsrestorer.skin.<name> to use that skin.

How is this guide?

Last updated on

On this page