1 package com.irtimaled.bbor.client.gui;
3 import com.irtimaled.bbor.client.interop.ClientInterop;
4 import net.minecraft.client.MinecraftClient;
5 import net.minecraft.client.gui.screen.Screen;
6 import net.minecraft.client.util.math.MatrixStack;
7 import net.minecraft.world.level.storage.LevelStorage;
8 import net.minecraft.world.level.storage.LevelStorageException;
9 import net.minecraft.world.level.storage.LevelSummary;
11 import java.util.List;
12 import java.util.concurrent.ExecutionException;
14 public class LoadSavesScreen extends ListScreen {
15 private SelectableControlList controlList;
17 public static void show() {
18 ClientInterop.displayScreen(new LoadSavesScreen(MinecraftClient.getInstance().currentScreen));
21 public LoadSavesScreen(Screen lastScreen) {
26 protected ControlList buildList(int top, int bottom) {
27 controlList = new SelectableControlList(this.width, this.height, top, bottom);
29 final LevelStorage saveLoader = this.client.getLevelStorage();
30 List<LevelSummary> saveList = saveLoader.loadSummaries(saveLoader.getLevelList()).get();
32 saveList.forEach(world -> controlList.add(new WorldSaveRow(world, saveLoader, controlList::setSelectedEntry)));
33 } catch (LevelStorageException | InterruptedException | ExecutionException e) {
40 protected void onDoneClicked() {
41 getSelectedEntry().done();
45 public void render(MatrixStack matrixStack, int mouseX, int mouseY, float unknown) {
46 ControlListEntry selectedEntry = getSelectedEntry();
47 this.setCanExit(selectedEntry != null && selectedEntry.isVisible());
48 super.render(matrixStack, mouseX, mouseY, unknown);
51 private ControlListEntry getSelectedEntry() {
52 return this.controlList.getSelectedEntry();