LanguageSelectScreen.java
net.minecraft.client.gui.screens.options.LanguageSelectScreen
信息
- 全限定名:net.minecraft.client.gui.screens.options.LanguageSelectScreen
- 类型:public class
- 包:net.minecraft.client.gui.screens.options
- 源码路径:src/main/java/net/minecraft/client/gui/screens/options/LanguageSelectScreen.java
- 起始行号:L28
- 继承:OptionsSubScreen
- 职责:
TODO
字段/常量
-
WARNING_LABEL- 类型:
Component - 修饰符:
private static final - 源码定位:
L29 - 说明:
TODO
- 类型:
-
FOOTER_HEIGHT- 类型:
int - 修饰符:
private static final - 源码定位:
L30 - 说明:
TODO
- 类型:
-
SEARCH_HINT- 类型:
Component - 修饰符:
private static final - 源码定位:
L31 - 说明:
TODO
- 类型:
-
SEARCH_BOX_HEIGHT- 类型:
int - 修饰符:
private static final - 源码定位:
L32 - 说明:
TODO
- 类型:
-
languageManager- 类型:
LanguageManager - 修饰符:
private final - 源码定位:
L33 - 说明:
TODO
- 类型:
-
languageSelectionList- 类型:
LanguageSelectScreen.LanguageSelectionList - 修饰符:
private - 源码定位:
L34 - 说明:
TODO
- 类型:
-
search- 类型:
EditBox - 修饰符:
private - 源码定位:
L35 - 说明:
TODO
- 类型:
内部类/嵌套类型
-
net.minecraft.client.gui.screens.options.LanguageSelectScreen.LanguageSelectionList- 类型:
class - 修饰符:
private - 源码定位:
L114 - 说明:
TODO
- 类型:
-
net.minecraft.client.gui.screens.options.LanguageSelectScreen.LanguageSelectionList.Entry- 类型:
class - 修饰符:
public - 源码定位:
L152 - 说明:
TODO
- 类型:
构造器
public LanguageSelectScreen(Screen lastScreen, Options options, LanguageManager languageManager) @ L37
- 构造器名:LanguageSelectScreen
- 源码定位:L37
- 修饰符:public
参数:
- lastScreen: Screen
- options: Options
- languageManager: LanguageManager
说明:
TODO
方法
下面的方法块按源码顺序生成。
protected void addTitle() @ L43
- 方法名:addTitle
- 源码定位:L43
- 返回类型:void
- 修饰符:protected
参数:
- 无
说明:
TODO
protected void setInitialFocus() @ L58
- 方法名:setInitialFocus
- 源码定位:L58
- 返回类型:void
- 修饰符:protected
参数:
- 无
说明:
TODO
protected void addContents() @ L67
- 方法名:addContents
- 源码定位:L67
- 返回类型:void
- 修饰符:protected
参数:
- 无
说明:
TODO
protected void addOptions() @ L72
- 方法名:addOptions
- 源码定位:L72
- 返回类型:void
- 修饰符:protected
参数:
- 无
说明:
TODO
protected void addFooter() @ L76
- 方法名:addFooter
- 源码定位:L76
- 返回类型:void
- 修饰符:protected
参数:
- 无
说明:
TODO
protected void repositionElements() @ L88
- 方法名:repositionElements
- 源码定位:L88
- 返回类型:void
- 修饰符:protected
参数:
- 无
说明:
TODO
private void onDone() @ L96
- 方法名:onDone
- 源码定位:L96
- 返回类型:void
- 修饰符:private
参数:
- 无
说明:
TODO
protected boolean panoramaShouldSpin() @ L108
- 方法名:panoramaShouldSpin
- 源码定位:L108
- 返回类型:boolean
- 修饰符:protected
参数:
- 无
说明:
TODO
代码
@OnlyIn(Dist.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 static final Component SEARCH_HINT = Component.translatable("gui.language.search").withStyle(EditBox.SEARCH_HINT_STYLE);
private static final int SEARCH_BOX_HEIGHT = 15;
private final LanguageManager languageManager;
private LanguageSelectScreen.@Nullable LanguageSelectionList languageSelectionList;
private @Nullable EditBox search;
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 addTitle() {
LinearLayout header = this.layout.addToHeader(LinearLayout.vertical().spacing(4));
header.defaultCellSetting().alignHorizontallyCenter();
header.addChild(new StringWidget(this.title, this.font));
this.search = header.addChild(new EditBox(this.font, 0, 0, 200, 15, Component.empty()));
this.search.setHint(SEARCH_HINT);
this.search.setResponder(string -> {
if (this.languageSelectionList != null) {
this.languageSelectionList.filterEntries(string);
}
});
this.layout.setHeaderHeight((int)(12.0 + 9.0 + 15.0));
}
@Override
protected void setInitialFocus() {
if (this.search != null) {
this.setInitialFocus(this.search);
} else {
super.setInitialFocus();
}
}
@Override
protected void addContents() {
this.languageSelectionList = this.layout.addToContents(new LanguageSelectScreen.LanguageSelectionList(this.minecraft));
}
@Override
protected void addOptions() {
}
@Override
protected void addFooter() {
LinearLayout footer = this.layout.addToFooter(LinearLayout.vertical()).spacing(8);
footer.defaultCellSetting().alignHorizontallyCenter();
footer.addChild(new StringWidget(WARNING_LABEL, this.font));
LinearLayout bottomButtons = footer.addChild(LinearLayout.horizontal().spacing(8));
bottomButtons.addChild(
Button.builder(Component.translatable("options.font"), button -> this.minecraft.setScreen(new FontOptionsScreen(this, this.options))).build()
);
bottomButtons.addChild(Button.builder(CommonComponents.GUI_DONE, button -> this.onDone()).build());
}
@Override
protected void repositionElements() {
super.repositionElements();
if (this.languageSelectionList != null) {
this.languageSelectionList.updateSize(this.width, this.layout);
}
}
private void onDone() {
if (this.languageSelectionList != null
&& this.languageSelectionList.getSelected() instanceof LanguageSelectScreen.LanguageSelectionList.Entry selectedEntry
&& !selectedEntry.code.equals(this.languageManager.getSelected())) {
this.languageManager.setSelected(selectedEntry.code);
this.options.languageCode = selectedEntry.code;
this.minecraft.reloadResourcePacks();
}
this.minecraft.setScreen(this.lastScreen);
}
@Override
protected boolean panoramaShouldSpin() {
return !(this.lastScreen instanceof AccessibilityOnboardingScreen);
}
@OnlyIn(Dist.CLIENT)
private class LanguageSelectionList extends ObjectSelectionList<LanguageSelectScreen.LanguageSelectionList.Entry> {
public LanguageSelectionList(Minecraft minecraft) {
Objects.requireNonNull(LanguageSelectScreen.this);
super(minecraft, LanguageSelectScreen.this.width, LanguageSelectScreen.this.height - 33 - 53, 33, 18);
String selectedLanguage = LanguageSelectScreen.this.languageManager.getSelected();
LanguageSelectScreen.this.languageManager.getLanguages().forEach((code, info) -> {
LanguageSelectScreen.LanguageSelectionList.Entry entry = new LanguageSelectScreen.LanguageSelectionList.Entry(code, info);
this.addEntry(entry);
if (selectedLanguage.equals(code)) {
this.setSelected(entry);
}
});
if (this.getSelected() != null) {
this.centerScrollOn(this.getSelected());
}
}
private void filterEntries(String filter) {
SortedMap<String, LanguageInfo> languages = LanguageSelectScreen.this.languageManager.getLanguages();
List<LanguageSelectScreen.LanguageSelectionList.Entry> filteredEntries = languages.entrySet()
.stream()
.filter(
entry -> filter.isEmpty()
|| entry.getValue().name().toLowerCase(Locale.ROOT).contains(filter.toLowerCase(Locale.ROOT))
|| entry.getValue().region().toLowerCase(Locale.ROOT).contains(filter.toLowerCase(Locale.ROOT))
)
.map(entry -> new LanguageSelectScreen.LanguageSelectionList.Entry(entry.getKey(), entry.getValue()))
.toList();
this.replaceEntries(filteredEntries);
this.refreshScrollAmount();
}
@Override
public int getRowWidth() {
return super.getRowWidth() + 50;
}
@OnlyIn(Dist.CLIENT)
public class Entry extends ObjectSelectionList.Entry<LanguageSelectScreen.LanguageSelectionList.Entry> {
private final String code;
private final Component language;
public Entry(String code, LanguageInfo language) {
Objects.requireNonNull(LanguageSelectionList.this);
super();
this.code = code;
this.language = language.toComponent();
}
@Override
public void extractContent(GuiGraphicsExtractor graphics, int mouseX, int mouseY, boolean hovered, float a) {
graphics.centeredText(LanguageSelectScreen.this.font, this.language, LanguageSelectionList.this.width / 2, this.getContentYMiddle() - 9 / 2, -1);
}
@Override
public boolean keyPressed(KeyEvent event) {
if (event.isSelection()) {
this.select();
LanguageSelectScreen.this.onDone();
return true;
} else {
return super.keyPressed(event);
}
}
@Override
public boolean mouseClicked(MouseButtonEvent event, boolean doubleClick) {
this.select();
if (doubleClick) {
LanguageSelectScreen.this.onDone();
}
return super.mouseClicked(event, doubleClick);
}
private void select() {
LanguageSelectionList.this.setSelected(this);
}
@Override
public Component getNarration() {
return Component.translatable("narrator.select", this.language);
}
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Button.builder()
- 引用位置:
-
- 引用位置:
字段/构造调用 - 关联成员:
EditBox()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
StringWidget()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
LinearLayout.horizontal(), LinearLayout.vertical()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
FontOptionsScreen()
- 引用位置:
-
- 引用位置:
继承
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
Component.empty(), Component.translatable()
- 引用位置: