SystemToast.java

net.minecraft.client.gui.components.toasts.SystemToast

信息

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

    TODO

字段/常量

  • BACKGROUND_SPRITE

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

      TODO

  • MAX_LINE_SIZE

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

      TODO

  • LINE_SPACING

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

      TODO

  • MARGIN

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

      TODO

  • id

    • 类型: SystemToast.SystemToastId
    • 修饰符: private final
    • 源码定位: L24
    • 说明:

      TODO

  • title

    • 类型: Component
    • 修饰符: private
    • 源码定位: L25
    • 说明:

      TODO

  • messageLines

    • 类型: List<FormattedCharSequence>
    • 修饰符: private
    • 源码定位: L26
    • 说明:

      TODO

  • lastChanged

    • 类型: long
    • 修饰符: private
    • 源码定位: L27
    • 说明:

      TODO

  • changed

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

      TODO

  • width

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

      TODO

  • forceHide

    • 类型: boolean
    • 修饰符: private
    • 源码定位: L30
    • 说明:

      TODO

  • wantedVisibility

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

      TODO

内部类/嵌套类型

  • net.minecraft.client.gui.components.toasts.SystemToast.SystemToastId
    • 类型: class
    • 修饰符: public static
    • 源码定位: L194
    • 说明:

      TODO

构造器

public SystemToast(SystemToast.SystemToastId id, Component title, Component message) @ L33

  • 构造器名:SystemToast
  • 源码定位:L33
  • 修饰符:public

参数:

  • id: SystemToast.SystemToastId
  • title: Component
  • message: Component

说明:

TODO

private SystemToast(SystemToast.SystemToastId id, Component title, List<FormattedCharSequence> messageLines, int width) @ L49

  • 构造器名:SystemToast
  • 源码定位:L49
  • 修饰符:private

参数:

  • id: SystemToast.SystemToastId
  • title: Component
  • messageLines: List
  • width: int

说明:

TODO

方法

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

public static SystemToast multiline(Minecraft minecraft, SystemToast.SystemToastId id, Component title, Component message) @ L42

  • 方法名:multiline
  • 源码定位:L42
  • 返回类型:SystemToast
  • 修饰符:public static

参数:

  • minecraft: Minecraft
  • id: SystemToast.SystemToastId
  • title: Component
  • message: Component

说明:

TODO

private static ImmutableList<FormattedCharSequence> nullToEmpty(Component message) @ L56

  • 方法名:nullToEmpty
  • 源码定位:L56
  • 返回类型:ImmutableList
  • 修饰符:private static

参数:

  • message: Component

说明:

TODO

public int width() @ L60

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

参数:

说明:

TODO

public int height() @ L65

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

参数:

说明:

TODO

public void forceHide() @ L70

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

参数:

说明:

TODO

public Toast.Visibility getWantedVisibility() @ L74

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

参数:

说明:

TODO

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

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

参数:

  • manager: ToastManager
  • fullyVisibleForMs: long

说明:

TODO

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

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

参数:

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

说明:

TODO

public void reset(Component title, Component message) @ L105

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

参数:

  • title: Component
  • message: Component

说明:

TODO

public SystemToast.SystemToastId getToken() @ L111

  • 方法名:getToken
  • 源码定位:L111
  • 返回类型:SystemToast.SystemToastId
  • 修饰符:public

参数:

说明:

TODO

public static void add(ToastManager toastManager, SystemToast.SystemToastId id, Component title, Component message) @ L115

  • 方法名:add
  • 源码定位:L115
  • 返回类型:void
  • 修饰符:public static

参数:

  • toastManager: ToastManager
  • id: SystemToast.SystemToastId
  • title: Component
  • message: Component

说明:

TODO

public static void addOrUpdate(ToastManager toastManager, SystemToast.SystemToastId id, Component title, Component message) @ L119

  • 方法名:addOrUpdate
  • 源码定位:L119
  • 返回类型:void
  • 修饰符:public static

参数:

  • toastManager: ToastManager
  • id: SystemToast.SystemToastId
  • title: Component
  • message: Component

说明:

TODO

public static void forceHide(ToastManager toastManager, SystemToast.SystemToastId id) @ L128

  • 方法名:forceHide
  • 源码定位:L128
  • 返回类型:void
  • 修饰符:public static

参数:

  • toastManager: ToastManager
  • id: SystemToast.SystemToastId

说明:

TODO

public static void onWorldAccessFailure(Minecraft minecraft, String levelId) @ L135

  • 方法名:onWorldAccessFailure
  • 源码定位:L135
  • 返回类型:void
  • 修饰符:public static

参数:

  • minecraft: Minecraft
  • levelId: String

说明:

TODO

public static void onWorldDeleteFailure(Minecraft minecraft, String levelId) @ L144

  • 方法名:onWorldDeleteFailure
  • 源码定位:L144
  • 返回类型:void
  • 修饰符:public static

参数:

  • minecraft: Minecraft
  • levelId: String

说明:

TODO

public static void onPackCopyFailure(Minecraft minecraft, String extraInfo) @ L153

  • 方法名:onPackCopyFailure
  • 源码定位:L153
  • 返回类型:void
  • 修饰符:public static

参数:

  • minecraft: Minecraft
  • extraInfo: String

说明:

TODO

public static void onFileDropFailure(Minecraft minecraft, int count) @ L157

  • 方法名:onFileDropFailure
  • 源码定位:L157
  • 返回类型:void
  • 修饰符:public static

参数:

  • minecraft: Minecraft
  • count: int

说明:

TODO

public static void onLowDiskSpace(Minecraft minecraft) @ L166

  • 方法名:onLowDiskSpace
  • 源码定位:L166
  • 返回类型:void
  • 修饰符:public static

参数:

  • minecraft: Minecraft

说明:

TODO

public static void onChunkLoadFailure(Minecraft minecraft, ChunkPos pos) @ L175

  • 方法名:onChunkLoadFailure
  • 源码定位:L175
  • 返回类型:void
  • 修饰符:public static

参数:

  • minecraft: Minecraft
  • pos: ChunkPos

说明:

TODO

public static void onChunkSaveFailure(Minecraft minecraft, ChunkPos pos) @ L184

  • 方法名:onChunkSaveFailure
  • 源码定位:L184
  • 返回类型:void
  • 修饰符:public static

