2025-11-24 22:52:51 +03:00

95 lines
3.4 KiB
Java

/*
* Decompiled with CFR 0.152.
*
* Could not load the following classes:
* com.mojang.logging.LogUtils
* org.slf4j.Logger
*/
package net.minecraft.client.resources.language;
import com.mojang.logging.LogUtils;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import net.minecraft.client.resources.language.FormattedBidiReorder;
import net.minecraft.locale.DeprecatedTranslationsInfo;
import net.minecraft.locale.Language;
import net.minecraft.network.chat.FormattedText;
import net.minecraft.resources.Identifier;
import net.minecraft.server.packs.resources.Resource;
import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.util.FormattedCharSequence;
import org.slf4j.Logger;
public class ClientLanguage
extends Language {
private static final Logger LOGGER = LogUtils.getLogger();
private final Map<String, String> storage;
private final boolean defaultRightToLeft;
private ClientLanguage(Map<String, String> storage, boolean defaultRightToLeft) {
this.storage = storage;
this.defaultRightToLeft = defaultRightToLeft;
}
public static ClientLanguage loadFrom(ResourceManager resourceManager, List<String> languageStack, boolean defaultRightToLeft) {
HashMap<String, String> translations = new HashMap<String, String>();
for (String languageCode : languageStack) {
String path = String.format(Locale.ROOT, "lang/%s.json", languageCode);
for (String namespace : resourceManager.getNamespaces()) {
try {
Identifier location = Identifier.fromNamespaceAndPath(namespace, path);
ClientLanguage.appendFrom(languageCode, resourceManager.getResourceStack(location), translations);
}
catch (Exception e) {
LOGGER.warn("Skipped language file: {}:{} ({})", new Object[]{namespace, path, e.toString()});
}
}
}
DeprecatedTranslationsInfo.loadFromDefaultResource().applyToMap(translations);
return new ClientLanguage(Map.copyOf(translations), defaultRightToLeft);
}
private static void appendFrom(String languageCode, List<Resource> resources, Map<String, String> translations) {
for (Resource resource : resources) {
try {
InputStream inputStream = resource.open();
try {
Language.loadFromJson(inputStream, translations::put);
}
finally {
if (inputStream == null) continue;
inputStream.close();
}
}
catch (IOException e) {
LOGGER.warn("Failed to load translations for {} from pack {}", new Object[]{languageCode, resource.sourcePackId(), e});
}
}
}
@Override
public String getOrDefault(String key, String defaultValue) {
return this.storage.getOrDefault(key, defaultValue);
}
@Override
public boolean has(String key) {
return this.storage.containsKey(key);
}
@Override
public boolean isDefaultRightToLeft() {
return this.defaultRightToLeft;
}
@Override
public FormattedCharSequence getVisualOrder(FormattedText logicalOrderText) {
return FormattedBidiReorder.reorder(logicalOrderText, this.defaultRightToLeft);
}
}