mirror of
https://github.com/Suiranoil/SkinRestorer.git
synced 2026-01-16 04:42:12 +00:00
add configuration
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
});
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user