Skip to content

Releases: wallenjos01/SkinSetter

4.0.0

Choose a tag to compare

@wallenjos01 wallenjos01 released this 02 Feb 23:50

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_selection has been inverted and is now known as excludeInRandom
  • 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 permission field.
      • If a skin has no specified permission, it is accessible to any player who can access the /skin command or a GUI
  • Default options can now be specified for all skins in a given file
    • The root of a skin file can now have a defaults key 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 id is defined as my_%id%, then all skins in the file will have the text "my_" prepended to their ID as they are loaded.
      • 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 skin
      • excludeInRandom: Whether skins in the file should by default be excluded from the random selection of /skin setrandom
      • excludeInGUI: Whether skins in the file should by default be excluded from appearing in the GUI of /skin set
  • The command syntax has slightly changed.
    • The /skin head command has been renamed to /skin item
    • The /skin edit command can now specify both excludeInGUI and permission values
  • 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

4.0.0 Pre-Release 3 Pre-release
Pre-release

Choose a tag to compare

@wallenjos01 wallenjos01 released this 15 Nov 04:49

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 save command 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 item command
  • Persistence and default skin configurations are now properly saved to disk when running the /skin persistence and /skin setDefault/clearDefault commands, 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

4.0.0 Pre-release 2 Pre-release
Pre-release

Choose a tag to compare

@wallenjos01 wallenjos01 released this 05 Nov 20:26

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 setrandom command can once again specify a particular group to limit results to
    • Usage: /skin setrandom [player] [group]
  • A couple bugs were fixed:
    • The /skin reset command no longer logs an error to the console without sending a message
    • The command.reset language entry is now present on Spigot servers
    • The command.set.online language 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 lang folder in the plugin's data folder

4.0.0 Pre-release 1

4.0.0 Pre-release 1 Pre-release
Pre-release

Choose a tag to compare

@wallenjos01 wallenjos01 released this 05 Nov 01:46

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 skins folder)
    • 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_selection has been inverted and is now known as excludeInRandom
  • 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 permission field.
      • If a skin has no specified permission, it is accessible to any player who can access the /skin command or a GUI
  • Default options can now be specified for all skins in a given file
    • The root of a skin file can now have a defaults key 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 id is defined as my_%id%, then all skins in the file will have the text "my_" prepended to their ID as they are loaded.
      • 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 skin
      • excludeInRandom: Whether skins in the file should by default be excluded from the random selection of /skin setrandom
      • excludeInGUI: Whether skins in the file should by default be excluded from appearing in the GUI of /skin set
  • The command syntax has slightly changed.
    • The /skin head command has been renamed to /skin item
    • The /skin edit command can now specify both excludeInGUI and permission values
  • 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

Choose a tag to compare

@wallenjos01 wallenjos01 released this 28 Feb 04:44

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 setrandom now excludes skins configured with in_random_selection: false properly
  • Saving persistent skins no longer errors out when there is no default skin
  • Null skins can no longer be saved

3.0.0

Choose a tag to compare

@wallenjos01 wallenjos01 released this 14 Sep 18:56

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 / .yml files 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 called user.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]"

This release requires MidnightCore Beta 9: https://github.com/M1dnightNinja/MidnightCore/releases/tag/v1.0.0-beta9

3.0 Pre-release 1

3.0 Pre-release 1 Pre-release
Pre-release

Choose a tag to compare

@wallenjos01 wallenjos01 released this 24 May 18:08

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

Choose a tag to compare

@wallenjos01 wallenjos01 released this 17 Aug 23:26

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 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

Commands:

  • The /skin setrandom command 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
  • The /skin set command will now open a GUI of all the skins the player has access to if no skin is specified.
  • The /skin head command 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>
  • The /skin edit command has been added, allowing saved skin metadata to be edited in-game
    • There are 4 subcommands: name, groups, item, and excludeInRandom
      • 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 save will save the item you are holding as the skin's display item for the GUI
      • Using /skin edit <skin> item clear will 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

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}
  • The permission skinsetter.command.set will now only let players access saved skins that they have been given permission to access.
  • The permission skinsetter.command.set.online is now required for players to access online skins

2.1.0 Release Candidate 1

Pre-release

Choose a tag to compare

@wallenjos01 wallenjos01 released this 11 Aug 06:46

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 edit command has been added, allowing saved skin metadata to be edited in-game
    • There are 4 subcommands: name, groups, item, and excludeInRandom
      • 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 save will save the item you are holding as the skin's display item for the GUI
      • Using /skin edit <skin> item clear will 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
  • The /skin head command 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>

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

2.1.0 Beta 1 Pre-release
Pre-release

Choose a tag to compare

@wallenjos01 wallenjos01 released this 22 Jul 19:38

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!