ChangeSkinX
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.
Moreover it will be 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.
Features
- Lightweight
- Instant skin updates
- Easy to use
- Implemented cache to benefit performance
- Nearly no mojang rate limits due caching
- No client modification needed
- Possibility to create a standard skin
Commands
- /setskin <uuid > - Sets your skin to be equal to the player with the selected uuid
- /setskin < playerName>
- /setskin < onlinePlayer > < newSkinUUID/newSkinPlayerName >
- /skinupdate - Invalidates the database entry and fetches the fresh skin from the Mojang servers
Permissions
- changeskin.command.skinupdate - Command to refresh the own skin
- 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
Whitelist
- changeskin.skin.whitelist.uuid - Allow this specific skin
- changeskin.skin.whitelist.* - allows all skins
Blacklist
- changeskin.skin.whitelist.*
- -changeskin.skin.whitelist.uuid
Source code
You don't have to decompile the plugin. You can find there the source code with comments and building utilities.
ChangeSkin is open source and hosted on GitHub; feel free to fork, star, or contribute by making pull requests and opening issues.
Video Tutorials (not by me)
Portuguese:
English:
it will be great if you guys have options without the need of external permission plugins. because my server didn't need permission only for this plugin
In reply to fhadiel:
You can assign default permissions in the bukkit.yml file.
In reply to mozacc:
how do i do that? i hear permission.yml does nothing
In reply to fhadiel:
There is a wiki article on that: https://bukkit.gamepedia.com/Permissions.yml
Permissions are required by a lot of servers and the installation of basic permission plugin doesn't interrupt the rest of your server.
Is it possible to get someone to use the /setskin command without giving them op?
In reply to Hightlyze:
Of course. Therefore the permissions exists. Give your players the permissions using a permissions plugin and then they can use it.
i have an issue that i can't upload skins and its annoying i keep getting this message if i want to change skin
the skin i want is this skin:https://www.minecraftskins.com/skin/12970495/roblox-reverse-derp/
but its saying this error "There are no configured accounts to upload skins"
btw i don't know how to use this skin changer all i want is a skin
In reply to liamyboin00b:
You have to configure Minecraft accounts in the config in order to upload it.
In reply to mozacc:
how do i do that??
In reply to santiplay28112007:
There is a configuration section where you insert your Minecraft account data.
can you guys add a way to just change the cape, and not the skin?
In reply to FredtheWaffl:
This data is saved together with the skin data. So you have to select a skin which has a cape. As far as I know only some Mojang staff and Minecon participants have capes.
In reply to mozacc:
When you set your skin to someone who has a cape, you get their cape so I was wondering if it was possible to create a custom skin, that was your current skin + a cape (in the same file)
How do I give permission to use this command to other players that are not admins?
In reply to markbo150:
You can use the a permissions plugin for that. There you can add the permissions nodes listed above.
Is this 1.14 compatible?
In reply to Forge_User_92908318:
Yes the developments builds are. See the link below.
[ChangeSkin] Task #36 for ChangeSkin v3.0 generated an exception
java.lang.NoClassDefFoundError: com.comphenix.protocol.injector.PacketConstructor (initialization failure)
at java.lang.J9VMInternals.initializationAlreadyFailed(J9VMInternals.java:96) ~[?:1.8.0_192]
at com.comphenix.protocol.injector.BukkitUnwrapper.unwrapItem(BukkitUnwrapper.java:100) ~[?:?]
at com.comphenix.protocol.wrappers.WrappedGameProfile.fromPlayer(WrappedGameProfile.java:81) ~[?:?]
at com.github.games647.changeskin.bukkit.tasks.SkinUpdater.onInstantUpdate(SkinUpdater.java:87) ~[?:?]
at com.github.games647.changeskin.bukkit.tasks.SkinUpdater.run(SkinUpdater.java:80) ~[?:?]
at org.bukkit.craftbukkit.v1_13_R2.scheduler.CraftTask.run(CraftTask.java:81) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at org.bukkit.craftbukkit.v1_13_R2.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:392) [spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at net.minecraft.server.v1_13_R2.MinecraftServer.b(MinecraftServer.java:889) [spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at net.minecraft.server.v1_13_R2.DedicatedServer.b(DedicatedServer.java:417) [spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at net.minecraft.server.v1_13_R2.MinecraftServer.a(MinecraftServer.java:831) [spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at net.minecraft.server.v1_13_R2.MinecraftServer.run(MinecraftServer.java:729) [spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at java.lang.Thread.run(Thread.java:813) [?:1.8.0_192]
Caused by: java.lang.BootstrapMethodError: java.lang.ExceptionInInitializerError
at com.comphenix.protocol.wrappers.BukkitConverters.getWrappedStatisticConverter(BukkitConverters.java:693) ~[?:?]
at com.comphenix.protocol.wrappers.BukkitConverters.getConvertersForGeneric(BukkitConverters.java:1012) ~[?:?]
at com.comphenix.protocol.wrappers.BukkitConverters.getUnwrappers(BukkitConverters.java:1031) ~[?:?]
at com.comphenix.protocol.injector.PacketConstructor.<init>(PacketConstructor.java:62) ~[?:?]
at com.comphenix.protocol.injector.PacketConstructor.<clinit>(PacketConstructor.java:45) ~[?:?]
at com.comphenix.protocol.injector.BukkitUnwrapper.unwrapItem(BukkitUnwrapper.java:100) ~[?:?]
at com.comphenix.protocol.utility.MinecraftFields.getNetworkManager(MinecraftFields.java:29) ~[?:?]
at com.comphenix.protocol.injector.netty.InjectionFactory.fromPlayer(InjectionFactory.java:84) ~[?:?]
at com.comphenix.protocol.injector.netty.ProtocolInjector$4.updatePlayer(ProtocolInjector.java:368) ~[?:?]
at com.comphenix.protocol.injector.PacketFilterManager.onPlayerLogin(PacketFilterManager.java:1003) ~[?:?]
at com.comphenix.protocol.injector.PacketFilterManager.access$500(PacketFilterManager.java:77) ~[?:?]
at com.comphenix.protocol.injector.PacketFilterManager$4.onPlayerLogin(PacketFilterManager.java:976) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_192]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_192]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_192]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_192]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:312) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:66) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:507) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:492) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at net.minecraft.server.v1_13_R2.PlayerList.attemptLogin(PlayerList.java:531) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at net.minecraft.server.v1_13_R2.LoginListener.b(LoginListener.java:129) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at net.minecraft.server.v1_13_R2.LoginListener.tick(LoginListener.java:53) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at net.minecraft.server.v1_13_R2.NetworkManager.a(NetworkManager.java:230) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at net.minecraft.server.v1_13_R2.ServerConnection.c(ServerConnection.java:119) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at net.minecraft.server.v1_13_R2.MinecraftServer.b(MinecraftServer.java:994) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
... 4 more
Caused by: java.lang.ExceptionInInitializerError
at java.lang.J9VMInternals.ensureError(J9VMInternals.java:146) ~[?:1.8.0_192]
at java.lang.J9VMInternals.recordInitializationFailure(J9VMInternals.java:135) ~[?:1.8.0_192]
at java.lang.invoke.MethodHandle.getCPMethodHandleAt(Native Method) ~[?:1.8.0_192]
at java.lang.invoke.MethodHandle.resolveInvokeDynamic(MethodHandle.java:843) ~[?:1.8.0_192]
at com.comphenix.protocol.wrappers.BukkitConverters.getWrappedStatisticConverter(BukkitConverters.java:693) ~[?:?]
at com.comphenix.protocol.wrappers.BukkitConverters.getConvertersForGeneric(BukkitConverters.java:1012) ~[?:?]
at com.comphenix.protocol.wrappers.BukkitConverters.getUnwrappers(BukkitConverters.java:1031) ~[?:?]
at com.comphenix.protocol.injector.PacketConstructor.<init>(PacketConstructor.java:62) ~[?:?]
at com.comphenix.protocol.injector.PacketConstructor.<clinit>(PacketConstructor.java:45) ~[?:?]
at com.comphenix.protocol.injector.BukkitUnwrapper.unwrapItem(BukkitUnwrapper.java:100) ~[?:?]
at com.comphenix.protocol.utility.MinecraftFields.getNetworkManager(MinecraftFields.java:29) ~[?:?]
at com.comphenix.protocol.injector.netty.InjectionFactory.fromPlayer(InjectionFactory.java:84) ~[?:?]
at com.comphenix.protocol.injector.netty.ProtocolInjector$4.updatePlayer(ProtocolInjector.java:368) ~[?:?]
at com.comphenix.protocol.injector.PacketFilterManager.onPlayerLogin(PacketFilterManager.java:1003) ~[?:?]
at com.comphenix.protocol.injector.PacketFilterManager.access$500(PacketFilterManager.java:77) ~[?:?]
at com.comphenix.protocol.injector.PacketFilterManager$4.onPlayerLogin(PacketFilterManager.java:976) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_192]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_192]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_192]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_192]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:312) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:66) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:507) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:492) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at net.minecraft.server.v1_13_R2.PlayerList.attemptLogin(PlayerList.java:531) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at net.minecraft.server.v1_13_R2.LoginListener.b(LoginListener.java:129) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at net.minecraft.server.v1_13_R2.LoginListener.tick(LoginListener.java:53) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at net.minecraft.server.v1_13_R2.NetworkManager.a(NetworkManager.java:230) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at net.minecraft.server.v1_13_R2.ServerConnection.c(ServerConnection.java:119) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at net.minecraft.server.v1_13_R2.MinecraftServer.b(MinecraftServer.java:994) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
... 4 more
Caused by: java.lang.IllegalArgumentException: Unable to find findStatistic in net.minecraft.server.v1_13_R2.StatisticList
at com.comphenix.protocol.reflect.FuzzyReflection.getMethodByParameters(FuzzyReflection.java:280) ~[?:?]
at com.comphenix.protocol.wrappers.WrappedStatistic.<clinit>(WrappedStatistic.java:22) ~[?:?]
at java.lang.invoke.MethodHandle.getCPMethodHandleAt(Native Method) ~[?:1.8.0_192]
at java.lang.invoke.MethodHandle.resolveInvokeDynamic(MethodHandle.java:843) ~[?:1.8.0_192]
at com.comphenix.protocol.wrappers.BukkitConverters.getWrappedStatisticConverter(BukkitConverters.java:693) ~[?:?]
at com.comphenix.protocol.wrappers.BukkitConverters.getConvertersForGeneric(BukkitConverters.java:1012) ~[?:?]
at com.comphenix.protocol.wrappers.BukkitConverters.getUnwrappers(BukkitConverters.java:1031) ~[?:?]
at com.comphenix.protocol.injector.PacketConstructor.<init>(PacketConstructor.java:62) ~[?:?]
at com.comphenix.protocol.injector.PacketConstructor.<clinit>(PacketConstructor.java:45) ~[?:?]
at com.comphenix.protocol.injector.BukkitUnwrapper.unwrapItem(BukkitUnwrapper.java:100) ~[?:?]
at com.comphenix.protocol.utility.MinecraftFields.getNetworkManager(MinecraftFields.java:29) ~[?:?]
at com.comphenix.protocol.injector.netty.InjectionFactory.fromPlayer(InjectionFactory.java:84) ~[?:?]
at com.comphenix.protocol.injector.netty.ProtocolInjector$4.updatePlayer(ProtocolInjector.java:368) ~[?:?]
at com.comphenix.protocol.injector.PacketFilterManager.onPlayerLogin(PacketFilterManager.java:1003) ~[?:?]
at com.comphenix.protocol.injector.PacketFilterManager.access$500(PacketFilterManager.java:77) ~[?:?]
at com.comphenix.protocol.injector.PacketFilterManager$4.onPlayerLogin(PacketFilterManager.java:976) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_192]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_192]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_192]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_192]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:312) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:66) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:507) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:492) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at net.minecraft.server.v1_13_R2.PlayerList.attemptLogin(PlayerList.java:531) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at net.minecraft.server.v1_13_R2.LoginListener.b(LoginListener.java:129) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at net.minecraft.server.v1_13_R2.LoginListener.tick(LoginListener.java:53) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at net.minecraft.server.v1_13_R2.NetworkManager.a(NetworkManager.java:230) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at net.minecraft.server.v1_13_R2.ServerConnection.c(ServerConnection.java:119) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
at net.minecraft.server.v1_13_R2.MinecraftServer.b(MinecraftServer.java:994) ~[spigot-1.13.2.jar:git-Spigot-e6eb36f-d3ed151]
... 4 more
Men, it says downloading skin, then i afk for 30mins, but my skin is isnt there. Help Bro
In reply to adminalttab:
Please update ProtocolLib. Your version doesn't seem to be compatible with the Java version installed.
24.02 18:17:59 [Server] WARN Task #48 for ChangeSkin v3.0 generated an exception
24.02 18:17:59 [Server] INFO com.comphenix.protocol.reflect.FieldAccessException: No field with type int exists in class PacketPlayOutRespawn.
24.02 18:17:59 [Server] INFO at com.comphenix.protocol.reflect.StructureModifier.writeInternal(StructureModifier.java:363) ~[?:?]
24.02 18:17:59 [Server] INFO at com.comphenix.protocol.reflect.StructureModifier.write(StructureModifier.java:343) ~[?:?]
24.02 18:17:59 [Server] INFO at com.github.games647.changeskin.bukkit.tasks.SkinUpdater.sendPacketsSelf(SkinUpdater.java:169) ~[?:?]
24.02 18:17:59 [Server] INFO at com.github.games647.changeskin.bukkit.tasks.SkinUpdater.sendUpdateSelf(SkinUpdater.java:121) ~[?:?]
24.02 18:17:59 [Server] INFO at com.github.games647.changeskin.bukkit.tasks.SkinUpdater.sendUpdate(SkinUpdater.java:102) ~[?:?]
24.02 18:17:59 [Server] INFO at com.github.games647.changeskin.bukkit.tasks.SkinUpdater.onInstantUpdate(SkinUpdater.java:94) ~[?:?]
24.02 18:17:59 [Server] INFO at com.github.games647.changeskin.bukkit.tasks.SkinUpdater.run(SkinUpdater.java:80) ~[?:?]
24.02 18:17:59 [Server] INFO at org.bukkit.craftbukkit.v1_13_R2.scheduler.CraftTask.run(CraftTask.java:77) ~[craftbukkit_1.13.2.jar:git-Bukkit-a4c555b]
24.02 18:17:59 [Server] INFO at org.bukkit.craftbukkit.v1_13_R2.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:390) [craftbukkit_1.13.2.jar:git-Bukkit-a4c555b]
24.02 18:17:59 [Server] INFO at net.minecraft.server.v1_13_R2.MinecraftServer.b(MinecraftServer.java:837) [craftbukkit_1.13.2.jar:git-Bukkit-a4c555b]
24.02 18:17:59 [Server] INFO at net.minecraft.server.v1_13_R2.DedicatedServer.b(DedicatedServer.java:382) [craftbukkit_1.13.2.jar:git-Bukkit-a4c555b]
24.02 18:17:59 [Server] INFO at net.minecraft.server.v1_13_R2.MinecraftServer.a(MinecraftServer.java:796) [craftbukkit_1.13.2.jar:git-Bukkit-a4c555b]
24.02 18:17:59 [Server] INFO at net.minecraft.server.v1_13_R2.MinecraftServer.run(MinecraftServer.java:699) [craftbukkit_1.13.2.jar:git-Bukkit-a4c555b]
24.02 18:17:59 [Server] INFO at java.lang.Thread.run(Thread.java:748) [?:1.8.0_191]