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