LecternScreen.java

net.minecraft.client.gui.screens.inventory.LecternScreen

信息

  • 全限定名:net.minecraft.client.gui.screens.inventory.LecternScreen
  • 类型:public class
  • 包:net.minecraft.client.gui.screens.inventory
  • 源码路径:src/main/java/net/minecraft/client/gui/screens/inventory/LecternScreen.java
  • 起始行号:L16
  • 继承:BookViewScreen
  • 实现:MenuAccess
  • 职责:

    TODO

字段/常量

  • MENU_BUTTON_MARGIN

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

      TODO

  • MENU_BUTTON_SIZE

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

      TODO

  • TAKE_BOOK_LABEL

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

      TODO

  • menu

    • 类型: LecternMenu
    • 修饰符: private final
    • 源码定位: L20
    • 说明:

      TODO

  • listener

    • 类型: ContainerListener
    • 修饰符: private final public public
    • 源码定位: L21
    • 说明:

      TODO

内部类/嵌套类型

构造器

public LecternScreen(LecternMenu menu, Inventory inventory, Component title) @ L39

  • 构造器名:LecternScreen
  • 源码定位:L39
  • 修饰符:public

参数:

  • menu: LecternMenu
  • inventory: Inventory
  • title: Component

说明:

TODO

方法

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

public LecternMenu getMenu() @ L43

  • 方法名:getMenu
  • 源码定位:L43
  • 返回类型:LecternMenu
  • 修饰符:public

参数:

说明:

TODO

protected void init() @ L47

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

参数:

说明:

TODO

public void onClose() @ L53

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

参数:

说明:

TODO

public void removed() @ L59

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

参数:

说明:

TODO

protected void createMenuControls() @ L65

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

参数:

说明:

TODO

protected void pageBack() @ L77

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

参数:

说明:

TODO

protected void pageForward() @ L82

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

参数:

说明:

TODO

protected boolean forcePage(int page) @ L87

  • 方法名:forcePage
  • 源码定位:L87
  • 返回类型:boolean
  • 修饰符:protected

参数:

  • page: int

说明:

TODO

private void sendButtonClick(int button) @ L97

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

参数:

  • button: int

说明:

TODO

public boolean isPauseScreen() @ L101

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

参数:

说明:

TODO

private void bookChanged() @ L106

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

参数:

说明:

TODO

private void pageChanged() @ L111

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

参数:

说明:

TODO

protected void closeContainerOnServer() @ L115

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

参数:

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class LecternScreen extends BookViewScreen implements MenuAccess<LecternMenu> {
    private static final int MENU_BUTTON_MARGIN = 4;
    private static final int MENU_BUTTON_SIZE = 98;
    private static final Component TAKE_BOOK_LABEL = Component.translatable("lectern.take_book");
    private final LecternMenu menu;
    private final ContainerListener listener = new ContainerListener() {
        {
            Objects.requireNonNull(LecternScreen.this);
        }
 
        @Override
        public void slotChanged(AbstractContainerMenu container, int slotIndex, ItemStack itemStack) {
            LecternScreen.this.bookChanged();
        }
 
        @Override
        public void dataChanged(AbstractContainerMenu container, int id, int value) {
            if (id == 0) {
                LecternScreen.this.pageChanged();
            }
        }
    };
 
    public LecternScreen(LecternMenu menu, Inventory inventory, Component title) {
        this.menu = menu;
    }
 
    public LecternMenu getMenu() {
        return this.menu;
    }
 
    @Override
    protected void init() {
        super.init();
        this.menu.addSlotListener(this.listener);
    }
 
    @Override
    public void onClose() {
        this.minecraft.player.closeContainer();
        super.onClose();
    }
 
    @Override
    public void removed() {
        super.removed();
        this.menu.removeSlotListener(this.listener);
    }
 
    @Override
    protected void createMenuControls() {
        if (this.minecraft.player.mayBuild()) {
            int buttonY = this.menuControlsTop();
            int middle = this.width / 2;
            this.addRenderableWidget(Button.builder(CommonComponents.GUI_DONE, button -> this.onClose()).pos(middle - 98 - 2, buttonY).width(98).build());
            this.addRenderableWidget(Button.builder(TAKE_BOOK_LABEL, button -> this.sendButtonClick(3)).pos(middle + 2, buttonY).width(98).build());
        } else {
            super.createMenuControls();
        }
    }
 
    @Override
    protected void pageBack() {
        this.sendButtonClick(1);
    }
 
    @Override
    protected void pageForward() {
        this.sendButtonClick(2);
    }
 
    @Override
    protected boolean forcePage(int page) {
        if (page != this.menu.getPage()) {
            this.sendButtonClick(100 + page);
            return true;
        } else {
            return false;
        }
    }
 
    private void sendButtonClick(int button) {
        this.minecraft.gameMode.handleInventoryButtonClick(this.menu.containerId, button);
    }
 
    @Override
    public boolean isPauseScreen() {
        return false;
    }
 
    private void bookChanged() {
        ItemStack book = this.menu.getBook();
        this.setBookAccess(Objects.requireNonNullElse(BookViewScreen.BookAccess.fromItem(book), BookViewScreen.EMPTY_ACCESS));
    }
 
    private void pageChanged() {
        this.setPage(this.menu.getPage());
    }
 
    @Override
    protected void closeContainerOnServer() {
        this.minecraft.player.closeContainer();
    }
}

引用的其他类

  • Button

    • 引用位置: 方法调用
    • 关联成员: Button.builder()
  • BookViewScreen

    • 引用位置: 方法调用/继承
    • 关联成员: BookViewScreen.BookAccess.fromItem()
  • MenuAccess

    • 引用位置: 实现
  • Component

    • 引用位置: 参数/字段/方法调用
    • 关联成员: Component.translatable()
  • Inventory

    • 引用位置: 参数
  • ContainerListener

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

    • 引用位置: 参数/字段/返回值