SpectatorMenu.java

net.minecraft.client.gui.spectator.SpectatorMenu

信息

  • 全限定名:net.minecraft.client.gui.spectator.SpectatorMenu
  • 类型:public class
  • 包:net.minecraft.client.gui.spectator
  • 源码路径:src/main/java/net/minecraft/client/gui/spectator/SpectatorMenu.java
  • 起始行号:L17
  • 职责:

    TODO

字段/常量

  • CLOSE_SPRITE

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

      TODO

  • SCROLL_LEFT_SPRITE

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

      TODO

  • SCROLL_RIGHT_SPRITE

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

      TODO

  • CLOSE_ITEM

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

      TODO

  • SCROLL_LEFT

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

      TODO

  • SCROLL_RIGHT_ENABLED

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

      TODO

  • SCROLL_RIGHT_DISABLED

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

      TODO

  • MAX_PER_PAGE

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

      TODO

  • CLOSE_MENU_TEXT

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

      TODO

  • PREVIOUS_PAGE_TEXT

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

      TODO

  • NEXT_PAGE_TEXT

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

      TODO

  • EMPTY_SLOT

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

      TODO

  • listener

    • 类型: SpectatorMenuListener
    • 修饰符: private final
    • 源码定位: L48
    • 说明:

      TODO

  • category

    • 类型: SpectatorMenuCategory
    • 修饰符: private
    • 源码定位: L49
    • 说明:

      TODO

  • selectedSlot

    • 类型: int
    • 修饰符: private
    • 源码定位: L50
    • 说明:

      TODO

  • page

    • 类型: int
    • 修饰符: private
    • 源码定位: L51
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.client.gui.spectator.SpectatorMenu.CloseSpectatorItem

    • 类型: class
    • 修饰符: private static
    • 源码定位: L121
    • 说明:

      TODO

  • net.minecraft.client.gui.spectator.SpectatorMenu.ScrollMenuItem

    • 类型: class
    • 修饰符: private static
    • 源码定位: L146
    • 说明:

      TODO

构造器

public SpectatorMenu(SpectatorMenuListener listener) @ L53

  • 构造器名:SpectatorMenu
  • 源码定位:L53
  • 修饰符:public

参数:

  • listener: SpectatorMenuListener

说明:

TODO

方法

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

public SpectatorMenuItem getItem(int slot) @ L58

  • 方法名:getItem
  • 源码定位:L58
  • 返回类型:SpectatorMenuItem
  • 修饰符:public

参数:

  • slot: int

说明:

TODO

public List<SpectatorMenuItem> getItems() @ L73

  • 方法名:getItems
  • 源码定位:L73
  • 返回类型:List
  • 修饰符:public

参数:

说明:

TODO

public SpectatorMenuItem getSelectedItem() @ L83

  • 方法名:getSelectedItem
  • 源码定位:L83
  • 返回类型:SpectatorMenuItem
  • 修饰符:public

参数:

说明:

TODO

public SpectatorMenuCategory getSelectedCategory() @ L87

  • 方法名:getSelectedCategory
  • 源码定位:L87
  • 返回类型:SpectatorMenuCategory
  • 修饰符:public

参数:

说明:

TODO

public void selectSlot(int slot) @ L91

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

参数:

  • slot: int

说明:

TODO

public void exit() @ L102

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

参数:

说明:

TODO

public int getSelectedSlot() @ L106

  • 方法名:getSelectedSlot
  • 源码定位:L106
  • 返回类型:int
  • 修饰符:public

参数:

说明:

TODO

public void selectCategory(SpectatorMenuCategory category) @ L110

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

参数:

  • category: SpectatorMenuCategory

说明:

TODO

public SpectatorPage getCurrentPage() @ L116

  • 方法名:getCurrentPage
  • 源码定位:L116
  • 返回类型:SpectatorPage
  • 修饰符:public

