TelemetryEventWidget.java
net.minecraft.client.gui.screens.telemetry.TelemetryEventWidget
信息
- 全限定名:net.minecraft.client.gui.screens.telemetry.TelemetryEventWidget
- 类型:public class
- 包:net.minecraft.client.gui.screens.telemetry
- 源码路径:src/main/java/net/minecraft/client/gui/screens/telemetry/TelemetryEventWidget.java
- 起始行号:L28
- 继承:AbstractTextAreaWidget
- 职责:
TODO
字段/常量
-
HEADER_HORIZONTAL_PADDING- 类型:
int - 修饰符:
private static final - 源码定位:
L29 - 说明:
TODO
- 类型:
-
TELEMETRY_REQUIRED_TRANSLATION_KEY- 类型:
String - 修饰符:
private static final - 源码定位:
L30 - 说明:
TODO
- 类型:
-
TELEMETRY_OPTIONAL_TRANSLATION_KEY- 类型:
String - 修饰符:
private static final - 源码定位:
L31 - 说明:
TODO
- 类型:
-
TELEMETRY_OPTIONAL_DISABLED_TRANSLATION_KEY- 类型:
String - 修饰符:
private static final - 源码定位:
L32 - 说明:
TODO
- 类型:
-
PROPERTY_TITLE- 类型:
Component - 修饰符:
private static final - 源码定位:
L33 - 说明:
TODO
- 类型:
-
font- 类型:
Font - 修饰符:
private final - 源码定位:
L34 - 说明:
TODO
- 类型:
-
content- 类型:
TelemetryEventWidget.Content - 修饰符:
private - 源码定位:
L35 - 说明:
TODO
- 类型:
-
onScrolledListener- 类型:
DoubleConsumer - 修饰符:
private - 源码定位:
L36 - 说明:
TODO
- 类型:
内部类/嵌套类型
-
net.minecraft.client.gui.screens.telemetry.TelemetryEventWidget.Content- 类型:
record - 修饰符:
private - 源码定位:
L129 - 说明:
TODO
- 类型:
-
net.minecraft.client.gui.screens.telemetry.TelemetryEventWidget.ContentBuilder- 类型:
class - 修饰符:
private static - 源码定位:
L133 - 说明:
TODO
- 类型:
构造器
public TelemetryEventWidget(int x, int y, int width, int height, Font font) @ L38
- 构造器名:TelemetryEventWidget
- 源码定位:L38
- 修饰符:public
参数:
- x: int
- y: int
- width: int
- height: int
- font: Font
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void onOptInChanged(boolean optIn) @ L44
- 方法名:onOptInChanged
- 源码定位:L44
- 返回类型:void
- 修饰符:public
参数:
- optIn: boolean
说明:
TODO
public void updateLayout() @ L49
- 方法名:updateLayout
- 源码定位:L49
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
private TelemetryEventWidget.Content buildContent(boolean hasOptedIn) @ L54
- 方法名:buildContent
- 源码定位:L54
- 返回类型:TelemetryEventWidget.Content
- 修饰符:private
参数:
- hasOptedIn: boolean
说明:
TODO
public void setOnScrolledListener(DoubleConsumer listener) @ L71
- 方法名:setOnScrolledListener
- 源码定位:L71
- 返回类型:void
- 修饰符:public
参数:
- listener: DoubleConsumer
说明:
TODO
public void setScrollAmount(double scrollAmount) @ L75
- 方法名:setScrollAmount
- 源码定位:L75
- 返回类型:void
- 修饰符:public
参数:
- scrollAmount: double
说明:
TODO
protected int getInnerHeight() @ L83
- 方法名:getInnerHeight
- 源码定位:L83
- 返回类型:int
- 修饰符:protected
参数:
- 无
说明:
TODO
protected void extractContents(GuiGraphicsExtractor graphics, int mouseX, int mouseY, float a) @ L88
- 方法名:extractContents
- 源码定位:L88
- 返回类型:void
- 修饰符:protected
参数:
- graphics: GuiGraphicsExtractor
- mouseX: int
- mouseY: int
- a: float
说明:
TODO
protected void updateWidgetNarration(NarrationElementOutput output) @ L98
- 方法名:updateWidgetNarration
- 源码定位:L98
- 返回类型:void
- 修饰符:protected
参数:
- output: NarrationElementOutput
说明:
TODO
private Component grayOutIfDisabled(Component component, boolean isDisabled) @ L103
- 方法名:grayOutIfDisabled
- 源码定位:L103
- 返回类型:Component
- 修饰符:private
参数:
- component: Component
- isDisabled: boolean
说明:
TODO
private void addEventType(TelemetryEventWidget.ContentBuilder builder, TelemetryEventType eventType, boolean isDisabled) @ L107
- 方法名:addEventType
- 源码定位:L107
- 返回类型:void
- 修饰符:private
参数:
- builder: TelemetryEventWidget.ContentBuilder
- eventType: TelemetryEventType
- isDisabled: boolean
说明:
TODO
private void addEventTypeProperties(TelemetryEventType eventType, TelemetryEventWidget.ContentBuilder content, boolean isDisabled) @ L118
- 方法名:addEventTypeProperties
- 源码定位:L118
- 返回类型:void
- 修饰符:private
参数:
- eventType: TelemetryEventType
- content: TelemetryEventWidget.ContentBuilder
- isDisabled: boolean
说明:
TODO
private int containerWidth() @ L124
- 方法名:containerWidth
- 源码定位:L124
- 返回类型:int
- 修饰符:private
参数:
- 无
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class TelemetryEventWidget extends AbstractTextAreaWidget {
private static final int HEADER_HORIZONTAL_PADDING = 32;
private static final String TELEMETRY_REQUIRED_TRANSLATION_KEY = "telemetry.event.required";
private static final String TELEMETRY_OPTIONAL_TRANSLATION_KEY = "telemetry.event.optional";
private static final String TELEMETRY_OPTIONAL_DISABLED_TRANSLATION_KEY = "telemetry.event.optional.disabled";
private static final Component PROPERTY_TITLE = Component.translatable("telemetry_info.property_title").withStyle(ChatFormatting.UNDERLINE);
private final Font font;
private TelemetryEventWidget.Content content;
private @Nullable DoubleConsumer onScrolledListener;
public TelemetryEventWidget(int x, int y, int width, int height, Font font) {
super(x, y, width, height, Component.empty(), AbstractScrollArea.defaultSettings(9));
this.font = font;
this.content = this.buildContent(Minecraft.getInstance().telemetryOptInExtra());
}
public void onOptInChanged(boolean optIn) {
this.content = this.buildContent(optIn);
this.refreshScrollAmount();
}
public void updateLayout() {
this.content = this.buildContent(Minecraft.getInstance().telemetryOptInExtra());
this.refreshScrollAmount();
}
private TelemetryEventWidget.Content buildContent(boolean hasOptedIn) {
TelemetryEventWidget.ContentBuilder content = new TelemetryEventWidget.ContentBuilder(this.containerWidth());
List<TelemetryEventType> eventTypes = new ArrayList<>(TelemetryEventType.values());
eventTypes.sort(Comparator.comparing(TelemetryEventType::isOptIn));
for (int i = 0; i < eventTypes.size(); i++) {
TelemetryEventType eventType = eventTypes.get(i);
boolean isDisabled = eventType.isOptIn() && !hasOptedIn;
this.addEventType(content, eventType, isDisabled);
if (i < eventTypes.size() - 1) {
content.addSpacer(9);
}
}
return content.build();
}
public void setOnScrolledListener(@Nullable DoubleConsumer listener) {
this.onScrolledListener = listener;
}
@Override
public void setScrollAmount(double scrollAmount) {
super.setScrollAmount(scrollAmount);
if (this.onScrolledListener != null) {
this.onScrolledListener.accept(this.scrollAmount());
}
}
@Override
protected int getInnerHeight() {
return this.content.container().getHeight();
}
@Override
protected void extractContents(GuiGraphicsExtractor graphics, int mouseX, int mouseY, float a) {
int top = this.getInnerTop();
int left = this.getInnerLeft();
graphics.pose().pushMatrix();
graphics.pose().translate(left, top);
this.content.container().visitWidgets(widget -> widget.extractRenderState(graphics, mouseX, mouseY, a));
graphics.pose().popMatrix();
}
@Override
protected void updateWidgetNarration(NarrationElementOutput output) {
output.add(NarratedElementType.TITLE, this.content.narration());
}
private Component grayOutIfDisabled(Component component, boolean isDisabled) {
return (Component)(isDisabled ? component.copy().withStyle(ChatFormatting.GRAY) : component);
}
private void addEventType(TelemetryEventWidget.ContentBuilder builder, TelemetryEventType eventType, boolean isDisabled) {
String titleTranslationPattern = eventType.isOptIn()
? (isDisabled ? "telemetry.event.optional.disabled" : "telemetry.event.optional")
: "telemetry.event.required";
builder.addHeader(this.font, this.grayOutIfDisabled(Component.translatable(titleTranslationPattern, eventType.title()), isDisabled));
builder.addHeader(this.font, eventType.description().withStyle(ChatFormatting.GRAY));
builder.addSpacer(9 / 2);
builder.addLine(this.font, this.grayOutIfDisabled(PROPERTY_TITLE, isDisabled), 2);
this.addEventTypeProperties(eventType, builder, isDisabled);
}
private void addEventTypeProperties(TelemetryEventType eventType, TelemetryEventWidget.ContentBuilder content, boolean isDisabled) {
for (TelemetryProperty<?> property : eventType.properties()) {
content.addLine(this.font, this.grayOutIfDisabled(property.title(), isDisabled));
}
}
private int containerWidth() {
return this.width - this.totalInnerPadding();
}
@OnlyIn(Dist.CLIENT)
private record Content(Layout container, Component narration) {
}
@OnlyIn(Dist.CLIENT)
private static class ContentBuilder {
private final int width;
private final LinearLayout layout;
private final MutableComponent narration = Component.empty();
public ContentBuilder(int width) {
this.width = width;
this.layout = LinearLayout.vertical();
this.layout.defaultCellSetting().alignHorizontallyLeft();
this.layout.addChild(SpacerElement.width(width));
}
public void addLine(Font font, Component line) {
this.addLine(font, line, 0);
}
public void addLine(Font font, Component line, int paddingBottom) {
this.layout.addChild(new MultiLineTextWidget(line, font).setMaxWidth(this.width), s -> s.paddingBottom(paddingBottom));
this.narration.append(line).append("\n");
}
public void addHeader(Font font, Component line) {
this.layout
.addChild(
new MultiLineTextWidget(line, font).setMaxWidth(this.width - 64).setCentered(true), s -> s.alignHorizontallyCenter().paddingHorizontal(32)
);
this.narration.append(line).append("\n");
}
public void addSpacer(int height) {
this.layout.addChild(SpacerElement.height(height));
}
public TelemetryEventWidget.Content build() {
this.layout.arrangeElements();
return new TelemetryEventWidget.Content(this.layout, this.narration);
}
}
}引用的其他类
-
- 引用位置:
方法调用 - 关联成员:
Minecraft.getInstance()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
AbstractScrollArea.defaultSettings()
- 引用位置:
-
- 引用位置:
继承
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
MultiLineTextWidget()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
LinearLayout.vertical()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SpacerElement.height(), SpacerElement.width()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/方法调用 - 关联成员:
TelemetryEventType.values()
- 引用位置:
-
- 引用位置:
参数/字段/方法调用/返回值 - 关联成员:
Component.empty(), Component.translatable()
- 引用位置: