From 4fc9c0620490fa50114c4a3c7e2d20a4bd63632c Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Sat, 31 Jul 2021 11:29:13 +0200 Subject: [PATCH] Prepared BCLib Version warning screen --- .../api/dataexchange/handler/HelloClient.java | 21 ++++- .../ru/bclib/api/datafixer/DataFixerAPI.java | 4 - src/main/java/ru/bclib/gui/GridLayout.java | 90 +++++++++++++------ src/main/java/ru/bclib/gui/GridScreen.java | 34 +++++++ .../bclib/gui/screens/ConfirmFixScreen.java | 30 ++----- .../gui/screens/WarnBCLibVersionMismatch.java | 46 ++++++++++ .../resources/assets/bclib/lang/en_us.json | 4 +- 7 files changed, 171 insertions(+), 58 deletions(-) create mode 100644 src/main/java/ru/bclib/gui/GridScreen.java create mode 100644 src/main/java/ru/bclib/gui/screens/WarnBCLibVersionMismatch.java diff --git a/src/main/java/ru/bclib/api/dataexchange/handler/HelloClient.java b/src/main/java/ru/bclib/api/dataexchange/handler/HelloClient.java index 96c272d9..ef35015d 100644 --- a/src/main/java/ru/bclib/api/dataexchange/handler/HelloClient.java +++ b/src/main/java/ru/bclib/api/dataexchange/handler/HelloClient.java @@ -6,6 +6,8 @@ import net.fabricmc.fabric.api.networking.v1.PacketSender; import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.ModContainer; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.worldselection.EditWorldScreen; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; @@ -14,12 +16,15 @@ import ru.bclib.api.dataexchange.DataExchangeAPI; import ru.bclib.api.dataexchange.DataHandler; import ru.bclib.api.dataexchange.DataHandlerDescriptor; import ru.bclib.api.datafixer.DataFixerAPI; +import ru.bclib.gui.screens.ConfirmFixScreen; +import ru.bclib.gui.screens.WarnBCLibVersionMismatch; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Optional; +import java.util.function.Consumer; public class HelloClient extends DataHandler { public static DataHandlerDescriptor DESCRIPTOR = new DataHandlerDescriptor(new ResourceLocation(BCLib.MOD_ID, "hello_client"), HelloClient::new, true); @@ -86,7 +91,19 @@ public class HelloClient extends DataHandler { @Environment(EnvType.CLIENT) protected void showBCLibError(Minecraft client){ - BCLib.LOGGER.error("BCLib differs on client and server. Stopping."); - client.stop(); + client.pauseGame(false); + BCLib.LOGGER.error("BCLib differs on client and server."); + client.setScreen(new WarnBCLibVersionMismatch((download) -> { + Minecraft.getInstance().setScreen((Screen)null); + if (download){ + requestDownloads((hadErrors)->{ + client.stop(); + }); + } + })); + } + + private void requestDownloads(Consumer whenFinished){ + BCLib.LOGGER.warning("Starting download of BCLib"); } } diff --git a/src/main/java/ru/bclib/api/datafixer/DataFixerAPI.java b/src/main/java/ru/bclib/api/datafixer/DataFixerAPI.java index 0866064c..dfdec8d7 100644 --- a/src/main/java/ru/bclib/api/datafixer/DataFixerAPI.java +++ b/src/main/java/ru/bclib/api/datafixer/DataFixerAPI.java @@ -227,9 +227,6 @@ public class DataFixerAPI { @Environment(EnvType.CLIENT) static void showBackupWarning(String levelID, Consumer whenFinished){ - TranslatableComponent promptText = new TranslatableComponent("bclib.datafixer.backupWarning.prompt"); - TranslatableComponent buttonTitle = new TranslatableComponent("bclib.datafixer.backupWarning.button"); - Minecraft.getInstance().setScreen(new ConfirmFixScreen((Screen) null, (createBackup, applyFixes) -> { if (createBackup) { EditWorldScreen.makeBackupAndShowToast(Minecraft.getInstance().getLevelSource(), levelID); @@ -238,7 +235,6 @@ public class DataFixerAPI { Minecraft.getInstance().setScreen((Screen)null); whenFinished.accept(applyFixes); })); - } private static void runDataFixes(File dir, MigrationProfile profile, ProgressListener progress) { diff --git a/src/main/java/ru/bclib/gui/GridLayout.java b/src/main/java/ru/bclib/gui/GridLayout.java index bc4b2976..c8b3005b 100644 --- a/src/main/java/ru/bclib/gui/GridLayout.java +++ b/src/main/java/ru/bclib/gui/GridLayout.java @@ -5,9 +5,7 @@ import net.minecraft.client.gui.Font; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.Button.OnPress; import net.minecraft.client.gui.components.MultiLineLabel; -import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.TranslatableComponent; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -27,72 +25,107 @@ public class GridLayout { } class ButtonPos { + final int top; final int height; final int width; final float alpha; final Component component; final Button.OnPress onPress; - ButtonPos(float alpha, int width, int height, Component component, OnPress onPress) { + ButtonPos(float alpha, int top, int width, int height, Component component, OnPress onPress) { this.height = height; this.width = width; + this.top = top; this.alpha = alpha; this.component = component; this.onPress = onPress; } } public final int width; + public final int height; @NotNull private final Font font; private final Consumer