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);
}
}
}引用的其他类
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段/实现/返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
Identifier.withDefaultNamespace()
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ARGB.color(), ARGB.white()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Mth.clamp(), Mth.floor()
- 引用位置:
-
- 引用位置:
字段
- 引用位置: