From a21e7e115b15de6debc7e83dbba8116bc419b298 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 10 Aug 2021 23:39:59 +0200 Subject: [PATCH] Add config options to control autoSync --- .../api/dataexchange/handler/HelloClient.java | 51 ++++++++------ .../api/dataexchange/handler/HelloServer.java | 6 +- .../api/dataexchange/handler/SendFiles.java | 67 +++++++++++-------- src/main/java/ru/bclib/config/Configs.java | 9 +++ 4 files changed, 82 insertions(+), 51 deletions(-) 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 5229cb40..f57dd392 100644 --- a/src/main/java/ru/bclib/api/dataexchange/handler/HelloClient.java +++ b/src/main/java/ru/bclib/api/dataexchange/handler/HelloClient.java @@ -16,6 +16,7 @@ import ru.bclib.api.dataexchange.DataHandler; import ru.bclib.api.dataexchange.DataHandlerDescriptor; import ru.bclib.api.dataexchange.handler.DataExchange.AutoSyncID; import ru.bclib.api.datafixer.DataFixerAPI; +import ru.bclib.config.Configs; import ru.bclib.gui.screens.SyncFilesScreen; import ru.bclib.gui.screens.WarnBCLibVersionMismatch; @@ -61,29 +62,37 @@ public class HelloClient extends DataHandler { //write BCLibVersion (=protocol version) buf.writeInt(DataFixerAPI.getModVersion(vbclib)); - //write Plugin Versions - buf.writeInt(mods.size()); - for (String modID : mods) { - writeString(buf, modID); - final String ver = getModVersion(modID); - buf.writeInt(DataFixerAPI.getModVersion(ver)); - BCLib.LOGGER.info(" - Listing Mod " + modID + " v" + ver); + + if (Configs.MAIN_CONFIG.getBoolean(Configs.MAIN_SYNC_CATEGORY, "offerMods", true)) { + //write Plugin Versions + buf.writeInt(mods.size()); + for (String modID : mods) { + writeString(buf, modID); + final String ver = getModVersion(modID); + buf.writeInt(DataFixerAPI.getModVersion(ver)); + BCLib.LOGGER.info(" - Listing Mod " + modID + " v" + ver); + } + } else { + buf.writeInt(0); } - //do only include files that exist on the server - final List autoSyncFiles = DataExchange - .getInstance() - .autoSyncFiles - .stream() - .filter(e -> e.fileName.exists()) - .collect(Collectors.toList()); + if (Configs.MAIN_CONFIG.getBoolean(Configs.MAIN_SYNC_CATEGORY, "offerConfigs", true)) { + //do only include files that exist on the server + final List existingAutoSyncFiles = DataExchange + .getInstance() + .autoSyncFiles + .stream() + .filter(e -> e.fileName.exists()) + .collect(Collectors.toList()); - //send config Data - buf.writeInt(autoSyncFiles.size()); - for (AutoFileSyncEntry entry : autoSyncFiles) { - //System.out.println("Serializing " + entry.getFileHash()); - entry.serialize(buf); - BCLib.LOGGER.info(" - Offering File " + entry); + //send config Data + buf.writeInt(existingAutoSyncFiles.size()); + for (AutoFileSyncEntry entry : existingAutoSyncFiles) { + entry.serialize(buf); + BCLib.LOGGER.info(" - Offering File " + entry); + } + } else { + buf.writeInt(0); } } @@ -148,7 +157,7 @@ public class HelloClient extends DataHandler { BCLib.LOGGER.info(" - " + e + ": " + (willRequest ? " (requesting)":"")); } - if (filesToRequest.size()>0) { + if (filesToRequest.size()>0 && SendFiles.acceptFiles()) { showDonwloadConfigs(client, filesToRequest); return; } 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 614152ab..4793d648 100644 --- a/src/main/java/ru/bclib/api/dataexchange/handler/HelloServer.java +++ b/src/main/java/ru/bclib/api/dataexchange/handler/HelloServer.java @@ -10,6 +10,7 @@ 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.config.Configs; import java.io.File; @@ -76,6 +77,9 @@ public class HelloServer extends DataHandler { protected void runOnGameThread(Minecraft client, MinecraftServer server, boolean isClient) { String localBclibVersion = HelloClient.getBCLibVersion(); BCLib.LOGGER.info("Received Hello from Client. (server="+localBclibVersion+", client="+bclibVersion+")"); - reply(new HelloClient(), server); + + if (Configs.MAIN_CONFIG.getBoolean(Configs.MAIN_SYNC_CATEGORY, "enabled", true)) { + reply(new HelloClient(), server); + } } } 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 7742f523..7d4a8c60 100644 --- a/src/main/java/ru/bclib/api/dataexchange/handler/SendFiles.java +++ b/src/main/java/ru/bclib/api/dataexchange/handler/SendFiles.java @@ -11,6 +11,7 @@ import net.minecraft.server.MinecraftServer; import ru.bclib.BCLib; import ru.bclib.api.dataexchange.DataHandler; import ru.bclib.api.dataexchange.DataHandlerDescriptor; +import ru.bclib.config.Configs; import ru.bclib.gui.screens.ConfirmRestartScreen; import ru.bclib.util.Pair; import ru.bclib.util.Triple; @@ -36,6 +37,10 @@ public class SendFiles extends DataHandler { this.files = files; this.token = token; } + + public static boolean acceptFiles() { + return Configs.CLIENT_CONFIG.getBoolean(Configs.MAIN_SYNC_CATEGORY, "acceptFiles", true); + } @Override protected void serializeData(FriendlyByteBuf buf) { @@ -59,45 +64,49 @@ public class SendFiles extends DataHandler { private List> receivedFiles; @Override protected void deserializeFromIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean fromClient) { - token = readString(buf); - if (!token.equals(RequestFiles.currentToken)) { + if (acceptFiles()) { + token = readString(buf); + if (!token.equals(RequestFiles.currentToken)) { + RequestFiles.newToken(); + BCLib.LOGGER.error("Unrequested File Transfer!"); + receivedFiles = new ArrayList<>(0); + return; + } RequestFiles.newToken(); - BCLib.LOGGER.error("Unrequested File Transfer!"); - receivedFiles = new ArrayList<>(0); - return; - } - RequestFiles.newToken(); - int size = buf.readInt(); - receivedFiles = new ArrayList<>(size); - BCLib.LOGGER.info("Server sent " + size + " Files:"); - for (int i=0; i p = AutoFileSyncEntry.deserializeContent(buf); - if (p.first != null) { - receivedFiles.add(p); - BCLib.LOGGER.info(" - " + p.first + " (" + p.second.length + " Bytes)"); - } else { - BCLib.LOGGER.error(" - Failed to receive File " +p.third+ ", possibly sent from a Mod that is not installed on the client."); + int size = buf.readInt(); + receivedFiles = new ArrayList<>(size); + BCLib.LOGGER.info("Server sent " + size + " Files:"); + for (int i = 0; i < size; i++) { + Triple p = AutoFileSyncEntry.deserializeContent(buf); + if (p.first != null) { + receivedFiles.add(p); + BCLib.LOGGER.info(" - " + p.first + " (" + p.second.length + " Bytes)"); + } else { + BCLib.LOGGER.error(" - Failed to receive File " + p.third + ", possibly sent from a Mod that is not installed on the client."); + } } } } @Override protected void runOnGameThread(Minecraft client, MinecraftServer server, boolean isClient) { - BCLib.LOGGER.info("Writing Files:"); - for (Pair entry : receivedFiles) { - final AutoFileSyncEntry e = entry.first; - final byte[] data = entry.second; - Path path = e.fileName.toPath(); - BCLib.LOGGER.info(" - Writing " + path + " (" + data.length + " Bytes)"); - try { - Files.write(path, data); - } catch (IOException ioException) { - BCLib.LOGGER.error(" --> Writing "+e.fileName+" failed: " + ioException); + if (acceptFiles()) { + BCLib.LOGGER.info("Writing Files:"); + for (Pair entry : receivedFiles) { + final AutoFileSyncEntry e = entry.first; + final byte[] data = entry.second; + Path path = e.fileName.toPath(); + BCLib.LOGGER.info(" - Writing " + path + " (" + data.length + " Bytes)"); + try { + Files.write(path, data); + } catch (IOException ioException) { + BCLib.LOGGER.error(" --> Writing " + e.fileName + " failed: " + ioException); + } } - } - showConfirmRestart(client); + showConfirmRestart(client); + } } @Environment(EnvType.CLIENT) diff --git a/src/main/java/ru/bclib/config/Configs.java b/src/main/java/ru/bclib/config/Configs.java index c29aed63..db2d0bd6 100644 --- a/src/main/java/ru/bclib/config/Configs.java +++ b/src/main/java/ru/bclib/config/Configs.java @@ -1,15 +1,24 @@ package ru.bclib.config; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import ru.bclib.BCLib; public class Configs { public static final PathConfig MAIN_CONFIG = new PathConfig(BCLib.MOD_ID, "main"); public static final String MAIN_PATCH_CATEGORY = "patches"; + public static final String MAIN_SYNC_CATEGORY = "client_sync"; public static final PathConfig RECIPE_CONFIG = new PathConfig(BCLib.MOD_ID, "recipes"); + + @Environment(EnvType.CLIENT) + public static final PathConfig CLIENT_CONFIG = new PathConfig(BCLib.MOD_ID, "client"); public static void save() { MAIN_CONFIG.saveChanges(); RECIPE_CONFIG.saveChanges(); + if (BCLib.isClient()) { + CLIENT_CONFIG.saveChanges(); + } } }