mirror of
https://github.com/Suiranoil/SkinRestorer.git
synced 2026-01-16 04:42:12 +00:00
store original skin value when setting skin
This commit is contained in:
@@ -85,6 +85,9 @@ public final class SkinRestorer {
|
||||
var acceptedPlayers = new HashSet<ServerPlayer>();
|
||||
|
||||
for (var profile : targets) {
|
||||
if (!SkinRestorer.getSkinStorage().hasSavedSkin(profile.getId()))
|
||||
value = value.setOriginalValue(PlayerUtils.getPlayerSkin(profile));
|
||||
|
||||
SkinRestorer.getSkinStorage().setSkin(profile.getId(), value);
|
||||
|
||||
if (PlayerUtils.areSkinPropertiesEquals(value.value(), PlayerUtils.getPlayerSkin(profile)))
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.mojang.authlib.GameProfile;
|
||||
import net.lionarius.skinrestorer.SkinRestorer;
|
||||
import net.lionarius.skinrestorer.skin.SkinValue;
|
||||
import net.lionarius.skinrestorer.skin.provider.SkinProviderContext;
|
||||
import net.lionarius.skinrestorer.util.PlayerUtils;
|
||||
import net.lionarius.skinrestorer.util.Result;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.server.network.ServerLoginPacketListenerImpl;
|
||||
@@ -36,12 +37,20 @@ public abstract class ServerLoginPacketListenerImplMixin {
|
||||
if (skinrestorer_pendingSkin == null) {
|
||||
skinrestorer_pendingSkin = CompletableFuture.supplyAsync(() -> {
|
||||
assert authenticatedProfile != null;
|
||||
SkinRestorer.LOGGER.debug("Fetching {}'s skin", authenticatedProfile.getName());
|
||||
var originalSkin = PlayerUtils.getPlayerSkin(authenticatedProfile);
|
||||
|
||||
if (SkinRestorer.getSkinStorage().hasSavedSkin(authenticatedProfile.getId()))
|
||||
if (SkinRestorer.getSkinStorage().hasSavedSkin(authenticatedProfile.getId())) {
|
||||
if (originalSkin != null) { // update to the latest official skin
|
||||
var value = SkinRestorer.getSkinStorage().getSkin(authenticatedProfile.getId());
|
||||
SkinRestorer.getSkinStorage().setSkin(authenticatedProfile.getId(), value.setOriginalValue(originalSkin));
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!server.enforceSecureProfile() && SkinRestorer.getConfig().fetchSkinOnFirstJoin()) { // fetch from mojang provider by username
|
||||
if (originalSkin == null && SkinRestorer.getConfig().fetchSkinOnFirstJoin()) {
|
||||
SkinRestorer.LOGGER.debug("Fetching {}'s skin", authenticatedProfile.getName());
|
||||
|
||||
var context = new SkinProviderContext("mojang", authenticatedProfile.getName(), null);
|
||||
var result = SkinRestorer.getProvider(context.name()).map(
|
||||
provider -> provider.getSkin(context.argument(), context.variant())
|
||||
|
||||
@@ -44,6 +44,9 @@ public class SkinStorage {
|
||||
if (skin == null)
|
||||
skin = SkinValue.EMPTY;
|
||||
|
||||
if (skinMap.containsKey(uuid) && skin.originalValue() == null)
|
||||
skin = skin.setOriginalValue(skinMap.get(uuid).originalValue());
|
||||
|
||||
skinMap.put(uuid, skin);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,10 +6,14 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public record SkinValue(@NotNull String provider, @Nullable String argument, @Nullable SkinVariant variant,
|
||||
@Nullable Property value) {
|
||||
@Nullable Property value, @Nullable Property originalValue) {
|
||||
|
||||
public static final SkinValue EMPTY = new SkinValue("empty", null, null, null);
|
||||
|
||||
public SkinValue(String provider, String argument, SkinVariant variant, Property value) {
|
||||
this(provider, argument, variant, value, null);
|
||||
}
|
||||
|
||||
public static SkinValue fromProviderContextWithValue(SkinProviderContext context, Property value) {
|
||||
return new SkinValue(context.name(), context.argument(), context.variant(), value);
|
||||
}
|
||||
@@ -17,4 +21,8 @@ public record SkinValue(@NotNull String provider, @Nullable String argument, @Nu
|
||||
public SkinProviderContext toProviderContext() {
|
||||
return new SkinProviderContext(this.provider, this.argument, this.variant);
|
||||
}
|
||||
|
||||
public SkinValue setOriginalValue(Property originalValue) {
|
||||
return new SkinValue(this.provider, this.argument, this.variant, this.value, originalValue);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user