From ed8e961067ac60d3074847b4598ea5f814193c46 Mon Sep 17 00:00:00 2001 From: lionarius Date: Tue, 2 Jul 2024 00:01:33 +0300 Subject: [PATCH] properly handle players with official textures in refresh --- .../skinrestorer/command/SkinCommand.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/net/lionarius/skinrestorer/command/SkinCommand.java b/common/src/main/java/net/lionarius/skinrestorer/command/SkinCommand.java index 09b5be7..f489292 100644 --- a/common/src/main/java/net/lionarius/skinrestorer/command/SkinCommand.java +++ b/common/src/main/java/net/lionarius/skinrestorer/command/SkinCommand.java @@ -10,6 +10,7 @@ import com.mojang.brigadier.context.CommandContext; import net.lionarius.skinrestorer.SkinRestorer; import net.lionarius.skinrestorer.skin.SkinValue; import net.lionarius.skinrestorer.skin.SkinVariant; +import net.lionarius.skinrestorer.skin.provider.MojangSkinProvider; import net.lionarius.skinrestorer.skin.provider.SkinProvider; import net.lionarius.skinrestorer.skin.provider.SkinProviderContext; import net.lionarius.skinrestorer.util.PlayerUtils; @@ -61,8 +62,23 @@ public final class SkinCommand { if (player == null) return 0; - var context = SkinRestorer.getSkinStorage().getSkin(player.getUUID()).toProviderContext(); - return SkinCommand.setSubcommand(src, Collections.singleton(player.getGameProfile()), context, false); + var profile = player.getGameProfile(); + + SkinProviderContext context = null; + var save = true; + if (!SkinRestorer.getSkinStorage().hasSavedSkin(profile.getId())) { + if (profile.getProperties().containsKey(PlayerUtils.TEXTURES_KEY)) { + save = false; + context = MojangSkinProvider.skinProviderContextFromProfile(profile); + } + } else { + context = SkinRestorer.getSkinStorage().getSkin(profile.getId()).toProviderContext(); + } + + if (context == null) + return 0; + + return SkinCommand.setSubcommand(src, Collections.singleton(profile), context, save, false); } private static int resetSubcommand( @@ -79,9 +95,9 @@ public final class SkinCommand { if (skin == null) continue; - var updatedPlayer = SkinRestorer.applySkin(src.getServer(), Collections.singleton(profile), skin); - + var updatedPlayer = SkinRestorer.applySkin(src.getServer(), Collections.singleton(profile), skin, false); SkinRestorer.getSkinStorage().deleteSkin(profile.getId()); + updatedPlayers.addAll(updatedPlayer); }