/* * Decompiled with CFR 0.152. * * Could not load the following classes: * com.google.common.collect.ImmutableList * org.jspecify.annotations.Nullable */ package net.minecraft.client.gui.components.toasts; import com.google.common.collect.ImmutableList; import java.util.List; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.toasts.Toast; import net.minecraft.client.gui.components.toasts.ToastManager; import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.network.chat.Component; import net.minecraft.resources.Identifier; import net.minecraft.util.FormattedCharSequence; import net.minecraft.world.level.ChunkPos; import org.jspecify.annotations.Nullable; 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 SystemToastId id; private Component title; private List messageLines; private long lastChanged; private boolean changed; private final int width; private boolean forceHide; private Toast.Visibility wantedVisibility = Toast.Visibility.HIDE; public SystemToast(SystemToastId id, Component title, @Nullable Component message) { this(id, title, (List)SystemToast.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, SystemToastId id, Component title, Component message) { Font font = minecraft.font; List 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(SystemToastId id, Component title, List messageLines, int width) { this.id = id; this.title = title; this.messageLines = messageLines; this.width = width; } private static ImmutableList nullToEmpty(@Nullable Component message) { return message == null ? ImmutableList.of() : ImmutableList.of((Object)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 = (double)this.id.displayTime * manager.getNotificationDisplayTimeMultiplier(); long timeSinceUpdate = fullyVisibleForMs - this.lastChanged; this.wantedVisibility = !this.forceHide && (double)timeSinceUpdate < timeToDisplayUpdate ? Toast.Visibility.SHOW : Toast.Visibility.HIDE; } @Override public void render(GuiGraphics graphics, Font font, long fullyVisibleForMs) { graphics.blitSprite(RenderPipelines.GUI_TEXTURED, BACKGROUND_SPRITE, 0, 0, this.width(), this.height()); if (this.messageLines.isEmpty()) { graphics.drawString(font, this.title, 18, 12, -256, false); } else { graphics.drawString(font, this.title, 18, 7, -256, false); for (int i = 0; i < this.messageLines.size(); ++i) { graphics.drawString(font, this.messageLines.get(i), 18, 18 + i * 12, -1, false); } } } public void reset(Component title, @Nullable Component message) { this.title = title; this.messageLines = SystemToast.nullToEmpty(message); this.changed = true; } @Override public SystemToastId getToken() { return this.id; } public static void add(ToastManager toastManager, SystemToastId id, Component title, @Nullable Component message) { toastManager.addToast(new SystemToast(id, title, message)); } public static void addOrUpdate(ToastManager toastManager, SystemToastId id, Component title, @Nullable Component message) { SystemToast toast = toastManager.getToast(SystemToast.class, id); if (toast == null) { SystemToast.add(toastManager, id, title, message); } else { toast.reset(title, message); } } public static void forceHide(ToastManager toastManager, SystemToastId id) { SystemToast toast = toastManager.getToast(SystemToast.class, id); if (toast != null) { toast.forceHide(); } } public static void onWorldAccessFailure(Minecraft minecraft, String levelId) { SystemToast.add(minecraft.getToastManager(), SystemToastId.WORLD_ACCESS_FAILURE, Component.translatable("selectWorld.access_failure"), Component.literal(levelId)); } public static void onWorldDeleteFailure(Minecraft minecraft, String levelId) { SystemToast.add(minecraft.getToastManager(), SystemToastId.WORLD_ACCESS_FAILURE, Component.translatable("selectWorld.delete_failure"), Component.literal(levelId)); } public static void onPackCopyFailure(Minecraft minecraft, String extraInfo) { SystemToast.add(minecraft.getToastManager(), SystemToastId.PACK_COPY_FAILURE, Component.translatable("pack.copyFailure"), Component.literal(extraInfo)); } public static void onFileDropFailure(Minecraft minecraft, int count) { SystemToast.add(minecraft.getToastManager(), SystemToastId.FILE_DROP_FAILURE, Component.translatable("gui.fileDropFailure.title"), Component.translatable("gui.fileDropFailure.detail", count)); } public static void onLowDiskSpace(Minecraft minecraft) { SystemToast.addOrUpdate(minecraft.getToastManager(), SystemToastId.LOW_DISK_SPACE, Component.translatable("chunk.toast.lowDiskSpace"), Component.translatable("chunk.toast.lowDiskSpace.description")); } public static void onChunkLoadFailure(Minecraft minecraft, ChunkPos pos) { SystemToast.addOrUpdate(minecraft.getToastManager(), 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) { SystemToast.addOrUpdate(minecraft.getToastManager(), SystemToastId.CHUNK_SAVE_FAILURE, Component.translatable("chunk.toast.saveFailure", Component.translationArg(pos)).withStyle(ChatFormatting.RED), Component.translatable("chunk.toast.checkLog")); } public static class SystemToastId { public static final SystemToastId NARRATOR_TOGGLE = new SystemToastId(); public static final SystemToastId WORLD_BACKUP = new SystemToastId(); public static final SystemToastId PACK_LOAD_FAILURE = new SystemToastId(); public static final SystemToastId WORLD_ACCESS_FAILURE = new SystemToastId(); public static final SystemToastId PACK_COPY_FAILURE = new SystemToastId(); public static final SystemToastId FILE_DROP_FAILURE = new SystemToastId(); public static final SystemToastId PERIODIC_NOTIFICATION = new SystemToastId(); public static final SystemToastId LOW_DISK_SPACE = new SystemToastId(10000L); public static final SystemToastId CHUNK_LOAD_FAILURE = new SystemToastId(); public static final SystemToastId CHUNK_SAVE_FAILURE = new SystemToastId(); public static final SystemToastId UNSECURE_SERVER_WARNING = new SystemToastId(10000L); private final long displayTime; public SystemToastId(long displayTime) { this.displayTime = displayTime; } public SystemToastId() { this(5000L); } } }