package net.minecraft.client.gui.screens.options; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.Minecraft; import net.minecraft.client.Options; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.ObjectSelectionList; import net.minecraft.client.gui.components.StringWidget; import net.minecraft.client.gui.layouts.LinearLayout; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.options.LanguageSelectScreen.LanguageSelectionList.Entry; import net.minecraft.client.resources.language.LanguageManager; import net.minecraft.network.chat.CommonComponents; import net.minecraft.network.chat.Component; @Environment(EnvType.CLIENT) public class LanguageSelectScreen extends OptionsSubScreen { private static final Component WARNING_LABEL = Component.translatable("options.languageAccuracyWarning").withColor(-4539718); private static final int FOOTER_HEIGHT = 53; private LanguageSelectScreen.LanguageSelectionList languageSelectionList; final LanguageManager languageManager; public LanguageSelectScreen(Screen lastScreen, Options options, LanguageManager languageManager) { super(lastScreen, options, Component.translatable("options.language.title")); this.languageManager = languageManager; this.layout.setFooterHeight(53); } @Override protected void addContents() { this.languageSelectionList = this.layout.addToContents(new LanguageSelectScreen.LanguageSelectionList(this.minecraft)); } @Override protected void addOptions() { } @Override protected void addFooter() { LinearLayout linearLayout = this.layout.addToFooter(LinearLayout.vertical()).spacing(8); linearLayout.defaultCellSetting().alignHorizontallyCenter(); linearLayout.addChild(new StringWidget(WARNING_LABEL, this.font)); LinearLayout linearLayout2 = linearLayout.addChild(LinearLayout.horizontal().spacing(8)); linearLayout2.addChild( Button.builder(Component.translatable("options.font"), button -> this.minecraft.setScreen(new FontOptionsScreen(this, this.options))).build() ); linearLayout2.addChild(Button.builder(CommonComponents.GUI_DONE, button -> this.onDone()).build()); } @Override protected void repositionElements() { super.repositionElements(); this.languageSelectionList.updateSize(this.width, this.layout); } void onDone() { Entry entry = this.languageSelectionList.getSelected(); if (entry != null && !entry.code.equals(this.languageManager.getSelected())) { this.languageManager.setSelected(entry.code); this.options.languageCode = entry.code; this.minecraft.reloadResourcePacks(); } this.minecraft.setScreen(this.lastScreen); } @Environment(EnvType.CLIENT) class LanguageSelectionList extends ObjectSelectionList { public LanguageSelectionList(final Minecraft minecraft) { super(minecraft, LanguageSelectScreen.this.width, LanguageSelectScreen.this.height - 33 - 53, 33, 18); String string = LanguageSelectScreen.this.languageManager.getSelected(); LanguageSelectScreen.this.languageManager .getLanguages() .forEach( (string2, languageInfo) -> { net.minecraft.client.gui.screens.options.LanguageSelectScreen.LanguageSelectionList.Entry entry = new net.minecraft.client.gui.screens.options.LanguageSelectScreen.LanguageSelectionList.Entry( this, string2, languageInfo ); this.addEntry(entry); if (string.equals(string2)) { this.setSelected(entry); } } ); if (this.getSelected() != null) { this.centerScrollOn(this.getSelected()); } } @Override public int getRowWidth() { return super.getRowWidth() + 50; } } }