There are three ways of defining a player skin:
- Setting your player UUID (see here) to their mojang UUID, clients by default retrieve skin based on this value
- Changing it in the PlayerSkinInitEvent event
- Using the method Player#setSkin(PlayerSkin)
How to retrieve skin data from Mojang
Using PlayerSkin methods
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");
WARNING: those methods make direct requests to the Mojang API, it is recommended to cache the values.
Retrieve texture value & signature manually
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.
PlayerSkinInitEvent
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
player.addEventCallback(PlayerSkinInitEvent.class, event -> {
PlayerSkin skin = new PlayerSkin(textureValue, signature);
event.setSkin(skin);
});
Player#setSkin
Not much to say here
PlayerSkin skin = new PlayerSkin(textureValue, signature);
player.setSkin(skin);