From 165c6e5b2217f50a4afd8fa34290c34010ebf29c Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Sat, 31 Jul 2021 09:19:46 +0200 Subject: [PATCH 01/24] Fixed crash when server initializes a new world --- src/main/java/ru/bclib/api/datafixer/DataFixerAPI.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/bclib/api/datafixer/DataFixerAPI.java b/src/main/java/ru/bclib/api/datafixer/DataFixerAPI.java index d5c879fc..0866064c 100644 --- a/src/main/java/ru/bclib/api/datafixer/DataFixerAPI.java +++ b/src/main/java/ru/bclib/api/datafixer/DataFixerAPI.java @@ -105,9 +105,9 @@ public class DataFixerAPI { */ public static boolean fixData(LevelStorageSource.LevelStorageAccess levelStorageAccess, boolean showUI, Consumer onResume){ File levelPath = levelStorageAccess.getLevelPath(LevelResource.ROOT).toFile(); - + File levelDat = levelStorageAccess.getLevelPath(LevelResource.LEVEL_DATA_FILE).toFile(); boolean newWorld = false; - if (!levelPath.exists()) { + if (!levelDat.exists()) { BCLib.LOGGER.info("Creating a new World, no fixes needed"); newWorld = true; } From c621b0525e6e2a79edf7237b8152759451c43aff Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Sat, 31 Jul 2021 10:32:09 +0200 Subject: [PATCH 02/24] Hello message initiated on Server --- .../bclib/api/dataexchange/DataHandler.java | 17 ++++------- .../{HelloServer.java => HelloClient.java} | 28 ++++++++++++------- 2 files changed, 24 insertions(+), 21 deletions(-) rename src/main/java/ru/bclib/api/dataexchange/handler/{HelloServer.java => HelloClient.java} (73%) diff --git a/src/main/java/ru/bclib/api/dataexchange/DataHandler.java b/src/main/java/ru/bclib/api/dataexchange/DataHandler.java index 0005ced8..f4a360b9 100644 --- a/src/main/java/ru/bclib/api/dataexchange/DataHandler.java +++ b/src/main/java/ru/bclib/api/dataexchange/DataHandler.java @@ -40,24 +40,19 @@ public abstract class DataHandler { @Environment(EnvType.CLIENT) void receiveFromServer(Minecraft client, ClientPacketListener handler, FriendlyByteBuf buf, PacketSender responseSender){ - deserializeFromIncomingData(buf, responseSender, false); - client.execute(() -> runOnClient(client)); + deserializeFromIncomingData(buf, responseSender, true); + client.execute(() -> runOnGameThread(client, null, true)); } void receiveFromClient(MinecraftServer server, ServerPlayer player, ServerGamePacketListenerImpl handler, FriendlyByteBuf buf, PacketSender responseSender){ - deserializeFromIncomingData(buf, responseSender, true); - server.execute(() -> runOnServer(server)); + deserializeFromIncomingData(buf, responseSender, false); + server.execute(() -> runOnGameThread(null, server, false)); } - protected void deserializeFromIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean fromClient){ + protected void deserializeFromIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean isClient){ } - @Environment(EnvType.CLIENT) - protected void runOnClient(Minecraft client){ - - } - - protected void runOnServer(MinecraftServer server){ + protected void runOnGameThread(Minecraft client, MinecraftServer server, boolean isClient){ } diff --git a/src/main/java/ru/bclib/api/dataexchange/handler/HelloServer.java b/src/main/java/ru/bclib/api/dataexchange/handler/HelloClient.java similarity index 73% rename from src/main/java/ru/bclib/api/dataexchange/handler/HelloServer.java rename to src/main/java/ru/bclib/api/dataexchange/handler/HelloClient.java index 13b2fe02..96c272d9 100644 --- a/src/main/java/ru/bclib/api/dataexchange/handler/HelloServer.java +++ b/src/main/java/ru/bclib/api/dataexchange/handler/HelloClient.java @@ -1,7 +1,5 @@ package ru.bclib.api.dataexchange.handler; -import io.netty.buffer.ByteBufUtil; -import io.netty.util.CharsetUtil; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.networking.v1.PacketSender; @@ -12,7 +10,6 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; import ru.bclib.BCLib; -import ru.bclib.api.WorldDataAPI; import ru.bclib.api.dataexchange.DataExchangeAPI; import ru.bclib.api.dataexchange.DataHandler; import ru.bclib.api.dataexchange.DataHandlerDescriptor; @@ -24,11 +21,11 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Optional; -public class HelloServer extends DataHandler { - public static DataHandlerDescriptor DESCRIPTOR = new DataHandlerDescriptor(new ResourceLocation(BCLib.MOD_ID, "hello_server"), HelloServer::new, true); +public class HelloClient extends DataHandler { + public static DataHandlerDescriptor DESCRIPTOR = new DataHandlerDescriptor(new ResourceLocation(BCLib.MOD_ID, "hello_client"), HelloClient::new, true); - public HelloServer() { - super(DESCRIPTOR.IDENTIFIER, false); + public HelloClient() { + super(DESCRIPTOR.IDENTIFIER, true); } public static String getModVersion(String modID){ @@ -60,13 +57,18 @@ public class HelloServer extends DataHandler { } @Override - protected void runOnServer(MinecraftServer server) { + protected void runOnGameThread(Minecraft client, MinecraftServer server, boolean isClient) { String localBclibVersion = getBCLibVersion(); - BCLib.LOGGER.info("Hello Server received from BCLib. (server="+localBclibVersion+", client="+bclibVersion+")"); + BCLib.LOGGER.info("Hello Client received from BCLib. (client="+localBclibVersion+", server="+bclibVersion+")"); + + if (DataFixerAPI.getModVersion(localBclibVersion) == DataFixerAPI.getModVersion(bclibVersion)){ + showBCLibError(client); + return; + } for (Entry e : modVersion.entrySet()){ String ver = getModVersion(e.getKey()); - BCLib.LOGGER.info(" - " + e.getKey() + " (server="+ver+", client="+ver+")"); + BCLib.LOGGER.info(" - " + e.getKey() + " (client="+ver+", server="+ver+")"); } } @@ -81,4 +83,10 @@ public class HelloServer extends DataHandler { buf.writeInt(DataFixerAPI.getModVersion(getModVersion(modID))); } } + + @Environment(EnvType.CLIENT) + protected void showBCLibError(Minecraft client){ + BCLib.LOGGER.error("BCLib differs on client and server. Stopping."); + client.stop(); + } } From 114574bff36bfb16ca37ee5b88c5c7849f652c16 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Sat, 31 Jul 2021 10:32:23 +0200 Subject: [PATCH 03/24] Added class to help with simple GridLayouts --- src/main/java/ru/bclib/gui/GridLayout.java | 122 ++++++++++++++++++ .../bclib/gui/screens/ConfirmFixScreen.java | 74 +++-------- 2 files changed, 140 insertions(+), 56 deletions(-) create mode 100644 src/main/java/ru/bclib/gui/GridLayout.java diff --git a/src/main/java/ru/bclib/gui/GridLayout.java b/src/main/java/ru/bclib/gui/GridLayout.java new file mode 100644 index 00000000..bc4b2976 --- /dev/null +++ b/src/main/java/ru/bclib/gui/GridLayout.java @@ -0,0 +1,122 @@ +package ru.bclib.gui; + +import com.mojang.blaze3d.vertex.PoseStack; +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; +import java.util.List; +import java.util.Objects; +import java.util.function.Consumer; + +public class GridLayout { + class LablePos { + final MultiLineLabel label; + final int top; + + LablePos(MultiLineLabel label, int top){ + this.label = label; + this.top = top; + } + } + + class ButtonPos { + 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) { + this.height = height; + this.width = width; + this.alpha = alpha; + this.component = component; + this.onPress = onPress; + } + } + public final int width; + @NotNull + private final Font font; + private final Consumer