AdvancementToast.java

net.minecraft.client.gui.components.toasts.AdvancementToast

信息

  • 全限定名:net.minecraft.client.gui.components.toasts.AdvancementToast
  • 类型:public class
  • 包:net.minecraft.client.gui.components.toasts
  • 源码路径:src/main/java/net/minecraft/client/gui/components/toasts/AdvancementToast.java
  • 起始行号:L23
  • 实现:Toast
  • 职责:

    TODO

字段/常量

  • BACKGROUND_SPRITE

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

      TODO

  • DISPLAY_TIME

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

      TODO

  • advancement

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

      TODO

  • wantedVisibility

    • 类型: Toast.Visibility
    • 修饰符: private
    • 源码定位: L27
    • 说明:

      TODO

  • iconItem

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

      TODO

内部类/嵌套类型

构造器

public AdvancementToast(AdvancementHolder advancement) @ L30

  • 构造器名:AdvancementToast
  • 源码定位:L30
  • 修饰符:public

参数:

  • advancement: AdvancementHolder

说明:

TODO

方法

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

public Toast.Visibility getWantedVisibility() @ L35

  • 方法名:getWantedVisibility
  • 源码定位:L35
  • 返回类型:Toast.Visibility
  • 修饰符:public

参数:

说明:

TODO

public void update(ToastManager manager, long fullyVisibleForMs) @ L40

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

参数:

  • manager: ToastManager
  • fullyVisibleForMs: long

说明:

TODO

public SoundEvent getSoundEvent() @ L52

  • 方法名:getSoundEvent
  • 源码定位:L52
  • 返回类型:SoundEvent
  • 修饰符:public

参数:

说明:

TODO

private boolean isChallengeAdvancement() @ L57

  • 方法名:isChallengeAdvancement
  • 源码定位:L57
  • 返回类型:boolean
  • 修饰符:private

参数:

说明:

TODO

public void extractRenderState(GuiGraphicsExtractor graphics, Font font, long fullyVisibleForMs) @ L62

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

参数:

  • graphics: GuiGraphicsExtractor
  • font: Font
  • fullyVisibleForMs: long

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class AdvancementToast implements Toast {
    private static final Identifier BACKGROUND_SPRITE = Identifier.withDefaultNamespace("toast/advancement");
    public static final int DISPLAY_TIME = 5000;
    private final AdvancementHolder advancement;
    private Toast.Visibility wantedVisibility = Toast.Visibility.HIDE;
    private final ItemStack iconItem;
 
    public AdvancementToast(AdvancementHolder advancement) {
        this.advancement = advancement;
        this.iconItem = advancement.value().display().map(d -> d.getIcon().create()).orElse(ItemStack.EMPTY);
    }
 
    @Override
    public Toast.Visibility getWantedVisibility() {
        return this.wantedVisibility;
    }
 
    @Override
    public void update(ToastManager manager, long fullyVisibleForMs) {
        DisplayInfo display = this.advancement.value().display().orElse(null);
        if (display == null) {
            this.wantedVisibility = Toast.Visibility.HIDE;
        } else {
            this.wantedVisibility = fullyVisibleForMs >= 5000.0 * manager.getNotificationDisplayTimeMultiplier()
                ? Toast.Visibility.HIDE
                : Toast.Visibility.SHOW;
        }
    }
 
    @Override
    public @Nullable SoundEvent getSoundEvent() {
        return this.isChallengeAdvancement() ? SoundEvents.UI_TOAST_CHALLENGE_COMPLETE : null;
    }
 
    private boolean isChallengeAdvancement() {
        Optional<DisplayInfo> displayInfo = this.advancement.value().display();
        return displayInfo.isPresent() && displayInfo.get().getType().equals(AdvancementType.CHALLENGE);
    }
 
    @Override
    public void extractRenderState(GuiGraphicsExtractor graphics, Font font, long fullyVisibleForMs) {
        DisplayInfo display = this.advancement.value().display().orElse(null);
        graphics.blitSprite(RenderPipelines.GUI_TEXTURED, BACKGROUND_SPRITE, 0, 0, this.width(), this.height());
        if (display != null) {
            List<FormattedCharSequence> lines = font.split(display.getTitle(), 125);
            int titleColor = display.getType() == AdvancementType.CHALLENGE ? -30465 : -256;
            if (lines.size() == 1) {
                graphics.text(font, display.getType().getDisplayName(), 30, 7, titleColor, false);
                graphics.text(font, lines.get(0), 30, 18, -1, false);
            } else {
                int unlockTextTime = 1500;
                float unlockFadeTime = 300.0F;
                if (fullyVisibleForMs < 1500L) {
                    int alpha = Mth.floor(Mth.clamp((float)(1500L - fullyVisibleForMs) / 300.0F, 0.0F, 1.0F) * 255.0F);
                    graphics.text(font, display.getType().getDisplayName(), 30, 11, ARGB.color(alpha, titleColor), false);
                } else {
                    int alpha = Mth.floor(Mth.clamp((float)(fullyVisibleForMs - 1500L) / 300.0F, 0.0F, 1.0F) * 252.0F);
                    int y = this.height() / 2 - lines.size() * 9 / 2;
 
                    for (FormattedCharSequence line : lines) {
                        graphics.text(font, line, 30, y, ARGB.white(alpha), false);
                        y += 9;
                    }
                }
            }
 
            graphics.fakeItem(this.iconItem, 8, 8);
        }
    }
}

引用的其他类

  • AdvancementHolder

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

    • 引用位置: 参数
  • GuiGraphicsExtractor

    • 引用位置: 参数
  • Toast

    • 引用位置: 字段/实现/返回值
  • ToastManager

    • 引用位置: 参数
  • Identifier

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

    • 引用位置: 返回值
  • ARGB

    • 引用位置: 方法调用
    • 关联成员: ARGB.color(), ARGB.white()
  • Mth

    • 引用位置: 方法调用
    • 关联成员: Mth.clamp(), Mth.floor()
  • ItemStack

    • 引用位置: 字段