AbstractCommandBlockEditScreen.java

net.minecraft.client.gui.screens.inventory.AbstractCommandBlockEditScreen

信息

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

    TODO

字段/常量

  • SET_COMMAND_LABEL

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

      TODO

  • COMMAND_LABEL

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

      TODO

  • PREVIOUS_OUTPUT_LABEL

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

      TODO

  • commandEdit

    • 类型: EditBox
    • 修饰符: protected
    • 源码定位: L25
    • 说明:

      TODO

  • previousEdit

    • 类型: EditBox
    • 修饰符: protected
    • 源码定位: L26
    • 说明:

      TODO

  • doneButton

    • 类型: Button
    • 修饰符: protected
    • 源码定位: L27
    • 说明:

      TODO

  • cancelButton

    • 类型: Button
    • 修饰符: protected
    • 源码定位: L28
    • 说明:

      TODO

  • outputButton

    • 类型: CycleButton<Boolean>
    • 修饰符: protected
    • 源码定位: L29
    • 说明:

      TODO

  • commandSuggestions

    • 类型: CommandSuggestions
    • 修饰符: private
    • 源码定位: L30
    • 说明:

      TODO

内部类/嵌套类型

构造器

public AbstractCommandBlockEditScreen() @ L32

  • 构造器名:AbstractCommandBlockEditScreen
  • 源码定位:L32
  • 修饰符:public

参数:

说明:

TODO

方法

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

public void tick() @ L36

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

参数:

说明:

TODO

abstract BaseCommandBlock getCommandBlock() @ L43

  • 方法名:getCommandBlock
  • 源码定位:L43
  • 返回类型:BaseCommandBlock
  • 修饰符:abstract

参数:

说明:

TODO

abstract int getPreviousY() @ L45

  • 方法名:getPreviousY
  • 源码定位:L45
  • 返回类型:int
  • 修饰符:abstract

参数:

说明:

TODO

protected void init() @ L47

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

参数:

说明:

TODO

protected void addExtraControls() @ L90

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

参数:

说明:

TODO

protected void setInitialFocus() @ L93

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

参数:

说明:

TODO

protected Component getUsageNarration() @ L98

  • 方法名:getUsageNarration
  • 源码定位:L98
  • 返回类型:Component
  • 修饰符:protected

参数:

说明:

TODO

public void resize(int width, int height) @ L103

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

参数:

  • width: int
  • height: int

说明:

TODO

protected void updatePreviousOutput(boolean isTracking) @ L111

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

参数:

  • isTracking: boolean

说明:

TODO

protected void onDone() @ L115

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

参数:

说明:

TODO

protected abstract void populateAndSendPacket() @ L125

  • 方法名:populateAndSendPacket
  • 源码定位:L125
  • 返回类型:void
  • 修饰符:protected abstract

参数:

说明:

TODO

private void onEdited(String value) @ L127

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

参数:

  • value: String

说明:

TODO

public boolean isInGameUi() @ L131

  • 方法名:isInGameUi
  • 源码定位:L131
  • 返回类型:boolean
  • 修饰符:public

参数:

说明:

TODO

public boolean keyPressed(KeyEvent event) @ L136

  • 方法名:keyPressed
  • 源码定位:L136
  • 返回类型:boolean
  • 修饰符:public

参数:

  • event: KeyEvent

说明:

TODO

public boolean mouseScrolled(double x, double y, double scrollX, double scrollY) @ L150

  • 方法名:mouseScrolled
  • 源码定位:L150
  • 返回类型:boolean
  • 修饰符:public

参数:

  • x: double
  • y: double
  • scrollX: double
  • scrollY: double

说明:

TODO

public boolean mouseClicked(MouseButtonEvent event, boolean doubleClick) @ L155

  • 方法名:mouseClicked
  • 源码定位:L155
  • 返回类型:boolean
  • 修饰符:public

参数:

  • event: MouseButtonEvent
  • doubleClick: boolean

说明:

TODO

public void extractRenderState(GuiGraphicsExtractor graphics, int mouseX, int mouseY, float a) @ L160

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

