There are three ways of defining a player skin:
- Setting your player UUID (see here) to their Mojang UUID, clients by default retrieve the skin based on this value. This is done automatically by
MojangAuth.init()
- Changing it in the
PlayerSkinInitEvent
event - Using the method
Player#setSkin(PlayerSkin)
PlayerSkin
offers some utils methods to retrieve a skin using simple information such as a Mojang UUID or a Minecraft username
PlayerSkin skinFromUUID = PlayerSkin.fromUuid(MOJANG_UUID_AS_STRING);
PlayerSkin skinFromUsername = PlayerSkin.fromUsername("Notch");
{% hint style="warning" %} Those methods make direct requests to the Mojang API, it is recommended to cache the values. {% endhint %}
Most of what I will say is described here: https://wiki.vg/Mojang_API#Username_-.3E_UUID_at_time
You firstly need to get your Mojang UUID, which can be done by a request based on your username:
GET https://api.mojang.com/users/profiles/minecraft/<username>
Then, after getting your UUID:
GET https://sessionserver.mojang.com/session/minecraft/profile/<uuid>?unsigned=false
You'll get here both the texture value and the signature. Those values are used to create a PlayerSkin
.
The event is called at the player connection and is used to define the skin to send to the player the first time. It is as simple as
GlobalEventHandler globalEventHandler = MinecraftServer.getGlobalEventHandler();
globalEventHandler.addListener(PlayerSkinInitEvent.class, event -> {
PlayerSkin skin = new PlayerSkin(textureValue, signature);
event.setSkin(skin);
});
PlayerSkin skin = new PlayerSkin(textureValue, signature);
player.setSkin(skin);