JustEnoughSkins
JustEnoughSkins is a Velocity plugin that checks the player's skin textures property during the profile request stage. Textures with valid Mojang signatures are kept as is, while unsigned or invalid textures are re-signed through the MineSkin API and cached to avoid repeated requests.
Configuration File
On first startup, the plugin creates:
plugins/justenoughskins/config.toml
Default configuration example:
# Enables debug logging.
# false: recommended for normal use.
# true: logs skin URLs, cache keys, signing time, and other details for troubleshooting.
Debug = false
# MineSkin API endpoint.
# By default, the plugin requests https://api.mineskin.org/v2/generate.
MineSkinApi = "https://api.mineskin.org"
# MineSkin API key.
# Register at https://account.mineskin.org/ to get one.
# Empty value still works, but requests may hit stricter rate limits.
# A valid key usually provides more stable quota and permissions.
# Using Cape requires a key with the required permission.
ApiKey = ""
# Maximum time to wait for signing during the profile request, in seconds.
# 3.0: wait up to 3 seconds, making the new skin more likely to apply on first login.
# 1.0: wait less and prioritize login speed; on timeout, the current request will not wait for the signing result.
# <= 0: run the full signing flow synchronously with no background timeout. Slow or unavailable MineSkin service can noticeably delay login.
WaitingTime = 3.0
# Cape parameter sent during skin generation.
# Empty value: do not request a cape.
# Non-empty value: send it as the cape field to MineSkin.
# The MineSkin API key must support the requested cape capability, otherwise generation may fail.
Cape = ""
# URL schemes allowed for original skin URLs that need re-signing.
# By default, only https is allowed.
AllowedSchemes = ["https"]
# URL domains allowed for original skin URLs that need re-signing.
# The plugin downloads the skin and sends it to MineSkin only when both the scheme and domain are allowed.
# Domains must match exactly, for example ["textures.minecraft.net"].
# Empty list means no unsigned or invalid external skin URL will be re-signed.
AllowedDomains = []
URL Allowlist
Textures with valid Mojang signatures are still accepted as is. The allowlist is checked only when a texture is unsigned or has an invalid signature and needs to be re-signed.
The original skin URL must satisfy both rules:
- Its scheme is listed in
AllowedSchemes. - Its domain is listed in
AllowedDomains.
URLs outside the allowlist are rejected. They are not downloaded and are not submitted to MineSkin.
Cache
The plugin calculates a cache key from the original skin URL and stores MineSkin's signed texture result under:
plugins/justenoughskins/cache/
When the same skin URL appears again, the plugin uses the cache first to reduce MineSkin requests and login latency.
Reloading
After a Velocity proxy reload, the plugin reloads config.toml. Existing cache entries are not cleared automatically.