参数:

  • minecraft: Minecraft
  • pos: ChunkPos

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class SystemToast implements Toast {
    private static final Identifier BACKGROUND_SPRITE = Identifier.withDefaultNamespace("toast/system");
    private static final int MAX_LINE_SIZE = 200;
    private static final int LINE_SPACING = 12;
    private static final int MARGIN = 10;
    private final SystemToast.SystemToastId id;
    private Component title;
    private List<FormattedCharSequence> messageLines;
    private long lastChanged;
    private boolean changed;
    private final int width;
    private boolean forceHide;
    private Toast.Visibility wantedVisibility = Toast.Visibility.HIDE;
 
    public SystemToast(SystemToast.SystemToastId id, Component title, @Nullable Component message) {
        this(
            id,
            title,
            nullToEmpty(message),
            Math.max(160, 30 + Math.max(Minecraft.getInstance().font.width(title), message == null ? 0 : Minecraft.getInstance().font.width(message)))
        );
    }
 
    public static SystemToast multiline(Minecraft minecraft, SystemToast.SystemToastId id, Component title, Component message) {
        Font font = minecraft.font;
        List<FormattedCharSequence> lines = font.split(message, 200);
        int width = Math.max(200, lines.stream().mapToInt(font::width).max().orElse(200));
        return new SystemToast(id, title, lines, width + 30);
    }
 
    private SystemToast(SystemToast.SystemToastId id, Component title, List<FormattedCharSequence> messageLines, int width) {
        this.id = id;
        this.title = title;
        this.messageLines = messageLines;
        this.width = width;
    }
 
    private static ImmutableList<FormattedCharSequence> nullToEmpty(@Nullable Component message) {
        return message == null ? ImmutableList.of() : ImmutableList.of(message.getVisualOrderText());
    }
 
    @Override
    public int width() {
        return this.width;
    }
 
    @Override
    public int height() {
        return 20 + Math.max(this.messageLines.size(), 1) * 12;
    }
 
    public void forceHide() {
        this.forceHide = true;
    }
 
    @Override
    public Toast.Visibility getWantedVisibility() {
        return this.wantedVisibility;
    }
 
    @Override
    public void update(ToastManager manager, long fullyVisibleForMs) {
        if (this.changed) {
            this.lastChanged = fullyVisibleForMs;
            this.changed = false;
        }
 
        double timeToDisplayUpdate = this.id.displayTime * manager.getNotificationDisplayTimeMultiplier();
        long timeSinceUpdate = fullyVisibleForMs - this.lastChanged;
        this.wantedVisibility = !this.forceHide && timeSinceUpdate < timeToDisplayUpdate ? Toast.Visibility.SHOW : Toast.Visibility.HIDE;
    }
 
    @Override
    public void extractRenderState(GuiGraphicsExtractor graphics, Font font, long fullyVisibleForMs) {
        graphics.blitSprite(RenderPipelines.GUI_TEXTURED, BACKGROUND_SPRITE, 0, 0, this.width(), this.height());
        if (this.messageLines.isEmpty()) {
            graphics.text(font, this.title, 18, 12, -256, false);
        } else {
            graphics.text(font, this.title, 18, 7, -256, false);
 
            for (int i = 0; i < this.messageLines.size(); i++) {
                graphics.text(font, this.messageLines.get(i), 18, 18 + i * 12, -1, false);
            }
        }
    }
 
    public void reset(Component title, @Nullable Component message) {
        this.title = title;
        this.messageLines = nullToEmpty(message);
        this.changed = true;
    }
 
    public SystemToast.SystemToastId getToken() {
        return this.id;
    }
 
    public static void add(ToastManager toastManager, SystemToast.SystemToastId id, Component title, @Nullable Component message) {
        toastManager.addToast(new SystemToast(id, title, message));
    }
 
    public static void addOrUpdate(ToastManager toastManager, SystemToast.SystemToastId id, Component title, @Nullable Component message) {
        SystemToast toast = toastManager.getToast(SystemToast.class, id);
        if (toast == null) {
            add(toastManager, id, title, message);
        } else {
            toast.reset(title, message);
        }
    }
 
    public static void forceHide(ToastManager toastManager, SystemToast.SystemToastId id) {
        SystemToast toast = toastManager.getToast(SystemToast.class, id);
        if (toast != null) {
            toast.forceHide();
        }
    }
 
    public static void onWorldAccessFailure(Minecraft minecraft, String levelId) {
        add(
            minecraft.getToastManager(),
            SystemToast.SystemToastId.WORLD_ACCESS_FAILURE,
            Component.translatable("selectWorld.access_failure"),
            Component.literal(levelId)
        );
    }
 
    public static void onWorldDeleteFailure(Minecraft minecraft, String levelId) {
        add(
            minecraft.getToastManager(),
            SystemToast.SystemToastId.WORLD_ACCESS_FAILURE,
            Component.translatable("selectWorld.delete_failure"),
            Component.literal(levelId)
        );
    }
 
    public static void onPackCopyFailure(Minecraft minecraft, String extraInfo) {
        add(minecraft.getToastManager(), SystemToast.SystemToastId.PACK_COPY_FAILURE, Component.translatable("pack.copyFailure"), Component.literal(extraInfo));
    }
 
    public static void onFileDropFailure(Minecraft minecraft, int count) {
        add(
            minecraft.getToastManager(),
            SystemToast.SystemToastId.FILE_DROP_FAILURE,
            Component.translatable("gui.fileDropFailure.title"),
            Component.translatable("gui.fileDropFailure.detail", count)
        );
    }
 
    public static void onLowDiskSpace(Minecraft minecraft) {
        addOrUpdate(
            minecraft.getToastManager(),
            SystemToast.SystemToastId.LOW_DISK_SPACE,
            Component.translatable("chunk.toast.lowDiskSpace"),
            Component.translatable("chunk.toast.lowDiskSpace.description")
        );
    }
 
    public static void onChunkLoadFailure(Minecraft minecraft, ChunkPos pos) {
        addOrUpdate(
            minecraft.getToastManager(),
            SystemToast.SystemToastId.CHUNK_LOAD_FAILURE,
            Component.translatable("chunk.toast.loadFailure", Component.translationArg(pos)).withStyle(ChatFormatting.RED),
            Component.translatable("chunk.toast.checkLog")
        );
    }
 
    public static void onChunkSaveFailure(Minecraft minecraft, ChunkPos pos) {
        addOrUpdate(
            minecraft.getToastManager(),
            SystemToast.SystemToastId.CHUNK_SAVE_FAILURE,
            Component.translatable("chunk.toast.saveFailure", Component.translationArg(pos)).withStyle(ChatFormatting.RED),
            Component.translatable("chunk.toast.checkLog")
        );
    }
 
    @OnlyIn(Dist.CLIENT)
    public static class SystemToastId {
        public static final SystemToast.SystemToastId NARRATOR_TOGGLE = new SystemToast.SystemToastId();
        public static final SystemToast.SystemToastId WORLD_BACKUP = new SystemToast.SystemToastId();
        public static final SystemToast.SystemToastId PACK_LOAD_FAILURE = new SystemToast.SystemToastId();
        public static final SystemToast.SystemToastId WORLD_ACCESS_FAILURE = new SystemToast.SystemToastId();
        public static final SystemToast.SystemToastId PACK_COPY_FAILURE = new SystemToast.SystemToastId();
        public static final SystemToast.SystemToastId FILE_DROP_FAILURE = new SystemToast.SystemToastId();
        public static final SystemToast.SystemToastId PERIODIC_NOTIFICATION = new SystemToast.SystemToastId();
        public static final SystemToast.SystemToastId LOW_DISK_SPACE = new SystemToast.SystemToastId(10000L);
        public static final SystemToast.SystemToastId CHUNK_LOAD_FAILURE = new SystemToast.SystemToastId();
        public static final SystemToast.SystemToastId CHUNK_SAVE_FAILURE = new SystemToast.SystemToastId();
        public static final SystemToast.SystemToastId UNSECURE_SERVER_WARNING = new SystemToast.SystemToastId(10000L);
        private final long displayTime;
 
        public SystemToastId(long displayTime) {
            this.displayTime = displayTime;
        }
 
        public SystemToastId() {
            this(5000L);
        }
    }
}

引用的其他类

  • Minecraft

    • 引用位置: 参数/方法调用
    • 关联成员: Minecraft.getInstance()
  • Font

    • 引用位置: 参数
  • GuiGraphicsExtractor

    • 引用位置: 参数
  • Toast

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

    • 引用位置: 参数
  • Component

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

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

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

    • 引用位置: 参数