1
0
mirror of https://github.com/Suiranoil/SkinRestorer.git synced 2026-01-16 04:42:12 +00:00

make provider names constants and allow to not save applied skin

This commit is contained in:
2024-07-02 00:01:00 +03:00
parent b1d2d1de7b
commit 1b36f6465c
8 changed files with 44 additions and 16 deletions

View File

@@ -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<ServerPlayer> applySkin(MinecraftServer server, Iterable<GameProfile> targets, SkinValue value) {
public static Collection<ServerPlayer> applySkin(MinecraftServer server, Iterable<GameProfile> targets, SkinValue value, boolean save) {
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 (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<ServerPlayer> applySkin(MinecraftServer server, Iterable<GameProfile> targets, SkinValue value) {
return SkinRestorer.applySkin(server, targets, value, true);
}
public static CompletableFuture<Result<Collection<ServerPlayer>, String>> setSkinAsync(
MinecraftServer server,
Collection<GameProfile> 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.<Collection<ServerPlayer>, String>success(acceptedPlayers);
}, server)

View File

@@ -103,11 +103,12 @@ public final class SkinCommand {
CommandSourceStack src,
Collection<GameProfile> 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<GameProfile> targets,
SkinProviderContext context,
boolean setByOperator
) {
return SkinCommand.setSubcommand(src, targets, context, true, setByOperator);
}
private static int setSubcommand(
CommandSourceStack src,
SkinProviderContext context

View File

@@ -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));

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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";

View File

@@ -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 {

View File

@@ -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() {