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

implemented SkinProviderRegistry to store providers

This commit is contained in:
2024-06-30 17:04:15 +03:00
parent 299601998d
commit 4969d171b7
4 changed files with 71 additions and 13 deletions

View File

@@ -5,9 +5,8 @@ import com.mojang.authlib.properties.Property;
import net.lionarius.skinrestorer.config.Config;
import net.lionarius.skinrestorer.skin.SkinIO;
import net.lionarius.skinrestorer.skin.SkinStorage;
import net.lionarius.skinrestorer.skin.provider.MineskinSkinProvider;
import net.lionarius.skinrestorer.skin.provider.MojangSkinProvider;
import net.lionarius.skinrestorer.skin.provider.SkinProvider;
import net.lionarius.skinrestorer.skin.provider.SkinProviderRegistry;
import net.lionarius.skinrestorer.util.FileUtils;
import net.lionarius.skinrestorer.util.PlayerUtils;
import net.lionarius.skinrestorer.util.Result;
@@ -19,7 +18,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.nio.file.Path;
import java.util.*;
import java.util.Collection;
import java.util.HashSet;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;
@@ -28,7 +29,7 @@ public final class SkinRestorer {
public static final String MOD_ID = "skinrestorer";
public static final Logger LOGGER = LoggerFactory.getLogger("SkinRestorer");
private static final Map<String, SkinProvider> providers = new HashMap<>();
private static final SkinProviderRegistry providersRegistry = new SkinProviderRegistry();
private static SkinStorage skinStorage;
private static Path configDir;
private static Config config;
@@ -47,19 +48,19 @@ public final class SkinRestorer {
return SkinRestorer.config;
}
public static Iterable<Map.Entry<String, SkinProvider>> getProviders() {
return SkinRestorer.providers.entrySet();
public static SkinProviderRegistry getProvidersRegistry() {
return SkinRestorer.providersRegistry;
}
public static Optional<SkinProvider> getProvider(String name) {
return Optional.ofNullable(SkinRestorer.providers.get(name));
return Optional.ofNullable(SkinRestorer.providersRegistry.get(name));
}
public static void onInitialize(Path rootConfigDir) {
SkinRestorer.configDir = rootConfigDir.resolve(SkinRestorer.MOD_ID);
SkinRestorer.providers.put("mojang", new MojangSkinProvider());
SkinRestorer.providers.put("web", new MineskinSkinProvider());
SkinRestorer.providersRegistry.register("mojang", SkinProvider.MOJANG);
SkinRestorer.providersRegistry.register("web", SkinProvider.MINESKIN);
}
public static void onServerStarted(MinecraftServer server) {

View File

@@ -17,7 +17,10 @@ import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.arguments.GameProfileArgument;
import net.minecraft.network.chat.Component;
import java.util.*;
import java.util.Collection;
import java.util.Collections;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Function;
import java.util.function.Supplier;
@@ -35,9 +38,9 @@ public final class SkinCommand {
LiteralArgumentBuilder<CommandSourceStack> set = literal("set");
for (Map.Entry<String, SkinProvider> entry : SkinRestorer.getProviders()) {
set.then(buildAction(entry.getKey(), entry.getValue()));
}
var providers = SkinRestorer.getProvidersRegistry().getPublicProviders();
for (var entry : providers)
set.then(buildAction(entry.first(), entry.second()));
base.then(set);

View File

@@ -7,6 +7,8 @@ import net.lionarius.skinrestorer.util.Result;
import java.util.Optional;
public interface SkinProvider {
SkinProvider MOJANG = new MojangSkinProvider();
SkinProvider MINESKIN = new MineskinSkinProvider();
String getArgumentName();

View File

@@ -0,0 +1,52 @@
package net.lionarius.skinrestorer.skin.provider;
import it.unimi.dsi.fastutil.Pair;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
public final class SkinProviderRegistry {
private final Map<String, Entry> registry = new HashMap<>();
public SkinProvider get(String name) {
var entry = this.registry.get(name);
if (entry == null)
return null;
return entry.provider;
}
public Collection<Pair<String, SkinProvider>> getProviders() {
return this.registry
.entrySet()
.stream()
.map(entry -> Pair.of(entry.getKey(), entry.getValue().provider))
.toList();
}
public Collection<Pair<String, SkinProvider>> getPublicProviders() {
return this.registry
.entrySet()
.stream()
.filter(entry -> entry.getValue().isPublic)
.map(entry -> Pair.of(entry.getKey(), entry.getValue().provider))
.toList();
}
public void register(@NotNull String name, @NotNull SkinProvider provider) {
this.register(name, provider, true);
}
public void register(@NotNull String name, @NotNull SkinProvider provider, boolean isPublic) {
if (this.registry.containsKey(name))
throw new IllegalArgumentException("Skin provider with name " + name + " is already registered");
this.registry.put(name, new Entry(provider, isPublic));
}
private record Entry(SkinProvider provider, boolean isPublic) {
}
}