diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e19b0f..12e4da3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ 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.2] - 2025-07-13 +### Fixed +- Fix crash when head profile name is null (fixes [#60](https://github.com/Suiranoil/SkinRestorer/issues/60) and [#61](https://github.com/Suiranoil/SkinRestorer/issues/61)) + ## [2.4.1] - 2025-07-09 ### Changed - Log full exception and argument when unable to fetch/set skin diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index b1a2a73..bf4e1a8 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -1,4 +1,2 @@ -### 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 +- Fix crash when head profile name is null (fixes [#60](https://github.com/Suiranoil/SkinRestorer/issues/60) and [#61](https://github.com/Suiranoil/SkinRestorer/issues/61)) diff --git a/common/src/main/java/net/lionarius/skinrestorer/mixin/SkullBlockEntityMixin.java b/common/src/main/java/net/lionarius/skinrestorer/mixin/SkullBlockEntityMixin.java index ca0d16d..4423856 100644 --- a/common/src/main/java/net/lionarius/skinrestorer/mixin/SkullBlockEntityMixin.java +++ b/common/src/main/java/net/lionarius/skinrestorer/mixin/SkullBlockEntityMixin.java @@ -17,32 +17,35 @@ import java.util.function.Consumer; @Mixin(SkullBlockEntity.class) public abstract class SkullBlockEntityMixin { - + @Shadow private static GameProfileCache profileCache; - + @Inject(method = "updateGameprofile", at = @At("HEAD"), cancellable = true) private static void fetchProfileByName(GameProfile profile, Consumer profileConsumer, CallbackInfo ci) { - if (profileCache == null || profile.isComplete()) + if (profileCache == null) return; - + + if (profile == null || profile.isComplete() || profile.getName() == null) + return; + var profileOpt = profileCache.get(profile.getName()); - + skinrestorer$replaceSkin(profileOpt, profileConsumer, ci); } - + @Unique private static void skinrestorer$replaceSkin(Optional profileOpt, Consumer profileConsumer, CallbackInfo ci) { if (profileOpt.isEmpty()) return; - + var profile = PlayerUtils.cloneGameProfile(profileOpt.get()); - + if (SkinRestorer.getSkinStorage().hasSavedSkin(profile.getId())) { var skin = SkinRestorer.getSkinStorage().getSkin(profile.getId(), false); PlayerUtils.applyRestoredSkin(profile, skin.value()); - + profileConsumer.accept(profile); ci.cancel(); } diff --git a/gradle.properties b/gradle.properties index 351c121..f962c08 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ minecraft_version_list=1.19.4 minecraft_version_range=[1.19.4,1.20) mod_id=skinrestorer mod_name=SkinRestorer -mod_version=2.4.1 +mod_version=2.4.2 mod_author=Lionarius mod_homepage=https://modrinth.com/mod/skinrestorer mod_sources=https://github.com/Suiranoil/SkinRestorer