TelemetryInfoScreen.java

net.minecraft.client.gui.screens.telemetry.TelemetryInfoScreen

信息

  • 全限定名:net.minecraft.client.gui.screens.telemetry.TelemetryInfoScreen
  • 类型:public class
  • 包:net.minecraft.client.gui.screens.telemetry
  • 源码路径:src/main/java/net/minecraft/client/gui/screens/telemetry/TelemetryInfoScreen.java
  • 起始行号:L23
  • 继承:Screen
  • 职责:

    TODO

字段/常量

  • TITLE

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

      TODO

  • DESCRIPTION

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

      TODO

  • BUTTON_PRIVACY_STATEMENT

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

      TODO

  • BUTTON_GIVE_FEEDBACK

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

      TODO

  • BUTTON_VIEW_DATA

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

      TODO

  • CHECKBOX_OPT_IN

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

      TODO

  • SPACING

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

      TODO

  • EXTRA_TELEMETRY_AVAILABLE

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

      TODO

  • lastScreen

    • 类型: Screen
    • 修饰符: private final
    • 源码定位: L32
    • 说明:

      TODO

  • options

    • 类型: Options
    • 修饰符: private final
    • 源码定位: L33
    • 说明:

      TODO

  • layout

    • 类型: HeaderAndFooterLayout
    • 修饰符: private final
    • 源码定位: L34
    • 说明:

      TODO

  • telemetryEventWidget

    • 类型: TelemetryEventWidget
    • 修饰符: private
    • 源码定位: L37
    • 说明:

      TODO

  • description

    • 类型: MultiLineTextWidget
    • 修饰符: private
    • 源码定位: L38
    • 说明:

      TODO

  • checkbox

    • 类型: Checkbox
    • 修饰符: private
    • 源码定位: L39
    • 说明:

      TODO

  • savedScroll

    • 类型: double
    • 修饰符: private
    • 源码定位: L40
    • 说明:

      TODO

内部类/嵌套类型

构造器

public TelemetryInfoScreen(Screen lastScreen, Options options) @ L42

  • 构造器名:TelemetryInfoScreen
  • 源码定位:L42
  • 修饰符:public

参数:

  • lastScreen: Screen
  • options: Options

说明:

TODO

方法

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

public Component getNarrationMessage() @ L48

  • 方法名:getNarrationMessage
  • 源码定位:L48
  • 返回类型:Component
  • 修饰符:public

参数:

说明:

TODO

protected void init() @ L53

  • 方法名:init
  • 源码定位:L53
  • 返回类型:void
  • 修饰符:protected

参数:

说明:

TODO

protected void repositionElements() @ L84

  • 方法名:repositionElements
  • 源码定位:L84
  • 返回类型:void
  • 修饰符:protected

参数:

说明:

TODO

protected void setInitialFocus() @ L104

  • 方法名:setInitialFocus
  • 源码定位:L104
  • 返回类型:void
  • 修饰符:protected

参数:

说明:

TODO

private void onOptInChanged(AbstractWidget widget, boolean value) @ L111

  • 方法名:onOptInChanged
  • 源码定位:L111
  • 返回类型:void
  • 修饰符:private

参数:

  • widget: AbstractWidget
  • value: boolean

说明:

TODO

private void openPrivacyStatementLink(Button button) @ L117

  • 方法名:openPrivacyStatementLink
  • 源码定位:L117
  • 返回类型:void
  • 修饰符:private

参数:

  • button: Button

说明:

TODO

private void openFeedbackLink(Button button) @ L121

  • 方法名:openFeedbackLink
  • 源码定位:L121
  • 返回类型:void
  • 修饰符:private

参数:

  • button: Button

说明:

TODO

private void openDataFolder(Button button) @ L125

  • 方法名:openDataFolder
  • 源码定位:L125
  • 返回类型:void
  • 修饰符:private

参数:

  • button: Button

说明:

TODO

public void onClose() @ L129

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

