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

add configuration

This commit is contained in:
2024-06-30 11:55:40 +03:00
parent 9b4406d840
commit 56f05f5a88
5 changed files with 70 additions and 7 deletions

View File

@@ -2,6 +2,7 @@ package net.lionarius.skinrestorer;
import com.mojang.authlib.GameProfile;
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;
@@ -10,6 +11,7 @@ import net.lionarius.skinrestorer.skin.provider.SkinProvider;
import net.lionarius.skinrestorer.util.FileUtils;
import net.lionarius.skinrestorer.util.PlayerUtils;
import net.lionarius.skinrestorer.util.Result;
import net.lionarius.skinrestorer.util.Translation;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.level.storage.LevelResource;
@@ -29,6 +31,7 @@ public final class SkinRestorer {
private static final Map<String, SkinProvider> providers = new HashMap<>();
private static SkinStorage skinStorage;
private static Path configDir;
private static Config config;
private SkinRestorer() {}
@@ -40,6 +43,10 @@ public final class SkinRestorer {
return SkinRestorer.configDir;
}
public static Config getConfig() {
return SkinRestorer.config;
}
public static Iterable<Map.Entry<String, SkinProvider>> getProviders() {
return SkinRestorer.providers.entrySet();
}
@@ -59,9 +66,15 @@ public final class SkinRestorer {
Path worldSkinDirectory = server.getWorldPath(LevelResource.ROOT).resolve(SkinRestorer.MOD_ID);
FileUtils.tryMigrateOldSkinDirectory(worldSkinDirectory);
SkinRestorer.reloadConfig();
SkinRestorer.skinStorage = new SkinStorage(new SkinIO(worldSkinDirectory));
}
public static void reloadConfig() {
SkinRestorer.config = Config.load(SkinRestorer.getConfigDir());
Translation.reloadTranslations();
}
public static String resource(String name) {
return String.format("/assets/%s/%s", SkinRestorer.MOD_ID, name);
}

View File

@@ -0,0 +1,47 @@
package net.lionarius.skinrestorer.config;
import net.lionarius.skinrestorer.SkinRestorer;
import net.lionarius.skinrestorer.util.FileUtils;
import net.lionarius.skinrestorer.util.JsonUtils;
import java.nio.file.Path;
public final class Config {
public static final String CONFIG_FILENAME = "config.json";
private String language = "en_us";
private boolean fetchSkinOnFirstJoin = true;
public String getLanguage() {
return language;
}
public boolean fetchSkinOnFirstJoin() {
return fetchSkinOnFirstJoin;
}
public static Config load(Path path) {
var configFile = path.resolve(Config.CONFIG_FILENAME).toFile();
Config config = null;
if (configFile.exists()) {
try {
config = JsonUtils.fromJson(FileUtils.readFile(configFile), Config.class);
} catch (Exception e) {
SkinRestorer.LOGGER.warn("Could not load config", e);
}
}
if (config == null) {
config = new Config();
}
FileUtils.writeFile(path.toFile(), Config.CONFIG_FILENAME, JsonUtils.toJson(config));
return config;
}
}

View File

@@ -33,7 +33,7 @@ public abstract class ServerLoginPacketListenerImplMixin {
assert authenticatedProfile != null;
SkinRestorer.LOGGER.debug("Fetching {}'s skin", authenticatedProfile.getName());
if (!SkinRestorer.getSkinStorage().hasSavedSkin(authenticatedProfile.getId())) { // when player joins for the first time fetch Mojang skin by his username
if (SkinRestorer.getConfig().fetchSkinOnFirstJoin() && !SkinRestorer.getSkinStorage().hasSavedSkin(authenticatedProfile.getId())) { // when player joins for the first time fetch Mojang skin by his username
var result = SkinRestorer.getProvider("mojang").map(
provider -> provider.getSkin(authenticatedProfile.getName(), SkinVariant.CLASSIC)
).orElse(Result.ofNullable(null));
@@ -42,7 +42,7 @@ public abstract class ServerLoginPacketListenerImplMixin {
SkinRestorer.getSkinStorage().setSkin(authenticatedProfile.getId(), result.getSuccessValue().orElse(null));
}
SkinRestorer.getSkinStorage().getSkin(authenticatedProfile.getId()); // loads skin from disk
SkinRestorer.getSkinStorage().getSkin(authenticatedProfile.getId());
return null;
});

View File

@@ -1,6 +1,7 @@
package net.lionarius.skinrestorer.util;
import net.lionarius.skinrestorer.SkinRestorer;
import net.lionarius.skinrestorer.config.Config;
import net.lionarius.skinrestorer.skin.SkinIO;
import java.io.*;
@@ -21,7 +22,9 @@ public final class FileUtils {
File configDirectory = SkinRestorer.getConfigDir().toFile();
File[] files = configDirectory.listFiles(
(file, name) -> !name.startsWith(Translation.LEGACY_TRANSLATION_FILENAME) && name.endsWith(SkinIO.FILE_EXTENSION)
(file, name) -> !name.startsWith(Translation.LEGACY_TRANSLATION_FILENAME)
&& !name.startsWith(Config.CONFIG_FILENAME)
&& name.endsWith(SkinIO.FILE_EXTENSION)
);
if (files == null)
return;

View File

@@ -32,16 +32,16 @@ public final class Translation {
return Component.translatableWithFallback(key, Translation.get(key), args);
}
static {
public static void reloadTranslations() {
try {
translations = Translation.loadTranslations("en_us"); // TODO: load from config
translations = Translation.loadTranslationMap(SkinRestorer.getConfig().getLanguage());
} catch (Exception ex) {
SkinRestorer.LOGGER.error("Failed to load translation", ex);
}
if (translations == null) {
try {
translations = Translation.loadTranslations("en_us");
translations = Translation.loadTranslationMap("en_us");
} catch (Exception ex) {
SkinRestorer.LOGGER.error("Failed to default translation", ex);
}
@@ -51,7 +51,7 @@ public final class Translation {
translations = new ImmutableMap.Builder<String, String>().build();
}
private static ImmutableMap<String, String> loadTranslations(String lang) {
private static ImmutableMap<String, String> loadTranslationMap(String lang) {
var json = FileUtils.readResource(SkinRestorer.resource(String.format("lang/%s.json", lang)));
var type = new TypeToken<Map<String, String>>() {}.getType();