package com.mojang.realmsclient.gui.screens; import org.apache.logging.log4j.LogManager; import java.util.concurrent.TimeUnit; import net.minecraft.Util; import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.Tesselator; import com.mojang.blaze3d.systems.RenderSystem; import java.util.Locale; import net.minecraft.network.chat.FormattedText; import com.mojang.blaze3d.vertex.PoseStack; import java.util.List; import net.minecraft.realms.NarrationHelper; import java.util.stream.Collector; import java.util.stream.Collectors; import java.util.function.Function; import net.minecraft.network.chat.TextComponent; import com.google.common.collect.Lists; import com.mojang.realmsclient.client.FileDownload; import com.mojang.realmsclient.Unit; import net.minecraft.network.chat.CommonComponents; import net.minecraft.network.chat.TranslatableComponent; import it.unimi.dsi.fastutil.booleans.BooleanConsumer; import net.minecraft.client.gui.components.Button; import com.google.common.util.concurrent.RateLimiter; import net.minecraft.network.chat.Component; import com.mojang.realmsclient.dto.WorldDownload; import net.minecraft.client.gui.screens.Screen; import java.util.concurrent.locks.ReentrantLock; import org.apache.logging.log4j.Logger; import net.minecraft.realms.RealmsScreen; public class RealmsDownloadLatestWorldScreen extends RealmsScreen { private static final Logger LOGGER; private static final ReentrantLock DOWNLOAD_LOCK; private final Screen lastScreen; private final WorldDownload worldDownload; private final Component downloadTitle; private final RateLimiter narrationRateLimiter; private Button cancelButton; private final String worldName; private final DownloadStatus downloadStatus; private volatile Component errorMessage; private volatile Component status; private volatile String progress; private volatile boolean cancelled; private volatile boolean showDots; private volatile boolean finished; private volatile boolean extracting; private Long previousWrittenBytes; private Long previousTimeSnapshot; private long bytesPersSecond; private int animTick; private static final String[] DOTS; private int dotIndex; private boolean checked; private final BooleanConsumer callback; public RealmsDownloadLatestWorldScreen(final Screen dqs, final WorldDownload djc, final String string, final BooleanConsumer booleanConsumer) { this.status = new TranslatableComponent("mco.download.preparing"); this.showDots = true; this.callback = booleanConsumer; this.lastScreen = dqs; this.worldName = string; this.worldDownload = djc; this.downloadStatus = new DownloadStatus(); this.downloadTitle = new TranslatableComponent("mco.download.title"); this.narrationRateLimiter = RateLimiter.create(0.10000000149011612); } public void init() { this.minecraft.keyboardHandler.setSendRepeatsToGui(true); this.cancelButton = this.