OptionsList.java
net.minecraft.client.gui.components.OptionsList
信息
- 全限定名:net.minecraft.client.gui.components.OptionsList
- 类型:public class
- 包:net.minecraft.client.gui.components
- 源码路径:src/main/java/net/minecraft/client/gui/components/OptionsList.java
- 起始行号:L19
- 继承:ContainerObjectSelectionList<OptionsList.AbstractEntry>
- 职责:
TODO
字段/常量
-
BIG_BUTTON_WIDTH- 类型:
int - 修饰符:
private static final - 源码定位:
L20 - 说明:
TODO
- 类型:
-
DEFAULT_ITEM_HEIGHT- 类型:
int - 修饰符:
private static final - 源码定位:
L21 - 说明:
TODO
- 类型:
-
screen- 类型:
OptionsSubScreen - 修饰符:
private final - 源码定位:
L22 - 说明:
TODO
- 类型:
内部类/嵌套类型
-
net.minecraft.client.gui.components.OptionsList.AbstractEntry- 类型:
class - 修饰符:
protected abstract static - 源码定位:
L107 - 说明:
TODO
- 类型:
-
net.minecraft.client.gui.components.OptionsList.Entry- 类型:
class - 修饰符:
protected static - 源码定位:
L111 - 说明:
TODO
- 类型:
-
net.minecraft.client.gui.components.OptionsList.HeaderEntry- 类型:
class - 修饰符:
protected static - 源码定位:
L188 - 说明:
TODO
- 类型:
-
net.minecraft.client.gui.components.OptionsList.OptionInstanceWidget- 类型:
record - 修饰符:
public - 源码定位:
L217 - 说明:
TODO
- 类型:
构造器
public OptionsList(Minecraft minecraft, int width, OptionsSubScreen screen) @ L24
- 构造器名:OptionsList
- 源码定位:L24
- 修饰符:public
参数:
- minecraft: Minecraft
- width: int
- screen: OptionsSubScreen
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void addBig(OptionInstance<?> option) @ L30
- 方法名:addBig
- 源码定位:L30
- 返回类型:void
- 修饰符:public
参数:
- option: OptionInstance<?>
说明:
TODO
public void addSmall(OptionInstance<?>... options) @ L34
- 方法名:addSmall
- 源码定位:L34
- 返回类型:void
- 修饰符:public
参数:
- options: OptionInstance<?>…
说明:
TODO
public void addSmall(List<AbstractWidget> widgets) @ L41
- 方法名:addSmall
- 源码定位:L41
- 返回类型:void
- 修饰符:public
参数:
- widgets: List
说明:
TODO
public void addSmall(AbstractWidget firstOption, AbstractWidget secondOption) @ L47
- 方法名:addSmall
- 源码定位:L47
- 返回类型:void
- 修饰符:public
参数:
- firstOption: AbstractWidget
- secondOption: AbstractWidget
说明:
TODO
public void addSmall(AbstractWidget firstOption, OptionInstance<?> firstOptionInstance, AbstractWidget secondOption) @ L51
- 方法名:addSmall
- 源码定位:L51
- 返回类型:void
- 修饰符:public
参数:
- firstOption: AbstractWidget
- firstOptionInstance: OptionInstance<?>
- secondOption: AbstractWidget
说明:
TODO
public void addHeader(Component text) @ L55
- 方法名:addHeader
- 源码定位:L55
- 返回类型:void
- 修饰符:public
参数:
- text: Component
说明:
TODO
public int getRowWidth() @ L61
- 方法名:getRowWidth
- 源码定位:L61
- 返回类型:int
- 修饰符:public
参数:
- 无
说明:
TODO
public AbstractWidget findOption(OptionInstance<?> option) @ L66
- 方法名:findOption
- 源码定位:L66
- 返回类型:AbstractWidget
- 修饰符:public
参数:
- option: OptionInstance<?>
说明:
TODO
public void applyUnsavedChanges() @ L79
- 方法名:applyUnsavedChanges
- 源码定位:L79
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public void resetOption(OptionInstance<?> option) @ L92
- 方法名:resetOption
- 源码定位:L92
- 返回类型:void
- 修饰符:public
参数:
- option: OptionInstance<?>
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class OptionsList extends ContainerObjectSelectionList<OptionsList.AbstractEntry> {
private static final int BIG_BUTTON_WIDTH = 310;
private static final int DEFAULT_ITEM_HEIGHT = 25;
private final OptionsSubScreen screen;
public OptionsList(Minecraft minecraft, int width, OptionsSubScreen screen) {
super(minecraft, width, screen.layout.getContentHeight(), screen.layout.getHeaderHeight(), 25);
this.centerListVertically = false;
this.screen = screen;
}
public void addBig(OptionInstance<?> option) {
this.addEntry(OptionsList.Entry.big(this.minecraft.options, option, this.screen));
}
public void addSmall(OptionInstance<?>... options) {
for (int i = 0; i < options.length; i += 2) {
OptionInstance<?> secondOption = i < options.length - 1 ? options[i + 1] : null;
this.addEntry(OptionsList.Entry.small(this.minecraft.options, options[i], secondOption, this.screen));
}
}
public void addSmall(List<AbstractWidget> widgets) {
for (int i = 0; i < widgets.size(); i += 2) {
this.addSmall(widgets.get(i), i < widgets.size() - 1 ? widgets.get(i + 1) : null);
}
}
public void addSmall(AbstractWidget firstOption, @Nullable AbstractWidget secondOption) {
this.addEntry(OptionsList.Entry.small(firstOption, secondOption, this.screen));
}
public void addSmall(AbstractWidget firstOption, OptionInstance<?> firstOptionInstance, @Nullable AbstractWidget secondOption) {
this.addEntry(OptionsList.Entry.small(firstOption, firstOptionInstance, secondOption, this.screen));
}
public void addHeader(Component text) {
int lineHeight = 9;
int paddingTop = this.children().isEmpty() ? 0 : lineHeight * 2;
this.addEntry(new OptionsList.HeaderEntry(this.screen, text, paddingTop), paddingTop + lineHeight + 4);
}
@Override
public int getRowWidth() {
return 310;
}
public @Nullable AbstractWidget findOption(OptionInstance<?> option) {
for (OptionsList.AbstractEntry child : this.children()) {
if (child instanceof OptionsList.Entry entry) {
AbstractWidget widgetForOption = entry.findOption(option);
if (widgetForOption != null) {
return widgetForOption;
}
}
}
return null;
}
public void applyUnsavedChanges() {
for (OptionsList.AbstractEntry child : this.children()) {
if (child instanceof OptionsList.Entry entry) {
for (OptionsList.OptionInstanceWidget optionInstanceWidget : entry.children) {
if (optionInstanceWidget.optionInstance() != null
&& optionInstanceWidget.widget() instanceof OptionInstance.OptionInstanceSliderButton<?> optionSlider) {
optionSlider.applyUnsavedValue();
}
}
}
}
}
public void resetOption(OptionInstance<?> option) {
for (OptionsList.AbstractEntry child : this.children()) {
if (child instanceof OptionsList.Entry entry) {
for (OptionsList.OptionInstanceWidget optionInstanceWidget : entry.children) {
if (optionInstanceWidget.optionInstance() == option
&& optionInstanceWidget.widget() instanceof ResettableOptionWidget resettableOptionWidget) {
resettableOptionWidget.resetValue();
return;
}
}
}
}
}
@OnlyIn(Dist.CLIENT)
protected abstract static class AbstractEntry extends ContainerObjectSelectionList.Entry<OptionsList.AbstractEntry> {
}
@OnlyIn(Dist.CLIENT)
protected static class Entry extends OptionsList.AbstractEntry {
private final List<OptionsList.OptionInstanceWidget> children;
private final Screen screen;
private static final int X_OFFSET = 160;
private Entry(List<OptionsList.OptionInstanceWidget> widgets, Screen screen) {
this.children = widgets;
this.screen = screen;
}
public static OptionsList.Entry big(Options options, OptionInstance<?> optionInstance, Screen screen) {
return new OptionsList.Entry(List.of(new OptionsList.OptionInstanceWidget(optionInstance.createButton(options, 0, 0, 310), optionInstance)), screen);
}
public static OptionsList.Entry small(AbstractWidget leftWidget, @Nullable AbstractWidget rightWidget, Screen screen) {
return rightWidget == null
? new OptionsList.Entry(List.of(new OptionsList.OptionInstanceWidget(leftWidget)), screen)
: new OptionsList.Entry(List.of(new OptionsList.OptionInstanceWidget(leftWidget), new OptionsList.OptionInstanceWidget(rightWidget)), screen);
}
public static OptionsList.Entry small(
AbstractWidget leftWidget, OptionInstance<?> leftWidgetOptionInstance, @Nullable AbstractWidget rightWidget, Screen screen
) {
return rightWidget == null
? new OptionsList.Entry(List.of(new OptionsList.OptionInstanceWidget(leftWidget, leftWidgetOptionInstance)), screen)
: new OptionsList.Entry(
List.of(new OptionsList.OptionInstanceWidget(leftWidget, leftWidgetOptionInstance), new OptionsList.OptionInstanceWidget(rightWidget)),
screen
);
}
public static OptionsList.Entry small(Options options, OptionInstance<?> optionA, @Nullable OptionInstance<?> optionB, OptionsSubScreen screen) {
AbstractWidget buttonA = optionA.createButton(options);
return optionB == null
? new OptionsList.Entry(List.of(new OptionsList.OptionInstanceWidget(buttonA, optionA)), screen)
: new OptionsList.Entry(
List.of(
new OptionsList.OptionInstanceWidget(buttonA, optionA), new OptionsList.OptionInstanceWidget(optionB.createButton(options), optionB)
),
screen
);
}
@Override
public void extractContent(GuiGraphicsExtractor graphics, int mouseX, int mouseY, boolean hovered, float a) {
int xOffset = 0;
int x = this.screen.width / 2 - 155;
for (OptionsList.OptionInstanceWidget optionInstanceWidget : this.children) {
optionInstanceWidget.widget().setPosition(x + xOffset, this.getContentY());
optionInstanceWidget.widget().extractRenderState(graphics, mouseX, mouseY, a);
xOffset += 160;
}
}
@Override
public List<? extends GuiEventListener> children() {
return Lists.transform(this.children, OptionsList.OptionInstanceWidget::widget);
}
@Override
public List<? extends NarratableEntry> narratables() {
return Lists.transform(this.children, OptionsList.OptionInstanceWidget::widget);
}
public @Nullable AbstractWidget findOption(OptionInstance<?> option) {
for (OptionsList.OptionInstanceWidget child : this.children) {
if (child.optionInstance == option) {
return child.widget();
}
}
return null;
}
}
@OnlyIn(Dist.CLIENT)
protected static class HeaderEntry extends OptionsList.AbstractEntry {
private final Screen screen;
private final int paddingTop;
private final StringWidget widget;
protected HeaderEntry(Screen screen, Component text, int paddingTop) {
this.screen = screen;
this.paddingTop = paddingTop;
this.widget = new StringWidget(text, screen.getFont());
}
@Override
public List<? extends NarratableEntry> narratables() {
return List.of(this.widget);
}
@Override
public void extractContent(GuiGraphicsExtractor graphics, int mouseX, int mouseY, boolean hovered, float a) {
this.widget.setPosition(this.screen.width / 2 - 155, this.getContentY() + this.paddingTop);
this.widget.extractRenderState(graphics, mouseX, mouseY, a);
}
@Override
public List<? extends GuiEventListener> children() {
return List.of(this.widget);
}
}
@OnlyIn(Dist.CLIENT)
public record OptionInstanceWidget(AbstractWidget widget, @Nullable OptionInstance<?> optionInstance) {
public OptionInstanceWidget(AbstractWidget widget) {
this(widget, null);
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/返回值
- 引用位置:
-
- 引用位置:
继承
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
StringWidget()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置: