- Tested Minecraft Versions:
- 1.8
- 1.9
- 1.10
- 1.11
- 1.12
- 1.13
- Source Code:
- https://github.com/games647/ChangeSkin
- Contributors:
- games647, DoNotSpamPls, kicjow, Shynixn, Bodyash
- Languages Supported:
- Configurable in language file
- Donation Link:
- https://paypal.me/games647
Description
This plugin allows your players to change their skins by command. These skins have to be downloaded from Mojang, because Minecraft clients only accept from Mojang signed skins. But you can choose every skin that another minecraft user currently has or had.
Moreover it's possible to set a custom standard skin. If you want to, this plugin can set this standard skin for all players who still have the default steve or alex skin.
If you like the project, leave a star on GitHub and contribute there.
Development-Builds
This plugin also supports newer Minecraft versions and is still updated. I moved away from doing fixed releases. Instead you can use development builds that are build directly after a change. Click on the left side on the build to download it or remove "changes" part of the URL to get always the latest.
https://ci.codemc.org/job/Games647/job/ChangeSkin/changes
Features
Source code
- Instant skin updates
- Works on offline mode (can restore skins) and online mode servers
- Nearly no mojang rate limits due caching
- Specify standard skins
- Change your skin - Every skin which was uploaded to Mojang is allowed
- Lightweight
- BungeeCord support
- Implemented cache to benefit performance
- No client modification needed
- Tested with Spigot, PaperSpigot and TacoSpigot
- Easy to use
- Open Source
https://github.com/games647/ChangeSkin
Commands
How to install on BungeeCord
- /setskin <uuid>
- /setskin <playerName>
- /setskin <onlinePlayer> <newSkinUUID/newSkinPlayerName>
- /skinupdate - Downloads the fresh skin from Mojang
Permissions
- Install the plugin on both BungeeCord and Bukkit server
- Activate BungeeCord support in your spigot configuration
- Check the settings of the ChangeSkin config in the BungeeCord instance
- For example BungeeCord doesn't support SQLite by default
changeskin.command.skinupdate - Request a fresh skin from mojang
changeskin.command.setskin.* - All the commands below
changeskin.command.setskin - Set your own skin
changeskin.command.setskin.other - Set the skin of other players
Whitelist and blacklist permissions
For this you have to skin permissions.
Whitelist
Blacklist
- changeskin.skin.whitelist.uuid - Allow this specific skin
- changeskin.skin.whitelist.* - allows all skins
=> This means all skins are allowed except the ones with the uuid in the blacklist list
- changeskin.skin.whitelist.*
- -changeskin.skin.whitelist.uuid
Requirements
Thank you very much for those who already donated:
For privacy reasons I remove the first and last name. If you don't want to be listed, message me or write it directly into the donation message.
- Name removed - 20$
- xion987 - 15$
- Chalkie - 11$
- PigParty - 11$
- andramil - 10$
- Name removed - 10$

ChangeSkin 3.0
Allows your players to change their skins by command | Restore cracked skins | Instant updates
Recent Updates
Recent Reviews
-
imDaniX
- 5/5,
Still the best skin plugin in here. Lightweight and works perfectly fine. I hope that one day we get an update on spigotmc so more people will know about it.
-
Darutan
- 5/5,
This is a very nice skin plugin. I have been using it for many years. This is the only plugin of its kind that supports displaying skins on Dynmap. Check out other plugins from the developer, they are also good and some are unique. Support him if possible. Thank you very much!
-
FireRoz
- 5/5,
I usually don't leave ratings on resources, but this resource is so good listen:
The plugin itself works perfect.
You are able to go to your settings and change how many layers there are on the skin which is amazing.
And if it doesn't work /skinupdate will always set you.
I highly recommend it if you just wanna remember your disguise or just for any purpose whether it's a rank perk, or whether you wanna troll with it. -
moonapplesauce
- 3/5,
Doesn't older skins work. The uploading system to upload skins doesn't work anymore. But it's still a great plugin. You just have to use skins that someone else is currently wearing on their profile.
Also if the username is only 2 letters, this plugin won't recognize their username. -
Sportkanone123
- 2/5,
It works, but its not possible to use it only on Bukkit when you use a Bungee Cord Server. Please change this. Then you will get a 5 Stars
-
Author's Response
That's not possible. BungeeCord needs to access the skin directly for it's features. It completely ignores the skin sent by the Spigot server. If ChangeSkin on BungeeCord is not used, it will only use the skin retrieved from an online mode login verification.
-
hanbule
- 3/5,
Permissions for permissionsex in the bundle bukkit + BungeeCord do not work..........
-
Author's Response
Do you configured the BungeeCord permissions in the bungee config.yml?
-
Thikoon
- 5/5,
This is such a great compliment for a server if you want people with default skins to have something much cooler. 10/10 would recommend to everyone
-
roilee1101
- 5/5,
I have used this plugin for a while and it works really well!
only thing I am wondering right now is how to install this on bungee cord server because I have decided to change my server into that. I have tried to put this in the plugin folder of bungee cord but there was an error and it always disabled the plugin. If there is anything that I need to do pls help me:) thank you
19:04:31 [SEVERE] [ChangeSkin] Error loading config. Disabling plugin...
com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at com.zaxxer.hikari.pool.HikariPool.throwPoolInitializationException(HikariPool.java:568)
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:554)
at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:114)
at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:82)
at com.github.games647.changeskin.core.SkinStorage.<init>(SkinStorage.java:67)
at com.github.games647.changeskin.core.ChangeSkinCore.setupDatabase(ChangeSkinCore.java:112)
at com.github.games647.changeskin.core.ChangeSkinCore.load(ChangeSkinCore.java:79)
at com.github.games647.changeskin.bungee.ChangeSkinBungee.onEnable(ChangeSkinBungee.java:77)
at net.md_5.bungee.api.plugin.PluginManager.enablePlugins(PluginManager.java:247)
at net.md_5.bungee.BungeeCord.start(BungeeCord.java:279)
at net.md_5.bungee.BungeeCordLauncher.main(BungeeCordLauncher.java:62)
at net.md_5.bungee.Bootstrap.main(Bootstrap.java:15)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:990)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:342)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2197)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2230)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2025)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:778)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:386)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:117)
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:123)
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:375)
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:204)
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:459)
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:533)
... 10 more
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:211)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:301)
... 28 more-
Author's Response
This error means that there is no MySQL/MariaDB server responding to your database configuration. Make sure such an instance is running and listening on the configured port.
-
Chalkie
- 5/5,
Great bit of software that seems to do away with a lot of the bloat the comes with the other one (SR).
Dev is friendly and keeps it update. -
Blocks_n_more
- 4/5,
Good plugin the only issue with it is that you have to relog for people to see the new skin i wish it would update instantly
-
Author's Response
It does see the config for more details