From 1b36f6465c066a0bf0468826f1d0a9c3e2e6b5d9 Mon Sep 17 00:00:00 2001 From: lionarius Date: Tue, 2 Jul 2024 00:01:00 +0300 Subject: [PATCH] make provider names constants and allow to not save applied skin --- .../lionarius/skinrestorer/SkinRestorer.java | 24 +++++++++++-------- .../skinrestorer/command/SkinCommand.java | 12 +++++++++- .../ServerLoginPacketListenerImplMixin.java | 3 ++- .../lionarius/skinrestorer/skin/SkinIO.java | 6 +++-- .../skinrestorer/skin/SkinValue.java | 3 ++- .../skin/provider/EmptySkinProvider.java | 3 +++ .../skin/provider/MineskinSkinProvider.java | 2 ++ .../skin/provider/MojangSkinProvider.java | 7 +++++- 8 files changed, 44 insertions(+), 16 deletions(-) diff --git a/common/src/main/java/net/lionarius/skinrestorer/SkinRestorer.java b/common/src/main/java/net/lionarius/skinrestorer/SkinRestorer.java index 2f3efd5..77c2ab7 100644 --- a/common/src/main/java/net/lionarius/skinrestorer/SkinRestorer.java +++ b/common/src/main/java/net/lionarius/skinrestorer/SkinRestorer.java @@ -5,9 +5,7 @@ import net.lionarius.skinrestorer.config.Config; import net.lionarius.skinrestorer.skin.SkinIO; import net.lionarius.skinrestorer.skin.SkinStorage; import net.lionarius.skinrestorer.skin.SkinValue; -import net.lionarius.skinrestorer.skin.provider.SkinProvider; -import net.lionarius.skinrestorer.skin.provider.SkinProviderContext; -import net.lionarius.skinrestorer.skin.provider.SkinProviderRegistry; +import net.lionarius.skinrestorer.skin.provider.*; import net.lionarius.skinrestorer.util.FileUtils; import net.lionarius.skinrestorer.util.PlayerUtils; import net.lionarius.skinrestorer.util.Result; @@ -59,9 +57,9 @@ public final class SkinRestorer { public static void onInitialize(Path rootConfigDir) { SkinRestorer.configDir = rootConfigDir.resolve(SkinRestorer.MOD_ID); - SkinRestorer.providersRegistry.register("empty", SkinProvider.EMPTY, false); - SkinRestorer.providersRegistry.register("mojang", SkinProvider.MOJANG); - SkinRestorer.providersRegistry.register("web", SkinProvider.MINESKIN); + SkinRestorer.providersRegistry.register(EmptySkinProvider.PROVIDER_NAME, SkinProvider.EMPTY, false); + SkinRestorer.providersRegistry.register(MojangSkinProvider.PROVIDER_NAME, SkinProvider.MOJANG); + SkinRestorer.providersRegistry.register(MineskinSkinProvider.PROVIDER_NAME, SkinProvider.MINESKIN); } public static void onServerStarted(MinecraftServer server) { @@ -81,14 +79,15 @@ public final class SkinRestorer { return String.format("/assets/%s/%s", SkinRestorer.MOD_ID, name); } - public static Collection applySkin(MinecraftServer server, Iterable targets, SkinValue value) { + public static Collection applySkin(MinecraftServer server, Iterable targets, SkinValue value, boolean save) { var acceptedPlayers = new HashSet(); for (var profile : targets) { if (!SkinRestorer.getSkinStorage().hasSavedSkin(profile.getId())) value = value.setOriginalValue(PlayerUtils.getPlayerSkin(profile)); - SkinRestorer.getSkinStorage().setSkin(profile.getId(), value); + if (save) + SkinRestorer.getSkinStorage().setSkin(profile.getId(), value); if (PlayerUtils.areSkinPropertiesEquals(value.value(), PlayerUtils.getPlayerSkin(profile))) continue; @@ -106,10 +105,15 @@ public final class SkinRestorer { return acceptedPlayers; } + public static Collection applySkin(MinecraftServer server, Iterable targets, SkinValue value) { + return SkinRestorer.applySkin(server, targets, value, true); + } + public static CompletableFuture, String>> setSkinAsync( MinecraftServer server, Collection targets, - SkinProviderContext context + SkinProviderContext context, + boolean save ) { return CompletableFuture.supplyAsync( () -> SkinRestorer.getProvider(context.name()).map(provider -> provider.getSkin(context.argument(), context.variant())) @@ -124,7 +128,7 @@ public final class SkinRestorer { var skinValue = SkinValue.fromProviderContextWithValue(context, skinResult.getSuccessValue().orElse(null)); - var acceptedPlayers = SkinRestorer.applySkin(server, targets, skinValue); + var acceptedPlayers = SkinRestorer.applySkin(server, targets, skinValue, save); return Result., String>success(acceptedPlayers); }, server) 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 fabb6ea..09b5be7 100644 --- a/common/src/main/java/net/lionarius/skinrestorer/command/SkinCommand.java +++ b/common/src/main/java/net/lionarius/skinrestorer/command/SkinCommand.java @@ -103,11 +103,12 @@ public final class SkinCommand { CommandSourceStack src, Collection targets, SkinProviderContext context, + boolean save, boolean setByOperator ) { src.sendSystemMessage(Translation.translatableWithFallback(Translation.COMMAND_SKIN_LOADING_KEY)); - SkinRestorer.setSkinAsync(src.getServer(), targets, context).thenAccept(result -> { + SkinRestorer.setSkinAsync(src.getServer(), targets, context, save).thenAccept(result -> { if (result.isError()) { src.sendFailure(Translation.translatableWithFallback( Translation.COMMAND_SKIN_FAILED_KEY, @@ -124,6 +125,15 @@ public final class SkinCommand { return targets.size(); } + private static int setSubcommand( + CommandSourceStack src, + Collection targets, + SkinProviderContext context, + boolean setByOperator + ) { + return SkinCommand.setSubcommand(src, targets, context, true, setByOperator); + } + private static int setSubcommand( CommandSourceStack src, SkinProviderContext context 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 a57277c..2efee44 100644 --- a/common/src/main/java/net/lionarius/skinrestorer/mixin/ServerLoginPacketListenerImplMixin.java +++ b/common/src/main/java/net/lionarius/skinrestorer/mixin/ServerLoginPacketListenerImplMixin.java @@ -3,6 +3,7 @@ package net.lionarius.skinrestorer.mixin; import com.mojang.authlib.GameProfile; import net.lionarius.skinrestorer.SkinRestorer; import net.lionarius.skinrestorer.skin.SkinValue; +import net.lionarius.skinrestorer.skin.provider.MojangSkinProvider; import net.lionarius.skinrestorer.skin.provider.SkinProviderContext; import net.lionarius.skinrestorer.util.PlayerUtils; import net.lionarius.skinrestorer.util.Result; @@ -51,7 +52,7 @@ public abstract class ServerLoginPacketListenerImplMixin { 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(MojangSkinProvider.PROVIDER_NAME, authenticatedProfile.getName(), null); var result = SkinRestorer.getProvider(context.name()).map( provider -> provider.getSkin(context.argument(), context.variant()) ).orElse(Result.ofNullable(null)); diff --git a/common/src/main/java/net/lionarius/skinrestorer/skin/SkinIO.java b/common/src/main/java/net/lionarius/skinrestorer/skin/SkinIO.java index 3b211c9..5081373 100644 --- a/common/src/main/java/net/lionarius/skinrestorer/skin/SkinIO.java +++ b/common/src/main/java/net/lionarius/skinrestorer/skin/SkinIO.java @@ -1,6 +1,8 @@ package net.lionarius.skinrestorer.skin; import com.mojang.authlib.properties.Property; +import net.lionarius.skinrestorer.skin.provider.MineskinSkinProvider; +import net.lionarius.skinrestorer.skin.provider.MojangSkinProvider; import net.lionarius.skinrestorer.util.FileUtils; import net.lionarius.skinrestorer.util.JsonUtils; @@ -63,7 +65,7 @@ public class SkinIO { var capeTexture = textures.getAsJsonObject("CAPE"); if (capeTexture != null) { var profileName = propertyJson.get("profileName").getAsString(); - return new SkinValue("mojang", profileName, null, property); + return new SkinValue(MojangSkinProvider.PROVIDER_NAME, profileName, null, property); } var skinTexture = textures.getAsJsonObject("SKIN"); @@ -77,7 +79,7 @@ public class SkinIO { variant = SkinVariant.SLIM; } - return new SkinValue("web", url, variant, property); + return new SkinValue(MineskinSkinProvider.PROVIDER_NAME, url, variant, property); } catch (Exception e) { return SkinValue.EMPTY; } diff --git a/common/src/main/java/net/lionarius/skinrestorer/skin/SkinValue.java b/common/src/main/java/net/lionarius/skinrestorer/skin/SkinValue.java index 5b7fb63..8b8d34c 100644 --- a/common/src/main/java/net/lionarius/skinrestorer/skin/SkinValue.java +++ b/common/src/main/java/net/lionarius/skinrestorer/skin/SkinValue.java @@ -1,6 +1,7 @@ package net.lionarius.skinrestorer.skin; import com.mojang.authlib.properties.Property; +import net.lionarius.skinrestorer.skin.provider.EmptySkinProvider; import net.lionarius.skinrestorer.skin.provider.SkinProviderContext; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -8,7 +9,7 @@ import org.jetbrains.annotations.Nullable; public record SkinValue(@NotNull String provider, @Nullable String argument, @Nullable SkinVariant variant, @Nullable Property value, @Nullable Property originalValue) { - public static final SkinValue EMPTY = new SkinValue("empty", null, null, null); + public static final SkinValue EMPTY = new SkinValue(EmptySkinProvider.PROVIDER_NAME, null, null, null); public SkinValue(String provider, String argument, SkinVariant variant, Property value) { this(provider, argument, variant, value, null); diff --git a/common/src/main/java/net/lionarius/skinrestorer/skin/provider/EmptySkinProvider.java b/common/src/main/java/net/lionarius/skinrestorer/skin/provider/EmptySkinProvider.java index 1ca0a67..fd5db1b 100644 --- a/common/src/main/java/net/lionarius/skinrestorer/skin/provider/EmptySkinProvider.java +++ b/common/src/main/java/net/lionarius/skinrestorer/skin/provider/EmptySkinProvider.java @@ -7,6 +7,9 @@ import net.lionarius.skinrestorer.util.Result; import java.util.Optional; public final class EmptySkinProvider implements SkinProvider { + + public static final String PROVIDER_NAME = "empty"; + @Override public String getArgumentName() { return "placeholder"; diff --git a/common/src/main/java/net/lionarius/skinrestorer/skin/provider/MineskinSkinProvider.java b/common/src/main/java/net/lionarius/skinrestorer/skin/provider/MineskinSkinProvider.java index 0e00dbf..fa09aa7 100644 --- a/common/src/main/java/net/lionarius/skinrestorer/skin/provider/MineskinSkinProvider.java +++ b/common/src/main/java/net/lionarius/skinrestorer/skin/provider/MineskinSkinProvider.java @@ -16,6 +16,8 @@ import java.util.Optional; public final class MineskinSkinProvider implements SkinProvider { + public static final String PROVIDER_NAME = "web"; + private static final URI API_URI; static { 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 7fae30b..d8b7328 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 @@ -2,12 +2,12 @@ package net.lionarius.skinrestorer.skin.provider; import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; import net.lionarius.skinrestorer.skin.SkinVariant; import net.lionarius.skinrestorer.util.JsonUtils; import net.lionarius.skinrestorer.util.Result; import net.lionarius.skinrestorer.util.WebUtils; -import org.jetbrains.annotations.NotNull; import java.io.IOException; import java.net.URI; @@ -17,6 +17,8 @@ import java.util.Optional; public final class MojangSkinProvider implements SkinProvider { + public static final String PROVIDER_NAME = "mojang"; + private static final URI API_URI; private static final URI SESSION_SERVER_URI; @@ -29,6 +31,9 @@ public final class MojangSkinProvider implements SkinProvider { } } + public static SkinProviderContext skinProviderContextFromProfile(GameProfile gameProfile) { + return new SkinProviderContext(MojangSkinProvider.PROVIDER_NAME, gameProfile.getName(), null); + } @Override public String getArgumentName() {