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