From 742ea56e345db4b07d94cd61a128ecb614a48980 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 17 Aug 2021 09:52:48 +0200 Subject: [PATCH] Added Step to handler that allows users to stop the message from beeing sent and prepare some data. --- .../bclib/api/dataexchange/DataHandler.java | 38 ++++++++++++------- .../api/dataexchange/handler/HelloClient.java | 19 +++++++++- .../api/dataexchange/handler/HelloServer.java | 22 ++++++----- .../dataexchange/handler/RequestFiles.java | 2 +- .../api/dataexchange/handler/SendFiles.java | 2 +- 5 files changed, 58 insertions(+), 25 deletions(-) diff --git a/src/main/java/ru/bclib/api/dataexchange/DataHandler.java b/src/main/java/ru/bclib/api/dataexchange/DataHandler.java index 7545d6cb..a552716b 100644 --- a/src/main/java/ru/bclib/api/dataexchange/DataHandler.java +++ b/src/main/java/ru/bclib/api/dataexchange/DataHandler.java @@ -25,9 +25,14 @@ public abstract class DataHandler { super(identifier, originatesOnServer); } - protected void serializeData(FriendlyByteBuf buf) { + @Override + protected boolean prepareData(boolean isClient){ return true; } + + @Override + protected void serializeData(FriendlyByteBuf buf, boolean isClient) { } + @Override protected void deserializeFromIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean isClient){ } } @@ -62,7 +67,8 @@ public abstract class DataHandler { server.execute(() -> runOnGameThread(null, server, false)); } - abstract protected void serializeData(FriendlyByteBuf buf) ; + protected boolean prepareData(boolean isClient){ return true; } + abstract protected void serializeData(FriendlyByteBuf buf, boolean isClient) ; abstract protected void deserializeFromIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean isClient); abstract protected void runOnGameThread(Minecraft client, MinecraftServer server, boolean isClient); @@ -73,25 +79,31 @@ public abstract class DataHandler { } void sendToClient(MinecraftServer server){ - FriendlyByteBuf buf = PacketByteBufs.create(); - serializeData(buf); - - for (ServerPlayer player : PlayerLookup.all(server)) { - ServerPlayNetworking.send(player, this.identifier, buf); + if (prepareData(false)) { + FriendlyByteBuf buf = PacketByteBufs.create(); + serializeData(buf, false); + + for (ServerPlayer player : PlayerLookup.all(server)) { + ServerPlayNetworking.send(player, this.identifier, buf); + } } } void sendToClient(MinecraftServer server, ServerPlayer player){ - FriendlyByteBuf buf = PacketByteBufs.create(); - serializeData(buf); - ServerPlayNetworking.send(player, this.identifier, buf); + if (prepareData(false)) { + FriendlyByteBuf buf = PacketByteBufs.create(); + serializeData(buf, false); + ServerPlayNetworking.send(player, this.identifier, buf); + } } @Environment(EnvType.CLIENT) void sendToServer(Minecraft client){ - FriendlyByteBuf buf = PacketByteBufs.create(); - serializeData(buf); - ClientPlayNetworking.send(identifier, buf); + if (prepareData(true)) { + FriendlyByteBuf buf = PacketByteBufs.create(); + serializeData(buf, true); + ClientPlayNetworking.send(identifier, buf); + } } @Override 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 5e5338a8..63793b5b 100644 --- a/src/main/java/ru/bclib/api/dataexchange/handler/HelloClient.java +++ b/src/main/java/ru/bclib/api/dataexchange/handler/HelloClient.java @@ -44,6 +44,12 @@ public class HelloClient extends DataHandler { super(DESCRIPTOR.IDENTIFIER, true); } + public static ModContainer getModContainer(String modID) { + Optional optional = FabricLoader.getInstance() + .getModContainer(modID); + return optional.orElse(null); + } + public static String getModVersion(String modID) { Optional optional = FabricLoader.getInstance() .getModContainer(modID); @@ -61,7 +67,18 @@ public class HelloClient extends DataHandler { } @Override - protected void serializeData(FriendlyByteBuf buf) { + protected boolean prepareData(boolean isClient) { + if (!Configs.MAIN_CONFIG.getBoolean(Configs.MAIN_SYNC_CATEGORY, "enabled", true)) { + BCLib.LOGGER.info("Auto-Sync was disabled on the server."); + return false; + } + + DataExchange.getInstance().loadSyncFolder(); + return true; + } + + @Override + protected void serializeData(FriendlyByteBuf buf, boolean isClient) { final String vbclib = getBCLibVersion(); BCLib.LOGGER.info("Sending Hello to Client. (server=" + vbclib + ")"); final List mods = DataExchangeAPI.registeredMods(); diff --git a/src/main/java/ru/bclib/api/dataexchange/handler/HelloServer.java b/src/main/java/ru/bclib/api/dataexchange/handler/HelloServer.java index 2740917f..b8d43f0e 100644 --- a/src/main/java/ru/bclib/api/dataexchange/handler/HelloServer.java +++ b/src/main/java/ru/bclib/api/dataexchange/handler/HelloServer.java @@ -62,9 +62,19 @@ public class HelloServer extends DataHandler { public HelloServer() { super(DESCRIPTOR.IDENTIFIER, false); } - + + @Override - protected void serializeData(FriendlyByteBuf buf) { + protected boolean prepareData(boolean isClient) { + if (!Configs.CLIENT_CONFIG.getBoolean(Configs.MAIN_SYNC_CATEGORY, "enabled", true)) { + BCLib.LOGGER.info("Auto-Sync was disabled on the client."); + return false; + } + return true; + } + + @Override + protected void serializeData(FriendlyByteBuf buf, boolean isClient) { BCLib.LOGGER.info("Sending hello to server."); buf.writeInt(DataFixerAPI.getModVersion(HelloClient.getBCLibVersion())); } @@ -84,12 +94,6 @@ public class HelloServer extends DataHandler { return; } - if (Configs.MAIN_CONFIG.getBoolean(Configs.MAIN_SYNC_CATEGORY, "enabled", true)) { - reply(new HelloClient(), server); - } else { - BCLib.LOGGER.info("Auto-Sync was disabled on the server."); - } - - DataExchange.getInstance().loadSyncFolder(); + reply(new HelloClient(), server); } } diff --git a/src/main/java/ru/bclib/api/dataexchange/handler/RequestFiles.java b/src/main/java/ru/bclib/api/dataexchange/handler/RequestFiles.java index 28780eb1..5292b252 100644 --- a/src/main/java/ru/bclib/api/dataexchange/handler/RequestFiles.java +++ b/src/main/java/ru/bclib/api/dataexchange/handler/RequestFiles.java @@ -29,7 +29,7 @@ public class RequestFiles extends DataHandler { } @Override - protected void serializeData(FriendlyByteBuf buf) { + protected void serializeData(FriendlyByteBuf buf, boolean isClient) { newToken(); writeString(buf, currentToken); diff --git a/src/main/java/ru/bclib/api/dataexchange/handler/SendFiles.java b/src/main/java/ru/bclib/api/dataexchange/handler/SendFiles.java index 1746f1cb..02300b7a 100644 --- a/src/main/java/ru/bclib/api/dataexchange/handler/SendFiles.java +++ b/src/main/java/ru/bclib/api/dataexchange/handler/SendFiles.java @@ -43,7 +43,7 @@ public class SendFiles extends DataHandler { } @Override - protected void serializeData(FriendlyByteBuf buf) { + protected void serializeData(FriendlyByteBuf buf, boolean isClient) { List existingFiles = files.stream().filter(e -> e.fileName.exists()).collect(Collectors.toList()); /* //this will try to send a file that was not registered or requested by the client