参数:

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class TelemetryInfoScreen extends Screen {
    private static final Component TITLE = Component.translatable("telemetry_info.screen.title");
    private static final Component DESCRIPTION = Component.translatable("telemetry_info.screen.description").withColor(-4539718);
    private static final Component BUTTON_PRIVACY_STATEMENT = Component.translatable("telemetry_info.button.privacy_statement");
    private static final Component BUTTON_GIVE_FEEDBACK = Component.translatable("telemetry_info.button.give_feedback");
    private static final Component BUTTON_VIEW_DATA = Component.translatable("telemetry_info.button.show_data");
    private static final Component CHECKBOX_OPT_IN = Component.translatable("telemetry_info.opt_in.description").withColor(-2039584);
    private static final int SPACING = 8;
    private static final boolean EXTRA_TELEMETRY_AVAILABLE = Minecraft.getInstance().extraTelemetryAvailable();
    private final Screen lastScreen;
    private final Options options;
    private final HeaderAndFooterLayout layout = new HeaderAndFooterLayout(
        this, 16 + 9 * 5 + 20, EXTRA_TELEMETRY_AVAILABLE ? 33 + Checkbox.getBoxSize(Minecraft.getInstance().font) : 33
    );
    private @Nullable TelemetryEventWidget telemetryEventWidget;
    private @Nullable MultiLineTextWidget description;
    private @Nullable Checkbox checkbox;
    private double savedScroll;
 
    public TelemetryInfoScreen(Screen lastScreen, Options options) {
        super(TITLE);
        this.lastScreen = lastScreen;
        this.options = options;
    }
 
    @Override
    public Component getNarrationMessage() {
        return CommonComponents.joinForNarration(super.getNarrationMessage(), DESCRIPTION);
    }
 
    @Override
    protected void init() {
        LinearLayout header = this.layout.addToHeader(LinearLayout.vertical().spacing(4));
        header.defaultCellSetting().alignHorizontallyCenter();
        header.addChild(new StringWidget(TITLE, this.font));
        this.description = header.addChild(new MultiLineTextWidget(DESCRIPTION, this.font).setCentered(true));
        LinearLayout upperContentButtons = header.addChild(LinearLayout.horizontal().spacing(8));
        upperContentButtons.addChild(Button.builder(BUTTON_PRIVACY_STATEMENT, this::openPrivacyStatementLink).build());
        upperContentButtons.addChild(Button.builder(BUTTON_GIVE_FEEDBACK, this::openFeedbackLink).build());
        LinearLayout footer = this.layout.addToFooter(LinearLayout.vertical().spacing(4));
        footer.defaultCellSetting().alignHorizontallyCenter();
        if (EXTRA_TELEMETRY_AVAILABLE) {
            this.checkbox = footer.addChild(
                Checkbox.builder(CHECKBOX_OPT_IN, this.font)
                    .maxWidth(this.width - 40)
                    .selected(this.options.telemetryOptInExtra())
                    .onValueChange(this::onOptInChanged)
                    .build()
            );
        }
 
        LinearLayout footerButtons = footer.addChild(LinearLayout.horizontal().spacing(8));
        footerButtons.addChild(Button.builder(BUTTON_VIEW_DATA, this::openDataFolder).build());
        footerButtons.addChild(Button.builder(CommonComponents.GUI_DONE, button -> this.onClose()).build());
        LinearLayout content = this.layout.addToContents(LinearLayout.vertical().spacing(8));
        this.telemetryEventWidget = content.addChild(new TelemetryEventWidget(0, 0, this.width - 40, this.layout.getContentHeight(), this.font));
        this.telemetryEventWidget.setOnScrolledListener(scroll -> this.savedScroll = scroll);
        this.layout.visitWidgets(x$0 -> this.addRenderableWidget(x$0));
        this.repositionElements();
    }
 
    @Override
    protected void repositionElements() {
        if (this.telemetryEventWidget != null) {
            this.telemetryEventWidget.setScrollAmount(this.savedScroll);
            this.telemetryEventWidget.setWidth(this.width - 40);
            this.telemetryEventWidget.setHeight(this.layout.getContentHeight());
            this.telemetryEventWidget.updateLayout();
        }
 
        if (this.description != null) {
            this.description.setMaxWidth(this.width - 16);
        }
 
        if (this.checkbox != null) {
            this.checkbox.adjustWidth(this.width - 40, this.font);
        }
 
        this.layout.arrangeElements();
    }
 
    @Override
    protected void setInitialFocus() {
        if (this.telemetryEventWidget != null) {
            this.setInitialFocus(this.telemetryEventWidget);
        }
    }
 
    private void onOptInChanged(AbstractWidget widget, boolean value) {
        if (this.telemetryEventWidget != null) {
            this.telemetryEventWidget.onOptInChanged(value);
        }
    }
 
    private void openPrivacyStatementLink(Button button) {
        ConfirmLinkScreen.confirmLinkNow(this, CommonLinks.PRIVACY_STATEMENT);
    }
 
    private void openFeedbackLink(Button button) {
        ConfirmLinkScreen.confirmLinkNow(this, CommonLinks.RELEASE_FEEDBACK);
    }
 
    private void openDataFolder(Button button) {
        Util.getPlatform().openPath(this.minecraft.getTelemetryManager().getLogDirectory());
    }
 
    @Override
    public void onClose() {
        this.minecraft.setScreen(this.lastScreen);
    }
}

引用的其他类

  • Minecraft

    • 引用位置: 方法调用
    • 关联成员: Minecraft.getInstance()
  • Options

    • 引用位置: 参数/字段
  • AbstractWidget

    • 引用位置: 参数
  • Button

    • 引用位置: 参数/方法调用
    • 关联成员: Button.builder()
  • Checkbox

    • 引用位置: 字段/方法调用
    • 关联成员: Checkbox.builder(), Checkbox.getBoxSize()
  • MultiLineTextWidget

    • 引用位置: 字段/构造调用
    • 关联成员: MultiLineTextWidget()
  • StringWidget

    • 引用位置: 构造调用
    • 关联成员: StringWidget()
  • HeaderAndFooterLayout

    • 引用位置: 字段/构造调用
    • 关联成员: HeaderAndFooterLayout()
  • LinearLayout

    • 引用位置: 方法调用
    • 关联成员: LinearLayout.horizontal(), LinearLayout.vertical()
  • ConfirmLinkScreen

    • 引用位置: 方法调用
    • 关联成员: ConfirmLinkScreen.confirmLinkNow()
  • Screen

    • 引用位置: 参数/字段/继承
  • TelemetryEventWidget

    • 引用位置: 字段/构造调用
    • 关联成员: TelemetryEventWidget()
  • CommonComponents

    • 引用位置: 方法调用
    • 关联成员: CommonComponents.joinForNarration()
  • Component

    • 引用位置: 字段/方法调用/返回值
    • 关联成员: Component.translatable()
  • Util

    • 引用位置: 方法调用
    • 关联成员: Util.getPlatform()