#Changelog
- Forward skinPerm config to bukkit to check it only if necessary
- Fix missing bungeecord aliases
- Fix forwarding permission checking
- Fix lowercase bungee perm
- Add permission node for /skinupdate < other >
- Remove debug from SkinDownloader (Fix #42)
- Added skin upload for Sponge and Bungee
- Added skin select for Sponge and Bungee
- Keep the held item slot after skin updating
- Added a keepskin property to ignore auto updating
- Fix NPE on login for sponge
- Cache Sponge name->uuid and skins using the Sponge API
- Fix skin auto updating by selecting only the newest skin from database
- Add Hikari database connection pooling
- Fix skin uploading
- Remove aggressive UUID caching
- Remove name resolves from database
- Automatically updates the skin if the stored skin is older than x minutes
- Fix loading skin for the new database schema
- Fixed 429 for cracked uuids
- Correctly catch not premium name resolves from third-party api
- Added skin upload support for bukkit
- Added specific skin select command for bukkit
- Load database record async too for restoring skins in BungeeCord
- Enforce a specific timeout (Fixes #37)
- Fix antibot condition
- Fix Bungee anti bot feature is not applying the skin
- Re-add valid name checking
- [Security] Fix forwarding permission on bukkitPermissions enabled
- Fixed temporarily permissions forwarding for bukkit permissions
- Added Mojang independent skin downloading
- Fix wildcard other permission in BungeeCord
- Fix reset command not working
- Fix NPE on bukkit perm check and skin reset
- Shrink database size by truncating mojang prefix url which is constant
- Fix database creation
- Fix updateabilities results into always flight for incompatibility with other plugins
- Fixed wrong profile save on BungeeCord
- Add command forward support if the command only runs on the backend server
- Fix NPE on skinupdate bungeecord
- Fix missing skinupdate < other > command for bungee
- Fix json parsing from third party api
- Add BungeeCord support for Sponge servers
- Add instant update support for sponge
- Add missing skin permissions for the Sponge server
- Fixed health abilities shown on instant updates
- Add skinupdate < other > command for console usage
- Fixed NPE on BungeeCord lazy loading
- Switch to mcapi.ca as they fixed rate-limiting issues and seems to be better
- Allow the command /skin set name as alternative command
- Set a useragent for accessing the third-party API
- Added the possibility to limit mojang requests
- Fixed skin cooldown if it's set to 0 - Fixed memory leak
- Removed lazy loading if a skin is already present (online-mode)
- Switch to offline uuid matching (temp)
- Added bukkit instead of bungee permissions checking (configurable)
- Allow lazy loading for certain servers in a BungeeCord network
- Fix NPE on instant updates for not finding the correct player (Fixes #24)
- Completely clean up database resources
- Update abilities on instant update
- Added config option about how many requests should be established until the plugin uses the third-party API
- Fix table creation in SQLite
- Fix BungeeCord permissions (Thanks to @FabioZumbi12)
- Fix duplicate no permission message (Thanks to @FabioZumbi12)
- Fix skinupdate command in BungeeCord (Thanks to @FabioZumbi12)
- Added skindata index (as suggested by @ieti)
- Added experimental Sponge support
- Added third-party api for fetching the uuid
- skinupdate command to invalidate the database entry (Added new locale messages)
- Removed error message if message file already exists (as suggested by @ieti)
- Load embed message file per default
- Fix NPE on skin reset
- Fix display name is used instead of playerlist name for instant updates
- Fix self instant update if the player is in a vehicle
- Added Bungee API methods for setting a new skin
- Fetch UUIDs from the database first before asking Mojang -> reduce Mojang requests
- Fix caching of pure cracked players (who don't use a premium username) -> reduce Mojang requests
- Fixed missing no permission message
- More user friendly messages on rate-limiting (added new locale messages)
- More aggressive uuid caching
- Added support for multiple BungeeCord proxies
- Fixed skin set if the player is longer online than 3 hours
- Fixed missing translations in BungeeCord
- Fixed error messages text on uuid rate-limiting. (It's not a skin downloading rate-limit)
- Removed database cache as the sql cache is powerful enough
- Fixed instant updates for BungeeCord servers
- Fix chunk loading issues on instant updates
- Added skin cooldown
- Added localization
- Fixed saving for empty skins
- Fixed command permission other not working
- Fixed skin apply if the player has already a skin (for example: online mode)
- Fixed blacklist permissions
- Changed from an extra blacklist permission to a negative one
- Sorry for that change it wasn't possible otherwise
- Fix bungeecord detection error on Craftbukkit
- Add blacklist and whitelist permission nodes
- Introduced new permissions
- changeskin.skin.whitelist.*
- changeskin.skin.whitelist.uuid
- changeskin.skin.blacklist.uuid
- Removed deprecated methods from the BungeeCord module
- Removed player name specific permissions. Use the uuids ones
- Fix support for slim skin models
- Fix preference saving if the same skin is already in the database
- Fix Bukkit command permission node
- Try to fix the save process for players who doesn't have a skin set
- Restore bukkit compatibility
- Fix skin loading from a mySQL database
- Added BungeeCord support
- Fixed support for MySQL
- Fixed support for default skins, so that they will be stored in the database too
- Fixed support for user who doesn't have a skin set in their Mojang account.
- Added database storage
- Added reset command /skin reset
- Added specific skin permssions. You can use changeskin.skin.* changeskin.skin.playerName changeskin.skin.uuid
- Fixed invisible players will be make visible
- Ignore invalid usernames
- Fixed support for PaperSpigot and TacoSpigot
- Fixed support for Craftbukkit servers
- Fixed instant skin apply
- Added native bukkit support
- Minimize preferences size if you choose your own profile
- Add instant skin changes (skin changes work without relogs)
- Added command to set skin for other players /setskin player <uuid/name>
- Added permissions to the plugin.yml
- Added child permissions
- [Experimental] Re fetch skins for player who don't have one
- Add UUID cache
- Add /setskin command
- Player skin can now be resolved also by their names
- Add default skins
- If you set it to your own UUID your preferences will be reseted
- [Fix] Properly ignore cancelled login events
- Clean up saved data on plugin disable
- Save user preferences
- Added /changeskin as an alias for setskin
- Added setskin API method
- Fix skin loading if no longer in cache
- Use skins from already playing players if possible -> reduces skin requests
- First release