参数:

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class SpectatorMenu {
    private static final Identifier CLOSE_SPRITE = Identifier.withDefaultNamespace("spectator/close");
    private static final Identifier SCROLL_LEFT_SPRITE = Identifier.withDefaultNamespace("spectator/scroll_left");
    private static final Identifier SCROLL_RIGHT_SPRITE = Identifier.withDefaultNamespace("spectator/scroll_right");
    private static final SpectatorMenuItem CLOSE_ITEM = new SpectatorMenu.CloseSpectatorItem();
    private static final SpectatorMenuItem SCROLL_LEFT = new SpectatorMenu.ScrollMenuItem(-1, true);
    private static final SpectatorMenuItem SCROLL_RIGHT_ENABLED = new SpectatorMenu.ScrollMenuItem(1, true);
    private static final SpectatorMenuItem SCROLL_RIGHT_DISABLED = new SpectatorMenu.ScrollMenuItem(1, false);
    private static final int MAX_PER_PAGE = 8;
    private static final Component CLOSE_MENU_TEXT = Component.translatable("spectatorMenu.close");
    private static final Component PREVIOUS_PAGE_TEXT = Component.translatable("spectatorMenu.previous_page");
    private static final Component NEXT_PAGE_TEXT = Component.translatable("spectatorMenu.next_page");
    public static final SpectatorMenuItem EMPTY_SLOT = new SpectatorMenuItem() {
        @Override
        public void selectItem(SpectatorMenu menu) {
        }
 
        @Override
        public Component getName() {
            return CommonComponents.EMPTY;
        }
 
        @Override
        public void extractIcon(GuiGraphicsExtractor graphics, float brightness, float alpha) {
        }
 
        @Override
        public boolean isEnabled() {
            return false;
        }
    };
    private final SpectatorMenuListener listener;
    private SpectatorMenuCategory category;
    private int selectedSlot = -1;
    private int page;
 
    public SpectatorMenu(SpectatorMenuListener listener) {
        this.category = new RootSpectatorMenuCategory();
        this.listener = listener;
    }
 
    public SpectatorMenuItem getItem(int slot) {
        int index = slot + this.page * 6;
        if (this.page > 0 && slot == 0) {
            return SCROLL_LEFT;
        } else if (slot == 7) {
            return index < this.category.getItems().size() ? SCROLL_RIGHT_ENABLED : SCROLL_RIGHT_DISABLED;
        } else if (slot == 8) {
            return CLOSE_ITEM;
        } else {
            return index >= 0 && index < this.category.getItems().size()
                ? MoreObjects.firstNonNull(this.category.getItems().get(index), EMPTY_SLOT)
                : EMPTY_SLOT;
        }
    }
 
    public List<SpectatorMenuItem> getItems() {
        List<SpectatorMenuItem> items = Lists.newArrayList();
 
        for (int i = 0; i <= 8; i++) {
            items.add(this.getItem(i));
        }
 
        return items;
    }
 
    public SpectatorMenuItem getSelectedItem() {
        return this.getItem(this.selectedSlot);
    }
 
    public SpectatorMenuCategory getSelectedCategory() {
        return this.category;
    }
 
    public void selectSlot(int slot) {
        SpectatorMenuItem item = this.getItem(slot);
        if (item != EMPTY_SLOT) {
            if (this.selectedSlot == slot && item.isEnabled()) {
                item.selectItem(this);
            } else {
                this.selectedSlot = slot;
            }
        }
    }
 
    public void exit() {
        this.listener.onSpectatorMenuClosed(this);
    }
 
    public int getSelectedSlot() {
        return this.selectedSlot;
    }
 
    public void selectCategory(SpectatorMenuCategory category) {
        this.category = category;
        this.selectedSlot = -1;
        this.page = 0;
    }
 
    public SpectatorPage getCurrentPage() {
        return new SpectatorPage(this.getItems(), this.selectedSlot);
    }
 
    @OnlyIn(Dist.CLIENT)
    private static class CloseSpectatorItem implements SpectatorMenuItem {
        @Override
        public void selectItem(SpectatorMenu menu) {
            menu.exit();
        }
 
        @Override
        public Component getName() {
            return SpectatorMenu.CLOSE_MENU_TEXT;
        }
 
        @Override
        public void extractIcon(GuiGraphicsExtractor graphics, float brightness, float alpha) {
            graphics.blitSprite(
                RenderPipelines.GUI_TEXTURED, SpectatorMenu.CLOSE_SPRITE, 0, 0, 16, 16, ARGB.colorFromFloat(alpha, brightness, brightness, brightness)
            );
        }
 
        @Override
        public boolean isEnabled() {
            return true;
        }
    }
 
    @OnlyIn(Dist.CLIENT)
    private static class ScrollMenuItem implements SpectatorMenuItem {
        private final int direction;
        private final boolean enabled;
 
        public ScrollMenuItem(int direction, boolean enabled) {
            this.direction = direction;
            this.enabled = enabled;
        }
 
        @Override
        public void selectItem(SpectatorMenu menu) {
            menu.page = menu.page + this.direction;
        }
 
        @Override
        public Component getName() {
            return this.direction < 0 ? SpectatorMenu.PREVIOUS_PAGE_TEXT : SpectatorMenu.NEXT_PAGE_TEXT;
        }
 
        @Override
        public void extractIcon(GuiGraphicsExtractor graphics, float brightness, float alpha) {
            int color = ARGB.colorFromFloat(alpha, brightness, brightness, brightness);
            if (this.direction < 0) {
                graphics.blitSprite(RenderPipelines.GUI_TEXTURED, SpectatorMenu.SCROLL_LEFT_SPRITE, 0, 0, 16, 16, color);
            } else {
                graphics.blitSprite(RenderPipelines.GUI_TEXTURED, SpectatorMenu.SCROLL_RIGHT_SPRITE, 0, 0, 16, 16, color);
            }
        }
 
        @Override
        public boolean isEnabled() {
            return this.enabled;
        }
    }
}

引用的其他类

  • RootSpectatorMenuCategory

    • 引用位置: 构造调用
    • 关联成员: RootSpectatorMenuCategory()
  • SpectatorMenuCategory

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

    • 引用位置: 字段/构造调用/返回值
    • 关联成员: SpectatorMenuItem()
  • SpectatorMenuListener

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

    • 引用位置: 构造调用/返回值
    • 关联成员: SpectatorPage()
  • Component

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

    • 引用位置: 字段/方法调用
    • 关联成员: Identifier.withDefaultNamespace()
  • ARGB

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