From 5a02ab83e8c19ed899ca05ff902ee07bbae4dd2b Mon Sep 17 00:00:00 2001 From: lionarius Date: Tue, 6 Aug 2024 15:29:02 +0300 Subject: [PATCH 1/7] Update README.md --- README.md | 78 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 60 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index b6a8be3..0a8c96f 100644 --- a/README.md +++ b/README.md @@ -1,55 +1,97 @@ # SkinRestorer -![a](https://cf.way2muchnoise.eu/versions/skinrestorer.svg) -![Enviroment](https://img.shields.io/badge/enviroment-server-orangered) -[![CurseForge Downloads](https://cf.way2muchnoise.eu/skinrestorer.svg)](https://www.curseforge.com/minecraft/mc-mods/skinrestorer) -[![Modrinth Downloads](https://img.shields.io/modrinth/dt/skinrestorer?logo=modrinth&label=&suffix=%20&style=flat&color=242629&labelColor=5ca424&logoColor=1c1c1c)](https://modrinth.com/mod/skinrestorer) +CurseForge +Modrinth -SkinRestorer is a **server-side** only mod for Fabric that allows players to use and change skins on servers running in -offline/insecure mode. +A server-side mod for managing and restoring player skins. -## Features +## ✨ Features -- **Set Skins from Mojang Account**: Fetch and apply skins using a valid Minecraft account name. -- **Set Skins from URL**: Apply skins from any image URL, supporting both classic (Steve) and slim (Alex) skin models. +- **Set skins from Mojang Account**: Fetch and apply skins using a valid Minecraft account name. +- **Set skins from Ely.by**: Fetch and apply skins using a valid [Ely.by](https://ely.by/) account name. +- **Set skins from URL**: Fetch and apply skins from any image URL, supporting both classic (Steve) and slim (Alex) skin models. +- **Automatic skin fetching**: Automatically fetch skins from Mojang when a player joins the server running in offline/insecure mode ([configurable](https://github.com/Suiranoil/SkinRestorer/wiki/Config)). +- **Permissions API support** -## Command Usage Guide +## 📜 Command Usage Guide -### Set Mojang Skin +### Set Mojang skin + +Fetch and apply skins using a valid Minecraft account name. ``` /skin set mojang [] ``` -- **Parameters:** +- **Parameters** - ``: Minecraft account name to fetch the skin from. - `[]`: (Optional, server operators only) Player(s) to apply the skin to. -### Set Web Skin +### Set Ely.by skin + +Fetch and apply skins using a valid [Ely.by](https://ely.by/) account name. + +``` +/skin set ely.by [] +``` + +- **Parameters** + - ``: Ely.by account name to fetch the skin from. + - `[]`: (Optional, server operators only) Player(s) to apply the skin to. + +### Set Web skin + +Fetch and apply skins from any image URL, supporting both classic (Steve) and slim (Alex) skin models. ``` /skin set web (classic|slim) "" [] ``` -- **Parameters:** +- **Parameters** - `(classic|slim)`: Type of the skin model (`classic` for Steve model, `slim` for Alex model). - `""`: URL pointing to the skin image file (ensure it follows Minecraft's skin size and format requirements). - `[]`: (Optional, server operators only) Player(s) to apply the skin to. -### Clear Skin +### Refresh skin + +Refetch and reapply the currently applied skins. + +``` +/skin refresh [] +``` + +- **Parameters** + - `[]`: (Optional, server operators only) Player(s) to refresh the skin for. + +### Clear skin + +Remove the currently applied skins. ``` /skin clear [] ``` -- **Parameters:** +- **Parameters** - `[]`: (Optional, server operators only) Player(s) to clear the skin for. -### Notes: +### Reset skin + +Reset to the default skin or remove any custom skin. + +If [automatic skin fetching](https://github.com/Suiranoil/SkinRestorer/wiki/Config#fetchskinonfirstjoin) is enabled, a new skin will be fetched when the player rejoins the server. + +``` +/skin reset [] +``` + +- **Parameters** + - `[]`: (Optional, server operators only) Player(s) to reset the skin for. + +### Notes - If `targets` is not specified, the command will apply to the player executing the command. -### Examples: +### Examples ``` /skin set mojang Notch From 251fdce7ffcfe5e56e94004edc957cbf46d6d573 Mon Sep 17 00:00:00 2001 From: lionarius Date: Tue, 20 Aug 2024 12:41:44 +0300 Subject: [PATCH 2/7] allow to configure skin provider for first join skin fetching --- .../lionarius/skinrestorer/config/Config.java | 6 ++++++ .../config/FirstJoinSkinProvider.java | 21 +++++++++++++++++++ .../ServerLoginPacketListenerImplMixin.java | 7 +++++-- 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 common/src/main/java/net/lionarius/skinrestorer/config/FirstJoinSkinProvider.java diff --git a/common/src/main/java/net/lionarius/skinrestorer/config/Config.java b/common/src/main/java/net/lionarius/skinrestorer/config/Config.java index 91d0acd..334d569 100644 --- a/common/src/main/java/net/lionarius/skinrestorer/config/Config.java +++ b/common/src/main/java/net/lionarius/skinrestorer/config/Config.java @@ -15,6 +15,8 @@ public final class Config { private boolean fetchSkinOnFirstJoin = true; + private FirstJoinSkinProvider firstJoinSkinProvider = FirstJoinSkinProvider.MOJANG; + private String proxy = ""; private long requestTimeout = 10; @@ -27,6 +29,10 @@ public final class Config { return this.fetchSkinOnFirstJoin; } + public FirstJoinSkinProvider getFirstJoinSkinProvider() { + return this.firstJoinSkinProvider; + } + public String getProxy() { return this.proxy; } diff --git a/common/src/main/java/net/lionarius/skinrestorer/config/FirstJoinSkinProvider.java b/common/src/main/java/net/lionarius/skinrestorer/config/FirstJoinSkinProvider.java new file mode 100644 index 0000000..bf43649 --- /dev/null +++ b/common/src/main/java/net/lionarius/skinrestorer/config/FirstJoinSkinProvider.java @@ -0,0 +1,21 @@ +package net.lionarius.skinrestorer.config; + +import com.google.gson.annotations.SerializedName; +import net.lionarius.skinrestorer.skin.provider.ElyBySkinProvider; +import net.lionarius.skinrestorer.skin.provider.MojangSkinProvider; + +public enum FirstJoinSkinProvider { + MOJANG(MojangSkinProvider.PROVIDER_NAME), + @SerializedName("ELY.BY") + ELY_BY(ElyBySkinProvider.PROVIDER_NAME); + + private final String name; + + FirstJoinSkinProvider(String name) { + this.name = name; + } + + public String getName() { + return this.name; + } +} diff --git a/common/src/main/java/net/lionarius/skinrestorer/mixin/ServerLoginPacketListenerImplMixin.java b/common/src/main/java/net/lionarius/skinrestorer/mixin/ServerLoginPacketListenerImplMixin.java index 59d772d..c607893 100644 --- a/common/src/main/java/net/lionarius/skinrestorer/mixin/ServerLoginPacketListenerImplMixin.java +++ b/common/src/main/java/net/lionarius/skinrestorer/mixin/ServerLoginPacketListenerImplMixin.java @@ -3,7 +3,6 @@ package net.lionarius.skinrestorer.mixin; import com.mojang.authlib.GameProfile; import net.lionarius.skinrestorer.SkinRestorer; import net.lionarius.skinrestorer.skin.SkinValue; -import net.lionarius.skinrestorer.skin.provider.MojangSkinProvider; import net.lionarius.skinrestorer.skin.provider.SkinProviderContext; import net.lionarius.skinrestorer.util.PlayerUtils; import net.lionarius.skinrestorer.util.Result; @@ -48,7 +47,11 @@ public abstract class ServerLoginPacketListenerImplMixin { if (originalSkin == null && SkinRestorer.getConfig().fetchSkinOnFirstJoin()) { SkinRestorer.LOGGER.debug("Fetching {}'s skin", authenticatedProfile.getName()); - var context = new SkinProviderContext(MojangSkinProvider.PROVIDER_NAME, authenticatedProfile.getName(), null); + var context = new SkinProviderContext( + SkinRestorer.getConfig().getFirstJoinSkinProvider().getName(), + authenticatedProfile.getName(), + null + ); var result = SkinRestorer.getProvider(context.name()).map( provider -> provider.getSkin(context.argument(), context.variant()) ).orElse(Result.ofNullable(null)); From 43397532710038523d82db23d444add75c63d3fd Mon Sep 17 00:00:00 2001 From: lionarius Date: Tue, 20 Aug 2024 13:13:32 +0300 Subject: [PATCH 3/7] add aliases for FirstJoinSkinProvider --- .../lionarius/skinrestorer/config/FirstJoinSkinProvider.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/net/lionarius/skinrestorer/config/FirstJoinSkinProvider.java b/common/src/main/java/net/lionarius/skinrestorer/config/FirstJoinSkinProvider.java index bf43649..120f8de 100644 --- a/common/src/main/java/net/lionarius/skinrestorer/config/FirstJoinSkinProvider.java +++ b/common/src/main/java/net/lionarius/skinrestorer/config/FirstJoinSkinProvider.java @@ -5,8 +5,9 @@ import net.lionarius.skinrestorer.skin.provider.ElyBySkinProvider; import net.lionarius.skinrestorer.skin.provider.MojangSkinProvider; public enum FirstJoinSkinProvider { + @SerializedName(value = "MOJANG", alternate = {"mojang"}) MOJANG(MojangSkinProvider.PROVIDER_NAME), - @SerializedName("ELY.BY") + @SerializedName(value = "ELY.BY", alternate = {"ely.by", "ELY_BY", "ely_by"}) ELY_BY(ElyBySkinProvider.PROVIDER_NAME); private final String name; From 7fcf515790a1ed3988e720f9a3462d7948712c81 Mon Sep 17 00:00:00 2001 From: lionarius Date: Tue, 20 Aug 2024 13:14:39 +0300 Subject: [PATCH 4/7] verify and fix config --- .../lionarius/skinrestorer/config/Config.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/common/src/main/java/net/lionarius/skinrestorer/config/Config.java b/common/src/main/java/net/lionarius/skinrestorer/config/Config.java index 334d569..3366568 100644 --- a/common/src/main/java/net/lionarius/skinrestorer/config/Config.java +++ b/common/src/main/java/net/lionarius/skinrestorer/config/Config.java @@ -54,8 +54,24 @@ public final class Config { if (config == null) config = new Config(); + config.verifyAndFix(); + FileUtils.writeFile(path.resolve(Config.CONFIG_FILENAME), JsonUtils.toJson(config)); return config; } + + private void verifyAndFix() { + if (this.language == null || this.language.isEmpty()) + this.language = "en_us"; + + if (this.firstJoinSkinProvider == null) + this.firstJoinSkinProvider = FirstJoinSkinProvider.MOJANG; + + if (this.proxy == null) + this.proxy = ""; + + if (this.requestTimeout <= 0) + this.requestTimeout = 10; + } } From d4efe0a177899aee99cc72cd8036965c437f5994 Mon Sep 17 00:00:00 2001 From: lionarius Date: Tue, 20 Aug 2024 13:20:38 +0300 Subject: [PATCH 5/7] update README.md --- README.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 0a8c96f..67e227a 100644 --- a/README.md +++ b/README.md @@ -7,42 +7,45 @@ A server-side mod for managing and restoring player skins. ## ✨ Features -- **Set skins from Mojang Account**: Fetch and apply skins using a valid Minecraft account name. -- **Set skins from Ely.by**: Fetch and apply skins using a valid [Ely.by](https://ely.by/) account name. +- **Set skins from Mojang Account**: Fetch and apply skins using a valid Minecraft username. +- **Set skins from Ely.by**: Fetch and apply skins using a valid [Ely.by](https://ely.by/) username. - **Set skins from URL**: Fetch and apply skins from any image URL, supporting both classic (Steve) and slim (Alex) skin models. -- **Automatic skin fetching**: Automatically fetch skins from Mojang when a player joins the server running in offline/insecure mode ([configurable](https://github.com/Suiranoil/SkinRestorer/wiki/Config)). +- **Automatic skin fetching**: Automatically fetch skin from Mojang/Ely.by when a player joins the server running in offline/insecure mode ([configurable](https://github.com/Suiranoil/SkinRestorer/wiki/Config)). +- **Singleplayer support**: Apply skins individually for each world. - **Permissions API support** ## 📜 Command Usage Guide ### Set Mojang skin -Fetch and apply skins using a valid Minecraft account name. +Fetch and apply skins using a valid Minecraft username. ``` /skin set mojang [] ``` - **Parameters** - - ``: Minecraft account name to fetch the skin from. + - ``: Minecraft username to fetch the skin from. - `[]`: (Optional, server operators only) Player(s) to apply the skin to. ### Set Ely.by skin -Fetch and apply skins using a valid [Ely.by](https://ely.by/) account name. +Fetch and apply skins using a valid [Ely.by](https://ely.by/) username. ``` /skin set ely.by [] ``` - **Parameters** - - ``: Ely.by account name to fetch the skin from. + - ``: Ely.by username to fetch the skin from. - `[]`: (Optional, server operators only) Player(s) to apply the skin to. ### Set Web skin Fetch and apply skins from any image URL, supporting both classic (Steve) and slim (Alex) skin models. +Uses [mineskin api](https://mineskin.org/) under the hood. + ``` /skin set web (classic|slim) "" [] ``` From 9e85e78398a187d0bd6fe80a1394519fa9e377fc Mon Sep 17 00:00:00 2001 From: lionarius Date: Tue, 20 Aug 2024 13:43:00 +0300 Subject: [PATCH 6/7] update changelog --- CHANGELOG.md | 6 ++++++ CHANGELOG_LATEST.md | 7 +++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c47320..dd26a6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2.0.3] - 2024-08-20 +### Added +- Added `firstJoinSkinProvider` config option (see [wiki](https://github.com/Suiranoil/SkinRestorer/wiki/Config#firstjoinskinprovider)) +### Fixed +- Fixed ability to set config values to `null` + ## [2.0.2] - 2024-08-04 ### Added - Backported to minecraft 1.20-1.20.2 diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 4b6fca1..a253c55 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -1,5 +1,4 @@ ### Added -- Backported to minecraft 1.20-1.20.2 -- [Forge] Added support for Forge -### Changed -- Changed minimum java version to 17 for minecraft 1.20-1.20.4 +- Added `firstJoinSkinProvider` config option (see [wiki](https://github.com/Suiranoil/SkinRestorer/wiki/Config#firstjoinskinprovider)) +### Fixed +- Fixed ability to set config values to `null` From abcc213ee097d1ce71b95cc5b0f2b072ce5bec09 Mon Sep 17 00:00:00 2001 From: lionarius Date: Tue, 20 Aug 2024 13:49:00 +0300 Subject: [PATCH 7/7] bump version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 135379f..d5fb11f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ minecraft_version_list=1.21 minecraft_version_range=[1.21, 1.22) mod_id=skinrestorer mod_name=SkinRestorer -mod_version=2.0.2 +mod_version=2.0.3 mod_author=Lionarius mod_homepage=https://www.curseforge.com/minecraft/mc-mods/skinrestorer mod_sources=https://github.com/Suiranoil/SkinRestorer