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>();
|
var acceptedPlayers = new HashSet<ServerPlayer>();
|
||||||
|
|
||||||
for (var profile : targets) {
|
for (var profile : targets) {
|
||||||
|
if (!SkinRestorer.getSkinStorage().hasSavedSkin(profile.getId()))
|
||||||
|
value = value.setOriginalValue(PlayerUtils.getPlayerSkin(profile));
|
||||||
|
|
||||||
SkinRestorer.getSkinStorage().setSkin(profile.getId(), value);
|
SkinRestorer.getSkinStorage().setSkin(profile.getId(), value);
|
||||||
|
|
||||||
if (PlayerUtils.areSkinPropertiesEquals(value.value(), PlayerUtils.getPlayerSkin(profile)))
|
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.SkinRestorer;
|
||||||
import net.lionarius.skinrestorer.skin.SkinValue;
|
import net.lionarius.skinrestorer.skin.SkinValue;
|
||||||
import net.lionarius.skinrestorer.skin.provider.SkinProviderContext;
|
import net.lionarius.skinrestorer.skin.provider.SkinProviderContext;
|
||||||
|
import net.lionarius.skinrestorer.util.PlayerUtils;
|
||||||
import net.lionarius.skinrestorer.util.Result;
|
import net.lionarius.skinrestorer.util.Result;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.network.ServerLoginPacketListenerImpl;
|
import net.minecraft.server.network.ServerLoginPacketListenerImpl;
|
||||||
@@ -36,12 +37,20 @@ public abstract class ServerLoginPacketListenerImplMixin {
|
|||||||
if (skinrestorer_pendingSkin == null) {
|
if (skinrestorer_pendingSkin == null) {
|
||||||
skinrestorer_pendingSkin = CompletableFuture.supplyAsync(() -> {
|
skinrestorer_pendingSkin = CompletableFuture.supplyAsync(() -> {
|
||||||
assert authenticatedProfile != null;
|
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;
|
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 context = new SkinProviderContext("mojang", authenticatedProfile.getName(), null);
|
||||||
var result = SkinRestorer.getProvider(context.name()).map(
|
var result = SkinRestorer.getProvider(context.name()).map(
|
||||||
provider -> provider.getSkin(context.argument(), context.variant())
|
provider -> provider.getSkin(context.argument(), context.variant())
|
||||||
|
|||||||
@@ -44,6 +44,9 @@ public class SkinStorage {
|
|||||||
if (skin == null)
|
if (skin == null)
|
||||||
skin = SkinValue.EMPTY;
|
skin = SkinValue.EMPTY;
|
||||||
|
|
||||||
|
if (skinMap.containsKey(uuid) && skin.originalValue() == null)
|
||||||
|
skin = skin.setOriginalValue(skinMap.get(uuid).originalValue());
|
||||||
|
|
||||||
skinMap.put(uuid, skin);
|
skinMap.put(uuid, skin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,10 +6,14 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
public record SkinValue(@NotNull String provider, @Nullable String argument, @Nullable SkinVariant variant,
|
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 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) {
|
public static SkinValue fromProviderContextWithValue(SkinProviderContext context, Property value) {
|
||||||
return new SkinValue(context.name(), context.argument(), context.variant(), 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() {
|
public SkinProviderContext toProviderContext() {
|
||||||
return new SkinProviderContext(this.provider, this.argument, this.variant);
|
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