Repository navigation
Releases: wallenjos01/SkinSetter
Release list
4.0.0
The mod has been mostly rewritten for greater expandability and to work with the latest version of MidnightCore.
The most significant changes for users of the mod are as follows:
- Versions up to 1.20.4 are now supported with the latest pre-release of MidnightCore.
- The saved skin format has been updated.
- The mod will attempt to update skins saved in the format used by the 3.x version of the mod.
- Skins are no longer stored in a list. They are now stored in a dictionary where each key is the skin's id and each value is the skin's configuration.
- The key
in_random_selectionhas been inverted and is now known asexcludeInRandom
- Additional options for skins can be specified
- Skins can now be selectively excluded from the GUI with a key called
excludeInGUI - Skin permissions are now specified using the
permissionfield.- If a skin has no specified permission, it is accessible to any player who can access the /skin command or a GUI
- Skins can now be selectively excluded from the GUI with a key called
- Default options can now be specified for all skins in a given file
- The root of a skin file can now have a
defaultskey with the following values:id: A pattern for automatically changing the ID of skins as they are loaded. The skin's specified ID will be passed to the value as the%id%placeholder.- For example, if
idis defined asmy_%id%, then all skins in the file will have the text "my_" prepended to their ID as they are loaded.
- For example, if
name: A pattern for automatically naming skins as they are loaded. The skin's specified and resolved IDs are passed to the value as the%raw_id%and%id%placeholders, respectively.permission: A pattern for automatically applying permissions to skins as they are loaded. The skin's IDs are passed to the value as placeholders in the same format as for the name.groups: Defines groups to be added to the skinexcludeInRandom: Whether skins in the file should by default be excluded from the random selection of /skin setrandomexcludeInGUI: Whether skins in the file should by default be excluded from appearing in the GUI of /skin set
- The root of a skin file can now have a
- The command syntax has slightly changed.
- The
/skin headcommand has been renamed to/skin item - The
/skin editcommand can now specify bothexcludeInGUIandpermissionvalues
- The
- For Spigot users: The mod is now distributed in two versions: One compiled against Java 8, and another compiled against Java 17.
- The Java 8 version should be used for Minecraft servers running version 1.16.x or lower.
- The Java 17 version should be used for Minecraft servers running version 1.17.x or higher.
- A mitigation was added for MC-68487
- MC-68487 is a Minecraft client bug which affects versions prior to 1.16.2
- The bug caused player heads with the same owner to all be rendered the same, even if they have different textures.
- This meant that all skins saved by the same player would render with the same skin texture in the GUI.
- The plugin now automatically generates a new UUID for each head item based on the skin texture on servers running versions older than 1.16.2.
Changes since the previous pre-release:
- YAML lang entries are once again supported.
- Multi-page GUIs now work as intended
- The mod now uses features introduced in MidnightCore 2.0.0-pre6, making it incompatible with older versions of MidnightCore.
4.0.0 Pre-Release 3
This release fixes a few bugs and adds a mitigation for a bug in older Minecraft clients which causes player heads to not render properly.
- Updated to MidnightCore v2.0.0-pre3
- Skins are now saved to disk immediately when the
/skin savecommand is run - Default lang entries are now saved to disk when the server starts up
- Lang entries now must be saved in JSON, due to conflicts in how the lang system works vs how YAML works.
- This means that lang files generated on Spigot servers in older versions of the plugin will not be loaded, and new JSON ones will be generated in their place.
- See the changelog for MidnightCore v2.0.0-pre3 for more information.
- This fixes a bug which made it so not all lang entries were customizable
- Fixed a bug which caused the
%skin_id%placeholder to not be filled when running the/skin itemcommand - Persistence and default skin configurations are now properly saved to disk when running the
/skin persistenceand/skin setDefault/clearDefaultcommands, respectively - A mitigation was added for MC-68487
- MC-68487 is a Minecraft client bug which affects versions prior to 1.16.2
- The bug caused player heads with the same owner to all be rendered the same, even if they have different textures.
- This meant that all skins saved by the same player would render with the same skin texture in the GUI.
- The plugin now automatically generates a new UUID for each head item based on the skin texture on servers running versions older than 1.16.2.
4.0.0 Pre-release 2
This pre-release adds tab-completion to Spigot servers and fixes bugs.
- Updated to MidnightCore v2.0.0-pre2
- Tab completion now works as expected on Spigot servers
- The
/skin setrandomcommand can once again specify a particular group to limit results to- Usage:
/skin setrandom [player] [group]
- Usage:
- A couple bugs were fixed:
- The
/skin resetcommand no longer logs an error to the console without sending a message - The
command.resetlanguage entry is now present on Spigot servers - The
command.set.onlinelanguage entry now allows either the%skin_id%or%name%placeholder to be specified.- This fixes compatibility with language files which were generated on an older version of SkinSetter. If you would like to return to defaults, delete the
langfolder in the plugin's data folder
- This fixes compatibility with language files which were generated on an older version of SkinSetter. If you would like to return to defaults, delete the
- The
4.0.0 Pre-release 1
The mod has been mostly rewritten for greater expandability and to work with the latest version of MidnightCore.
The most significant changes for users of the mod are as follows:
- Versions up to 1.20.2 are now supported with the latest pre-release of MidnightCore.
- The saved skin format has been updated.
- The mod will attempt to update skins saved in the format used by the 3.x version of the mod.
- This conversion has not been tested yet. Make backups of your skin files. (Located in the
skinsfolder)
- This conversion has not been tested yet. Make backups of your skin files. (Located in the
- Skins are no longer stored in a list. They are now stored in a dictionary where each key is the skin's id and each value is the skin's configuration.
- The key
in_random_selectionhas been inverted and is now known asexcludeInRandom
- The mod will attempt to update skins saved in the format used by the 3.x version of the mod.
- Additional options for skins can be specified
- Skins can now be selectively excluded from the GUI with a key called
excludeInGUI - Skin permissions are now specified using the
permissionfield.- If a skin has no specified permission, it is accessible to any player who can access the /skin command or a GUI
- Skins can now be selectively excluded from the GUI with a key called
- Default options can now be specified for all skins in a given file
- The root of a skin file can now have a
defaultskey with the following values:id: A pattern for automatically changing the ID of skins as they are loaded. The skin's specified ID will be passed to the value as the%id%placeholder.- For example, if
idis defined asmy_%id%, then all skins in the file will have the text "my_" prepended to their ID as they are loaded.
- For example, if
name: A pattern for automatically naming skins as they are loaded. The skin's specified and resolved IDs are passed to the value as the%raw_id%and%id%placeholders, respectively.permission: A pattern for automatically applying permissions to skins as they are loaded. The skin's IDs are passed to the value as placeholders in the same format as for the name.groups: Defines groups to be added to the skinexcludeInRandom: Whether skins in the file should by default be excluded from the random selection of /skin setrandomexcludeInGUI: Whether skins in the file should by default be excluded from appearing in the GUI of /skin set
- The root of a skin file can now have a
- The command syntax has slightly changed.
- The
/skin headcommand has been renamed to/skin item - The
/skin editcommand can now specify bothexcludeInGUIandpermissionvalues
- The
- For Spigot users: The mod is now distributed in two versions: One compiled against Java 8, and another compiled against Java 17.
- The Java 8 version should be used for Minecraft servers running version 1.16.x or lower.
- The Java 17 version should be used for Minecraft servers running version 1.17.x or higher.
3.1.0
General
- Updated to support up to 1.19.3
- Updated to the Latest MidnightCore
- Migrated to MidnightConfig
- Skin files are now loaded in alphabetical order from disk
- Only files that have changed will be saved when the server shuts down.
Bug Fixes
/skin setrandomnow excludes skins configured within_random_selection: falseproperly- Saving persistent skins no longer errors out when there is no default skin
- Null skins can no longer be saved
3.0.0
General
- Most of the code has been completely rewritten
- The API has been majorly refactored
- The Spigot version is now compiled with Java 11, and is compatible with all Spigot versions down to 1.8
- The Spigot version has been tested on the following versions to ensure basic functionality: 1.8, 1.8.3, 1.8.8, 1.9, 1.9.4, 1.10.2, 1.11.2, 1.12.2, 1.13.1, 1.13.2, 1.14.4, 1.15.2, 1.16.1, 1.16.2, 1.16.4, 1.17.1, 1.18, 1.18.2, and 1.19.2
Configration
- Skins are now stored in a different format, and can be stored across multiple files.
- The data folder now contains a folder called
skins. All.json/.ymlfiles found in this folder will be loaded as skin files - When saving a skin in-game using
/skin save, it will be stored in a file calleduser.json/user.yml - Skins are now stored in the following format:
"id": "[skin id]", "skin": { "uid":"[UUID]", "b64":"[skin data]", "sig":"[skin signature]" }, "name": "[skin name]", "item": { "type": "[item id]" "count": 1, "tag": { } }, "in_random_selection": true, "groups": [ "[group name]" ]
id: "[skin id]" skin: uid: "[UUID]" b64: "[skin data]" sig: "[skin signature]" name: "[skin name]" item: type: "[item id]" count: 1, tag: [NBT data] in_random_selection: true, groups: - "[group name]"
- The data folder now contains a folder called
This release requires MidnightCore Beta 9: https://github.com/M1dnightNinja/MidnightCore/releases/tag/v1.0.0-beta9
3.0 Pre-release 1
Much of the codebase has been rewritten.
The API has been majorly refactored.
Skins can now be stored in multiple files. All files in the skins folder that can be parsed by MidnightCore will be loaded on startup.
Skins are also stored in a slightly different format now
SkinSetter will attempt to upgrade skins stored in the old format in config.json on startup. Note: This is untested
This release requires MidnightCore beta 8.
- Note: as of now MidnightCore beta 8 does not have support for YAML on Spigot servers. This will be re-added soon.
Nearly all the code (barring any unknown bugs) in this repository should be ready for release, but Spigot users may want to wait until a future MidnightCore beta before updating, unless they want to use 1.18.2 and JSON only.
2.1.0
General:
- The API has been refactored slightly to be more consistent
- Internal changes have been made to work with MidnightCore beta 7
- A Spanish translation has been added
- Note: this is likely not 100% accurate
- The plugin has been thoroughly tested on Spigot versions 1.8.8, 1.9.4, 1.10.2, 1.11.2, 1.12.2, 1.13.2, 1.14.4, 1.15.2, 1.16.5, and 1.17.1.
- This version requires MidnightCore beta 7: https://github.com/M1dnightNinja/MidnightCore/releases/tag/v1.0.0-beta7
Configuration
- New optional parameters can now be added to skin objects in the config, including:
name:The display name of the skin for the default GUI item, can be formatted as JSON or plaintext with color codesitem:If this is specified, the GUI will use this item instead of generating a head with the skin. Items are formatted as follows:type:The material of the itemamount:The amount to have (optional, defaults to 1)tag:The NBT tag to be added to the item, formatted as a config section. (optional)name:The display name of the item. (optional, will use the NBT tag if not present)lore:The lore give the item, formatted as a list. (optional, will use the NBT tag if not present)
groups:A list of strings representing which groups the skin belongs toin_random:A boolean specifying whether or not the skin will appear in the/skin setrandomcommand. Defaults totrue
Commands:
- The
/skin setrandomcommand has been added. This will give the targets specified a random skin- Optionally, you can specify a group as a parameter to this command in the format
/skin setrandom <group> - If a group is specified, only skins which have that group will be selected
- Optionally, you can specify a group as a parameter to this command in the format
- The
/skin setcommand will now open a GUI of all the skins the player has access to if no skin is specified. - The
/skin headcommand has been added, allowing you to generate a player head with the saved skin you specify and give it to players- Usage:
/skin head <skin> <player>
- Usage:
- The
/skin editcommand has been added, allowing saved skin metadata to be edited in-game- There are 4 subcommands:
name,groups,item, andexcludeInRandom- Using
/skin edit <skin> name <name>will change the saved skin's display name in the GUI. RGB values, color codes, and raw JSON formatting are all supported. - Using
/skin edit <skin> groups add <group>or/skin edit <skin> groups remove <group>will add or remove a group name from the skin, respectively. - Using
/skin edit <skin> item savewill save the item you are holding as the skin's display item for the GUI - Using
/skin edit <skin> item clearwill reset the item to being a head with the skin applied. - Using
/skin edit <skin> excludeInRandom <true/false>will enable or disable the skin from showing up in/skin setrandom
- Using
- There are 4 subcommands:
Permissions
- In order to use skins, players will now need permissions to access them.
- Accessing a single skin:
skinsetter.skin.{skin id} - Accessing a group of skins:
skinsetter.group.{group name}
- Accessing a single skin:
- The permission
skinsetter.command.setwill now only let players access saved skins that they have been given permission to access. - The permission
skinsetter.command.set.onlineis now required for players to access online skins
2.1.0 Release Candidate 1
General:
- The API has been refactored slightly to be more consistent
- Internal changes have been made to work with MidnightCore beta 6
- Spigot is now at feature parity with Fabric (excluding entity selectors)
- With MidnightCore beta 6 doing all the heavy lifting, Spigot servers down to 1.8.8 should be supported.
- A Spanish translation has been added
- Note: this may have issues; my Spanish isn't that great and I mostly just wanted a way to test the Lang Module's localization functionality
Commands:
- The
/skin editcommand has been added, allowing saved skin metadata to be edited in-game- There are 4 subcommands:
name,groups,item, andexcludeInRandom- Using
/skin edit <skin> name <name>will change the saved skin's display name in the GUI. RGB values, color codes, and raw JSON formatting are all supported. - Using
/skin edit <skin> groups add <group>or/skin edit <skin> groups remove <group>will add or remove a group name from the skin, respectively. - Using
/skin edit <skin> item savewill save the item you are holding as the skin's display item for the GUI - Using
/skin edit <skin> item clearwill reset the item to being a head with the skin applied. - Using
/skin edit <skin> excludeInRandom <true/false>will enable or disable the skin from showing up in/skin setrandom
- Using
- There are 4 subcommands:
- The
/skin headcommand has been added, allowing you to generate a player head with the saved skin you specify and give it to players- Usage:
/skin head <skin> <players>
- Usage:
Assuming no major bugs are discovered in the coming days, and after some final testing, this will likely be the final 2.1.0 build.
2.1.0 Beta 1
Commands
- /skin setrandom has been added. This will give the targets specified a random skin
- /skin set will now open a GUI of all available skins if no skin is specified.
Configuration
- New optional parameters can now be added to skin objects in the config, including:
- name: The display name of the skin in the GUI, can be formatted as JSON or plaintext with color codes
- item: If this is specified, the GUI will use this item instead of generating a head with the skin. Items are formatted as follows:
- type: The material of the item
- amount: The amount to have (optional, defaults to 1)
- tag: The NBT tag to be added to the item, formatted as a config section. (optional)
- name: The display name of the item. (optional, will use the NBT tag if not present)
- lore: The lore give the item, formatted as a list. (optional, will use the NBT tag if not present)
- groups: A list of strings representing which groups the skin belongs to
- in_random: A boolean specifying whether or not the skin will appear in the /skin setrandom command. Defaults to true
Permissions
- In order to use skins, players will now need permissions to access them.
- Accessing a single skin: skinsetter.skin.{skin id}
- Accessing a group of skins: skinsetter.group.{group name}
TODO
- Make NBT tags work on Spigot. (Must be implemented in MidnightCore)
- Default skin groups?
- Make some of the optional parameters editable in-game
- Bug Fixes
Note: This build has only been tested in Fabric!