From b518305028327b00b0c6153ae9192f75588d0a6b Mon Sep 17 00:00:00 2001 From: Lionarius Date: Mon, 7 Jul 2025 00:53:53 +0300 Subject: [PATCH 1/5] add exception logging --- .../lionarius/skinrestorer/skin/provider/MojangSkinProvider.java | 1 + 1 file changed, 1 insertion(+) diff --git a/common/src/main/java/net/lionarius/skinrestorer/skin/provider/MojangSkinProvider.java b/common/src/main/java/net/lionarius/skinrestorer/skin/provider/MojangSkinProvider.java index 944e45a..76cbde8 100644 --- a/common/src/main/java/net/lionarius/skinrestorer/skin/provider/MojangSkinProvider.java +++ b/common/src/main/java/net/lionarius/skinrestorer/skin/provider/MojangSkinProvider.java @@ -69,6 +69,7 @@ public final class MojangSkinProvider implements SkinProvider { var profile = MojangSkinProvider.getProfile(name); return Optional.of(profile); } catch (IOException e) { + SkinRestorer.LOGGER.error("Failed to find profile by name", e); return Optional.empty(); } } From 6ce3484824e527559fb7fb33420ce5762cd8cb92 Mon Sep 17 00:00:00 2001 From: Lionarius Date: Mon, 7 Jul 2025 01:02:12 +0300 Subject: [PATCH 2/5] rethrow io exception --- .../skinrestorer/skin/provider/MojangSkinProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/net/lionarius/skinrestorer/skin/provider/MojangSkinProvider.java b/common/src/main/java/net/lionarius/skinrestorer/skin/provider/MojangSkinProvider.java index 76cbde8..795f756 100644 --- a/common/src/main/java/net/lionarius/skinrestorer/skin/provider/MojangSkinProvider.java +++ b/common/src/main/java/net/lionarius/skinrestorer/skin/provider/MojangSkinProvider.java @@ -70,7 +70,7 @@ public final class MojangSkinProvider implements SkinProvider { return Optional.of(profile); } catch (IOException e) { SkinRestorer.LOGGER.error("Failed to find profile by name", e); - return Optional.empty(); + throw new RuntimeException(e); } } }, SkinRestorer.getConfigDir().resolve(PROFILE_CACHE_FILENAME).toFile()); From a8cc81e570399804197de276dd1e974f9baf4379 Mon Sep 17 00:00:00 2001 From: Lionarius Date: Mon, 7 Jul 2025 21:25:19 +0300 Subject: [PATCH 3/5] better exception logging --- .../lionarius/skinrestorer/SkinRestorer.java | 6 ++++-- .../exception/TransparentException.java | 19 +++++++++++++++++++ .../ServerLoginPacketListenerImplMixin.java | 2 +- .../skin/provider/MojangSkinProvider.java | 6 +++--- 4 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 common/src/main/java/net/lionarius/skinrestorer/exception/TransparentException.java diff --git a/common/src/main/java/net/lionarius/skinrestorer/SkinRestorer.java b/common/src/main/java/net/lionarius/skinrestorer/SkinRestorer.java index e536312..d8ac710 100644 --- a/common/src/main/java/net/lionarius/skinrestorer/SkinRestorer.java +++ b/common/src/main/java/net/lionarius/skinrestorer/SkinRestorer.java @@ -1,10 +1,12 @@ package net.lionarius.skinrestorer; +import com.google.common.base.Throwables; import com.mojang.authlib.GameProfile; import com.mojang.brigadier.CommandDispatcher; import net.lionarius.skinrestorer.command.SkinCommand; import net.lionarius.skinrestorer.config.Config; import net.lionarius.skinrestorer.config.provider.BuiltInProviderConfig; +import net.lionarius.skinrestorer.exception.TransparentException; import net.lionarius.skinrestorer.platform.Services; import net.lionarius.skinrestorer.skin.SkinIO; import net.lionarius.skinrestorer.skin.SkinStorage; @@ -147,7 +149,7 @@ public final class SkinRestorer { var skinResult = result.get(); if (skinResult.isError()) - return Result., String>error(skinResult.getErrorValue().getMessage()); + throw new TransparentException(Throwables.getRootCause(skinResult.getErrorValue())); var skinValue = SkinValue.fromProviderContextWithValue(context, skinResult.getSuccessValue().orElse(null)); @@ -156,7 +158,7 @@ public final class SkinRestorer { return Result., String>success(acceptedPlayers); }, server) .exceptionally(e -> { - SkinRestorer.LOGGER.error(e.toString()); + SkinRestorer.LOGGER.error("Failed to set skin '{}:{}'", context.name(), context.argument(), e); return Result.error(e.getMessage()); }); } diff --git a/common/src/main/java/net/lionarius/skinrestorer/exception/TransparentException.java b/common/src/main/java/net/lionarius/skinrestorer/exception/TransparentException.java new file mode 100644 index 0000000..1f439bf --- /dev/null +++ b/common/src/main/java/net/lionarius/skinrestorer/exception/TransparentException.java @@ -0,0 +1,19 @@ +package net.lionarius.skinrestorer.exception; + +import org.jetbrains.annotations.NotNull; + +public class TransparentException extends RuntimeException { + public TransparentException(@NotNull Throwable cause) { + super(cause); + } + + @Override + public String getMessage() { + return this.getCause().getMessage(); + } + + @Override + public String toString() { + return this.getLocalizedMessage(); + } +} 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 28e588e..ca9780c 100644 --- a/common/src/main/java/net/lionarius/skinrestorer/mixin/ServerLoginPacketListenerImplMixin.java +++ b/common/src/main/java/net/lionarius/skinrestorer/mixin/ServerLoginPacketListenerImplMixin.java @@ -82,7 +82,7 @@ public abstract class ServerLoginPacketListenerImplMixin { var value = SkinValue.fromProviderContextWithValue(context, result.getSuccessValue().orElse(null)); SkinRestorer.getSkinStorage().setSkin(profile.getId(), value); } else { - SkinRestorer.LOGGER.warn("Failed to fetch skin: {}", result.getErrorValue().getMessage()); + SkinRestorer.LOGGER.warn("Failed to fetch skin '{}:{}'", context.name(), context.argument(), result.getErrorValue()); } } } diff --git a/common/src/main/java/net/lionarius/skinrestorer/skin/provider/MojangSkinProvider.java b/common/src/main/java/net/lionarius/skinrestorer/skin/provider/MojangSkinProvider.java index 795f756..56f6bff 100644 --- a/common/src/main/java/net/lionarius/skinrestorer/skin/provider/MojangSkinProvider.java +++ b/common/src/main/java/net/lionarius/skinrestorer/skin/provider/MojangSkinProvider.java @@ -10,6 +10,7 @@ import com.mojang.authlib.yggdrasil.YggdrasilEnvironment; import com.mojang.authlib.yggdrasil.response.MinecraftProfilePropertiesResponse; import com.mojang.util.UndashedUuid; import net.lionarius.skinrestorer.SkinRestorer; +import net.lionarius.skinrestorer.exception.TransparentException; import net.lionarius.skinrestorer.skin.SkinVariant; import net.lionarius.skinrestorer.util.JsonUtils; import net.lionarius.skinrestorer.util.PlayerUtils; @@ -58,7 +59,7 @@ public final class MojangSkinProvider implements SkinProvider { var profile = MojangSkinProvider.getProfile(name); callback.onProfileLookupSucceeded(profile); } catch (IOException e) { - callback.onProfileLookupFailed(name, e); + throw new TransparentException(e); } } } @@ -69,8 +70,7 @@ public final class MojangSkinProvider implements SkinProvider { var profile = MojangSkinProvider.getProfile(name); return Optional.of(profile); } catch (IOException e) { - SkinRestorer.LOGGER.error("Failed to find profile by name", e); - throw new RuntimeException(e); + throw new TransparentException(e); } } }, SkinRestorer.getConfigDir().resolve(PROFILE_CACHE_FILENAME).toFile()); From 1c7f97551dd2b169d4a3e137faf1e22a70d288ec Mon Sep 17 00:00:00 2001 From: Lionarius Date: Wed, 9 Jul 2025 21:31:43 +0300 Subject: [PATCH 4/5] bump version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 2205f45..22e1540 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ minecraft_version_list=1.21.6 minecraft_version_range=[1.21.6, 1.22) mod_id=skinrestorer mod_name=SkinRestorer -mod_version=2.4.0 +mod_version=2.4.1 mod_author=Lionarius mod_homepage=https://modrinth.com/mod/skinrestorer mod_sources=https://github.com/Suiranoil/SkinRestorer From 8af1dd8f12098db720977b808660258f5a1e78a4 Mon Sep 17 00:00:00 2001 From: Lionarius Date: Wed, 9 Jul 2025 21:32:29 +0300 Subject: [PATCH 5/5] update CHANGELOG --- CHANGELOG.md | 6 ++++++ CHANGELOG_LATEST.md | 6 ++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 96c68fb..1e19b0f 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.4.1] - 2025-07-09 +### Changed +- Log full exception and argument when unable to fetch/set skin +### Fixed +- Fixed mojang provider using offline uuids when unable to fetch actual uuid resulting in `no profile with uuid` error + ## [2.4.0] - 2025-07-05 ### Fixed - Added support for player heads diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index fce5a47..b1a2a73 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -1,2 +1,4 @@ -### Added -- Added support for player heads +### Changed +- Log full exception and argument when unable to fetch/set skin +### Fixed +- Fixed mojang provider using offline uuids when unable to fetch actual uuid resulting in `no profile with uuid` error