GhostSlots.java

net.minecraft.client.gui.screens.recipebook.GhostSlots

信息

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

    TODO

字段/常量

  • ingredients

    • 类型: Reference2ObjectMap<Slot,GhostSlots.GhostSlot>
    • 修饰符: private final
    • 源码定位: L20
    • 说明:

      TODO

  • slotSelectTime

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

      TODO

内部类/嵌套类型

  • net.minecraft.client.gui.screens.recipebook.GhostSlots.GhostSlot
    • 类型: record
    • 修饰符: private
    • 源码定位: L78
    • 说明:

      TODO

构造器

public GhostSlots(SlotSelectTime slotSelectTime) @ L23

  • 构造器名:GhostSlots
  • 源码定位:L23
  • 修饰符:public

参数:

  • slotSelectTime: SlotSelectTime

说明:

TODO

方法

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

public void clear() @ L27

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

参数:

说明:

TODO

private void setSlot(Slot slot, ContextMap context, SlotDisplay contents, boolean isResult) @ L31

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

参数:

  • slot: Slot
  • context: ContextMap
  • contents: SlotDisplay
  • isResult: boolean

说明:

TODO

protected void setInput(Slot slot, ContextMap context, SlotDisplay contents) @ L38

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

参数:

  • slot: Slot
  • context: ContextMap
  • contents: SlotDisplay

说明:

TODO

protected void setResult(Slot slot, ContextMap context, SlotDisplay contents) @ L42

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

参数:

  • slot: Slot
  • context: ContextMap
  • contents: SlotDisplay

说明:

TODO

public void extractRenderState(GuiGraphicsExtractor graphics, Minecraft minecraft, boolean isResultSlotBig) @ L46

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

参数:

  • graphics: GuiGraphicsExtractor
  • minecraft: Minecraft
  • isResultSlotBig: boolean

说明:

TODO

public void extractTooltip(GuiGraphicsExtractor graphics, Minecraft minecraft, int mouseX, int mouseY, Slot hoveredSlot) @ L65

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

参数:

  • graphics: GuiGraphicsExtractor
  • minecraft: Minecraft
  • mouseX: int
  • mouseY: int
  • hoveredSlot: Slot

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class GhostSlots {
    private final Reference2ObjectMap<Slot, GhostSlots.GhostSlot> ingredients = new Reference2ObjectArrayMap<>();
    private final SlotSelectTime slotSelectTime;
 
    public GhostSlots(SlotSelectTime slotSelectTime) {
        this.slotSelectTime = slotSelectTime;
    }
 
    public void clear() {
        this.ingredients.clear();
    }
 
    private void setSlot(Slot slot, ContextMap context, SlotDisplay contents, boolean isResult) {
        List<ItemStack> entries = contents.resolveForStacks(context);
        if (!entries.isEmpty()) {
            this.ingredients.put(slot, new GhostSlots.GhostSlot(entries, isResult));
        }
    }
 
    protected void setInput(Slot slot, ContextMap context, SlotDisplay contents) {
        this.setSlot(slot, context, contents, false);
    }
 
    protected void setResult(Slot slot, ContextMap context, SlotDisplay contents) {
        this.setSlot(slot, context, contents, true);
    }
 
    public void extractRenderState(GuiGraphicsExtractor graphics, Minecraft minecraft, boolean isResultSlotBig) {
        this.ingredients.forEach((slot, ingredient) -> {
            int x = slot.x;
            int y = slot.y;
            if (ingredient.isResultSlot && isResultSlotBig) {
                graphics.fill(x - 4, y - 4, x + 20, y + 20, 822018048);
            } else {
                graphics.fill(x, y, x + 16, y + 16, 822018048);
            }
 
            ItemStack itemStack = ingredient.getItem(this.slotSelectTime.currentIndex());
            graphics.fakeItem(itemStack, x, y);
            graphics.fill(x, y, x + 16, y + 16, 822083583);
            if (ingredient.isResultSlot) {
                graphics.itemDecorations(minecraft.font, itemStack, x, y);
            }
        });
    }
 
    public void extractTooltip(GuiGraphicsExtractor graphics, Minecraft minecraft, int mouseX, int mouseY, @Nullable Slot hoveredSlot) {
        if (hoveredSlot != null) {
            GhostSlots.GhostSlot hoveredGhostSlot = this.ingredients.get(hoveredSlot);
            if (hoveredGhostSlot != null) {
                ItemStack hoveredItem = hoveredGhostSlot.getItem(this.slotSelectTime.currentIndex());
                graphics.setComponentTooltipForNextFrame(
                    minecraft.font, Screen.getTooltipFromItem(minecraft, hoveredItem), mouseX, mouseY, hoveredItem.get(DataComponents.TOOLTIP_STYLE)
                );
            }
        }
    }
 
    @OnlyIn(Dist.CLIENT)
    private record GhostSlot(List<ItemStack> items, boolean isResultSlot) {
        public ItemStack getItem(int itemIndex) {
            int size = this.items.size();
            return size == 0 ? ItemStack.EMPTY : this.items.get(itemIndex % size);
        }
    }
}

引用的其他类