参数:

  • graphics: GuiGraphicsExtractor
  • mouseX: int
  • mouseY: int
  • a: float

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public abstract class AbstractCommandBlockEditScreen extends Screen {
    private static final Component SET_COMMAND_LABEL = Component.translatable("advMode.setCommand");
    private static final Component COMMAND_LABEL = Component.translatable("advMode.command");
    private static final Component PREVIOUS_OUTPUT_LABEL = Component.translatable("advMode.previousOutput");
    protected EditBox commandEdit;
    protected EditBox previousEdit;
    protected Button doneButton;
    protected Button cancelButton;
    protected CycleButton<Boolean> outputButton;
    private CommandSuggestions commandSuggestions;
 
    public AbstractCommandBlockEditScreen() {
        super(GameNarrator.NO_TITLE);
    }
 
    @Override
    public void tick() {
        if (!this.getCommandBlock().isValid()) {
            this.onClose();
        }
    }
 
    abstract BaseCommandBlock getCommandBlock();
 
    abstract int getPreviousY();
 
    @Override
    protected void init() {
        boolean trackOutput = this.getCommandBlock().isTrackOutput();
        this.commandEdit = new EditBox(this.font, this.width / 2 - 150, 50, 300, 20, Component.translatable("advMode.command")) {
            {
                Objects.requireNonNull(AbstractCommandBlockEditScreen.this);
            }
 
            @Override
            protected MutableComponent createNarrationMessage() {
                return super.createNarrationMessage().append(AbstractCommandBlockEditScreen.this.commandSuggestions.getNarrationMessage());
            }
        };
        this.commandEdit.setMaxLength(32500);
        this.commandEdit.setResponder(this::onEdited);
        this.addWidget(this.commandEdit);
        this.previousEdit = new EditBox(this.font, this.width / 2 - 150, this.getPreviousY(), 276, 20, Component.translatable("advMode.previousOutput"));
        this.previousEdit.setMaxLength(32500);
        this.previousEdit.setEditable(false);
        this.previousEdit.setValue("-");
        this.addWidget(this.previousEdit);
        this.outputButton = this.addRenderableWidget(
            CycleButton.booleanBuilder(Component.literal("O"), Component.literal("X"), trackOutput)
                .displayOnlyValue()
                .create(this.width / 2 + 150 - 20, this.getPreviousY(), 20, 20, Component.translatable("advMode.trackOutput"), (button, value) -> {
                    BaseCommandBlock commandBlock = this.getCommandBlock();
                    commandBlock.setTrackOutput(value);
                    this.updatePreviousOutput(value);
                })
        );
        this.addExtraControls();
        this.doneButton = this.addRenderableWidget(
            Button.builder(CommonComponents.GUI_DONE, button -> this.onDone()).bounds(this.width / 2 - 4 - 150, this.height / 4 + 120 + 12, 150, 20).build()
        );
        this.cancelButton = this.addRenderableWidget(
            Button.builder(CommonComponents.GUI_CANCEL, button -> this.onClose()).bounds(this.width / 2 + 4, this.height / 4 + 120 + 12, 150, 20).build()
        );
        this.commandSuggestions = new CommandSuggestions(this.minecraft, this, this.commandEdit, this.font, true, true, 0, 7, false, Integer.MIN_VALUE);
        this.commandSuggestions.setAllowSuggestions(true);
        this.commandSuggestions.updateCommandInfo();
        this.updatePreviousOutput(trackOutput);
    }
 
    protected void addExtraControls() {
    }
 
    @Override
    protected void setInitialFocus() {
        this.setInitialFocus(this.commandEdit);
    }
 
    @Override
    protected Component getUsageNarration() {
        return this.commandSuggestions.isVisible() ? this.commandSuggestions.getUsageNarration() : super.getUsageNarration();
    }
 
    @Override
    public void resize(int width, int height) {
        String oldText = this.commandEdit.getValue();
        this.init(width, height);
        this.commandEdit.setValue(oldText);
        this.commandSuggestions.updateCommandInfo();
    }
 
    protected void updatePreviousOutput(boolean isTracking) {
        this.previousEdit.setValue(isTracking ? this.getCommandBlock().getLastOutput().getString() : "-");
    }
 
    protected void onDone() {
        this.populateAndSendPacket();
        BaseCommandBlock commandBlock = this.getCommandBlock();
        if (!commandBlock.isTrackOutput()) {
            commandBlock.setLastOutput(null);
        }
 
        this.minecraft.setScreen(null);
    }
 
    protected abstract void populateAndSendPacket();
 
    private void onEdited(String value) {
        this.commandSuggestions.updateCommandInfo();
    }
 
    @Override
    public boolean isInGameUi() {
        return true;
    }
 
    @Override
    public boolean keyPressed(KeyEvent event) {
        if (this.commandSuggestions.keyPressed(event)) {
            return true;
        } else if (super.keyPressed(event)) {
            return true;
        } else if (event.isConfirmation()) {
            this.onDone();
            return true;
        } else {
            return false;
        }
    }
 
    @Override
    public boolean mouseScrolled(double x, double y, double scrollX, double scrollY) {
        return this.commandSuggestions.mouseScrolled(scrollY) ? true : super.mouseScrolled(x, y, scrollX, scrollY);
    }
 
    @Override
    public boolean mouseClicked(MouseButtonEvent event, boolean doubleClick) {
        return this.commandSuggestions.mouseClicked(event) ? true : super.mouseClicked(event, doubleClick);
    }
 
    @Override
    public void extractRenderState(GuiGraphicsExtractor graphics, int mouseX, int mouseY, float a) {
        super.extractRenderState(graphics, mouseX, mouseY, a);
        graphics.centeredText(this.font, SET_COMMAND_LABEL, this.width / 2, 20, -1);
        graphics.text(this.font, COMMAND_LABEL, this.width / 2 - 150 + 1, 40, -6250336);
        this.commandEdit.extractRenderState(graphics, mouseX, mouseY, a);
        int y = 75;
        if (!this.previousEdit.getValue().isEmpty()) {
            y += 5 * 9 + 1 + this.getPreviousY() - 135;
            graphics.text(this.font, PREVIOUS_OUTPUT_LABEL, this.width / 2 - 150 + 1, y + 4, -6250336);
            this.previousEdit.extractRenderState(graphics, mouseX, mouseY, a);
        }
 
        this.commandSuggestions.extractRenderState(graphics, mouseX, mouseY);
    }
}

引用的其他类

  • GuiGraphicsExtractor

    • 引用位置: 参数
  • Button

    • 引用位置: 字段/方法调用
    • 关联成员: Button.builder()
  • CommandSuggestions

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

    • 引用位置: 字段/方法调用
    • 关联成员: CycleButton.booleanBuilder()
  • EditBox

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

    • 引用位置: 继承
  • KeyEvent

    • 引用位置: 参数
  • MouseButtonEvent

    • 引用位置: 参数
  • Component

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

    • 引用位置: 返回值