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

load translation from lang files

This commit is contained in:
2024-06-30 09:47:34 +03:00
parent abefad1f39
commit 45840e0418
5 changed files with 85 additions and 68 deletions

View File

@@ -62,6 +62,10 @@ public final class SkinRestorer {
SkinRestorer.skinStorage = new SkinStorage(new SkinIO(worldSkinDirectory));
}
public static String resource(String name) {
return String.format("/assets/%s/%s", SkinRestorer.MOD_ID, name);
}
public static CompletableFuture<Result<Collection<ServerPlayer>, String>> setSkinAsync(
MinecraftServer server,
Collection<GameProfile> targets,

View File

@@ -12,7 +12,7 @@ import net.lionarius.skinrestorer.SkinRestorer;
import net.lionarius.skinrestorer.skin.SkinVariant;
import net.lionarius.skinrestorer.skin.provider.SkinProvider;
import net.lionarius.skinrestorer.util.Result;
import net.lionarius.skinrestorer.util.TranslationUtils;
import net.lionarius.skinrestorer.util.Translation;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.arguments.GameProfileArgument;
import net.minecraft.network.chat.Component;
@@ -109,8 +109,8 @@ public final class SkinCommand {
) {
SkinRestorer.setSkinAsync(src.getServer(), targets, skinSupplier).thenAccept(result -> {
if (result.isError()) {
src.sendFailure(TranslationUtils.translatableWithFallback(
TranslationUtils.COMMAND_SKIN_FAILED_KEY,
src.sendFailure(Translation.translatableWithFallback(
Translation.COMMAND_SKIN_FAILED_KEY,
result.getErrorValue()
));
return;
@@ -129,14 +129,14 @@ public final class SkinCommand {
playersComponent.append(", ");
}
src.sendSuccess(() -> TranslationUtils.translatableWithFallback(
TranslationUtils.COMMAND_SKIN_AFFECTED_PLAYERS_KEY,
src.sendSuccess(() -> Translation.translatableWithFallback(
Translation.COMMAND_SKIN_AFFECTED_PLAYERS_KEY,
playersComponent
), true);
}
} else {
src.sendSuccess(() -> TranslationUtils.translatableWithFallback(
TranslationUtils.COMMAND_SKIN_OK_KEY
src.sendSuccess(() -> Translation.translatableWithFallback(
Translation.COMMAND_SKIN_OK_KEY
), true);
}
});

View File

@@ -21,7 +21,7 @@ public final class FileUtils {
File configDirectory = SkinRestorer.getConfigDir().toFile();
File[] files = configDirectory.listFiles(
(file, name) -> !name.startsWith(TranslationUtils.TRANSLATION_FILENAME) && name.endsWith(SkinIO.FILE_EXTENSION)
(file, name) -> !name.startsWith(Translation.LEGACY_TRANSLATION_FILENAME) && name.endsWith(SkinIO.FILE_EXTENSION)
);
if (files == null)
return;
@@ -35,6 +35,19 @@ public final class FileUtils {
}
}
public static String readResource(String name) {
try (var stream = SkinRestorer.class.getResourceAsStream(name)) {
if (stream == null)
return null;
try (var reader = new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8))) {
return StringUtils.readString(reader);
}
} catch (IOException e) {
return null;
}
}
public static String readFile(File file) {
try (BufferedReader reader = new BufferedReader(new FileReader(file, StandardCharsets.UTF_8))) {
return StringUtils.readString(reader);

View File

@@ -0,0 +1,60 @@
package net.lionarius.skinrestorer.util;
import com.google.common.reflect.TypeToken;
import net.lionarius.skinrestorer.SkinRestorer;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
public final class Translation {
public static final String LEGACY_TRANSLATION_FILENAME = "translation";
public static final String COMMAND_SKIN_AFFECTED_PLAYERS_KEY = "skinrestorer.command.skin.affected_players";
public static final String COMMAND_SKIN_FAILED_KEY = "skinrestorer.command.skin.failed";
public static final String COMMAND_SKIN_OK_KEY = "skinrestorer.command.skin.ok";
private static Map<String, String> translations;
private Translation() {}
public static String get(String key) {
return translations.get(key);
}
public static MutableComponent translatableWithFallback(String key) {
return Component.translatableWithFallback(key, Translation.get(key));
}
public static MutableComponent translatableWithFallback(String key, Object... args) {
return Component.translatableWithFallback(key, Translation.get(key), args);
}
static {
try {
translations = Translation.loadTranslations("en_us");
} catch (Exception ex) {
SkinRestorer.LOGGER.error("Failed to load translation", ex);
}
if (translations == null) {
try {
translations = Translation.loadTranslations("en_us");
} catch (Exception ex) {
SkinRestorer.LOGGER.error("Failed to default translation", ex);
}
}
if (translations == null)
translations = new HashMap<>();
}
private static HashMap<String, String> loadTranslations(String lang) {
var json = FileUtils.readResource(SkinRestorer.resource(String.format("lang/%s.json", lang)));
var type = new TypeToken<HashMap<String, String>>() {}.getType();
return JsonUtils.fromJson(Objects.requireNonNull(json), type);
}
}

View File

@@ -1,60 +0,0 @@
package net.lionarius.skinrestorer.util;
import com.google.common.collect.ImmutableMap;
import com.google.common.reflect.TypeToken;
import net.lionarius.skinrestorer.SkinRestorer;
import net.lionarius.skinrestorer.skin.SkinIO;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
public final class TranslationUtils {
public static final String TRANSLATION_FILENAME = "translation";
public static final String COMMAND_SKIN_AFFECTED_PLAYERS_KEY = "skinrestorer.command.skin.affected_players";
public static final String COMMAND_SKIN_FAILED_KEY = "skinrestorer.command.skin.failed";
public static final String COMMAND_SKIN_OK_KEY = "skinrestorer.command.skin.ok";
private static Map<String, String> translations;
private TranslationUtils() {}
public static String getTranslation(String key) {
return TranslationUtils.translations.get(key);
}
public static MutableComponent translatableWithFallback(String key) {
return Component.translatableWithFallback(key, TranslationUtils.getTranslation(key));
}
public static MutableComponent translatableWithFallback(String key, Object... args) {
return Component.translatableWithFallback(key, TranslationUtils.getTranslation(key), args);
}
static {
Path path = SkinRestorer.getConfigDir().resolve(TRANSLATION_FILENAME + SkinIO.FILE_EXTENSION);
translations = null;
if (Files.exists(path)) {
try {
var mapType = new TypeToken<HashMap<String, String>>() {}.getType();
translations = JsonUtils.fromJson(Objects.requireNonNull(FileUtils.readFile(path.toFile())), mapType);
} catch (Exception ex) {
SkinRestorer.LOGGER.error("Failed to load translation", ex);
}
}
if (translations == null) {
translations = ImmutableMap.<String, String>builder()
.put(COMMAND_SKIN_AFFECTED_PLAYERS_KEY, "Applied skin changes for %s")
.put(COMMAND_SKIN_FAILED_KEY, "Failed to set skin: %s")
.put(COMMAND_SKIN_OK_KEY, "Skin changed")
.build();
}
}
}