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:
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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) {
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user