Skin Customizer (Spigot Library) icon

Skin Customizer (Spigot Library) 1.0.1

A Spigot toolkit to create interactable skin customization interfaces in Minecraft

Skin Customizer
A Spigot plugin/toolkit to create interactable, realtime skin customization interfaces inside Minecraft itself. It features a variety of different components (hair styles, eyes, shirts...) and colors to work with.

Demo
68747470733a2f2f696d672e796f75747562652e636f6d2f76692f3378646f696c66667431452f302e6a7067

Dependencies
This project depends on Citizens to create the skin preview, and SkinsRestorer to actually apply the skin to the player. Under the hood, the project uses MineSkin to upload the generated skin textures to Mojang and jens.skin (my project) to render a collection of chosen options to an actual skin.

Getting started
To test the plugin, make sure you install all dependencies and run the /customizer command as an operator. The customizer will spawn.

Developer guide
Start using this project as a dependency by including it in your pom.xml like this:

Code (Text):
<!-- Repository (if not already present) -->
<repository>
   <id>jitpack.io</id>
   <url>https://jitpack.io</url>
</repository>

<!-- Dependency -->
<dependency>
   <groupId>com.github.jensjeflensje</groupId>
   <artifactId>skin-customizer</artifactId>
   <version>1.0.1</version>
   <scope>provided</scope>
</dependency>

Please refer to this readme for the developer guide on creating customizers using Java code.

Structure
The project is focused around the SkinCustomizer class, which can be instantiated with a Bukkit location to summon the customizer. The customizer consists of:

  • The skin preview using a Citizens NPC (SkinPreview)
  • The UI to customize the skin
    • Scrolling buttons to scroll through components for a specific category (e.g. hair styles)
    • Color options for each category
  • The button to apply the skin

UI elements (buttons)
The UI is based on display entities containing skulls, with an interaction entity acting as a hitbox for the button. Every other element ( apply button, scrolling buttons, color button ) is based on one or multiple instances of this base button, InteractableButton.

Customization
Most element of the skin customizer are customizable in the config.yml file, like the different categories, options within that category, and color options. These options come together to form the SkinCustomizerOptions object, which can also be replaced by a custom one and given to SkinCustomizer's constructor.

Caveats
This system of constantly uploading new skins to Mojang can be quite slow. The plugin tries to relieve this by caching the skin using the combination of components as a cache key, but this doesn't apply to newly made combinations.

Motivation
I created jens.skin a while ago and I thought it would be fun to make a version that's inside Minecraft itself. Even though it's not perfect, I'm still quite proud of it :).