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.
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.
To test the plugin, make sure you install all dependencies and run the /customizer
command as an operator.
The customizer will spawn.
Start using this project as a dependency by including it in your pom.xml like this:
<!-- 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.
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
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
.
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.
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.
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 :).