LanguageManager.java

net.minecraft.client.resources.language.LanguageManager

信息

  • 全限定名:net.minecraft.client.resources.language.LanguageManager
  • 类型:public class
  • 包:net.minecraft.client.resources.language
  • 源码路径:src/main/java/net/minecraft/client/resources/language/LanguageManager.java
  • 起始行号:L24
  • 实现:ResourceManagerReloadListener
  • 职责:

    TODO

字段/常量

  • LOGGER

    • 类型: Logger
    • 修饰符: private static final
    • 源码定位: L25
    • 说明:

      TODO

  • DEFAULT_LANGUAGE

    • 类型: LanguageInfo
    • 修饰符: private static final
    • 源码定位: L26
    • 说明:

      TODO

  • languages

    • 类型: Map<String,LanguageInfo>
    • 修饰符: private
    • 源码定位: L27
    • 说明:

      TODO

  • currentCode

    • 类型: String
    • 修饰符: private
    • 源码定位: L28
    • 说明:

      TODO

  • reloadCallback

    • 类型: Consumer<ClientLanguage>
    • 修饰符: private final
    • 源码定位: L29
    • 说明:

      TODO

内部类/嵌套类型

构造器

public LanguageManager(String languageCode, Consumer<ClientLanguage> reloadCallback) @ L31

  • 构造器名:LanguageManager
  • 源码定位:L31
  • 修饰符:public

参数:

  • languageCode: String
  • reloadCallback: Consumer

说明:

TODO

方法

下面的方法块按源码顺序生成。

private static Map<String,LanguageInfo> extractLanguages(Stream<PackResources> resourcePacks) @ L36

  • 方法名:extractLanguages
  • 源码定位:L36
  • 返回类型:Map<String,LanguageInfo>
  • 修饰符:private static

参数:

  • resourcePacks: Stream

说明:

TODO

public void onResourceManagerReload(ResourceManager resourceManager) @ L51

  • 方法名:onResourceManagerReload
  • 源码定位:L51
  • 返回类型:void
  • 修饰符:public

参数:

  • resourceManager: ResourceManager

说明:

TODO

public void setSelected(String code) @ L71

  • 方法名:setSelected
  • 源码定位:L71
  • 返回类型:void
  • 修饰符:public

参数:

  • code: String

说明:

TODO

public String getSelected() @ L75

  • 方法名:getSelected
  • 源码定位:L75
  • 返回类型:String
  • 修饰符:public

参数:

说明:

TODO

public SortedMap<String,LanguageInfo> getLanguages() @ L79

  • 方法名:getLanguages
  • 源码定位:L79
  • 返回类型:SortedMap<String,LanguageInfo>
  • 修饰符:public

参数:

说明:

TODO

public LanguageInfo getLanguage(String code) @ L83

  • 方法名:getLanguage
  • 源码定位:L83
  • 返回类型:LanguageInfo
  • 修饰符:public

参数:

  • code: String

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class LanguageManager implements ResourceManagerReloadListener {
    private static final Logger LOGGER = LogUtils.getLogger();
    private static final LanguageInfo DEFAULT_LANGUAGE = new LanguageInfo("US", "English", false);
    private Map<String, LanguageInfo> languages = ImmutableMap.of("en_us", DEFAULT_LANGUAGE);
    private String currentCode;
    private final Consumer<ClientLanguage> reloadCallback;
 
    public LanguageManager(String languageCode, Consumer<ClientLanguage> reloadCallback) {
        this.currentCode = languageCode;
        this.reloadCallback = reloadCallback;
    }
 
    private static Map<String, LanguageInfo> extractLanguages(Stream<PackResources> resourcePacks) {
        Map<String, LanguageInfo> result = Maps.newHashMap();
        resourcePacks.forEach(resourcePack -> {
            try {
                LanguageMetadataSection languageMetadataSection = resourcePack.getMetadataSection(LanguageMetadataSection.TYPE);
                if (languageMetadataSection != null) {
                    languageMetadataSection.languages().forEach(result::putIfAbsent);
                }
            } catch (Exception var3) {
                LOGGER.warn("Unable to parse language metadata section of resourcepack: {}", resourcePack.packId(), var3);
            }
        });
        return ImmutableMap.copyOf(result);
    }
 
    @Override
    public void onResourceManagerReload(ResourceManager resourceManager) {
        this.languages = extractLanguages(resourceManager.listPacks());
        List<String> languageStack = new ArrayList<>(2);
        boolean defaultRightToLeft = DEFAULT_LANGUAGE.bidirectional();
        languageStack.add("en_us");
        if (!this.currentCode.equals("en_us")) {
            LanguageInfo currentLanguage = this.languages.get(this.currentCode);
            if (currentLanguage != null) {
                languageStack.add(this.currentCode);
                defaultRightToLeft = currentLanguage.bidirectional();
            }
        }
 
        ClientLanguage locale = ClientLanguage.loadFrom(resourceManager, languageStack, defaultRightToLeft);
        I18n.setLanguage(locale);
        Language.inject(locale);
        this.reloadCallback.accept(locale);
    }
 
    public void setSelected(String code) {
        this.currentCode = code;
    }
 
    public String getSelected() {
        return this.currentCode;
    }
 
    public SortedMap<String, LanguageInfo> getLanguages() {
        return new TreeMap<>(this.languages);
    }
 
    public @Nullable LanguageInfo getLanguage(String code) {
        return this.languages.get(code);
    }
}

引用的其他类