Add config options to control autoSync
This commit is contained in:
parent
ca721368ea
commit
a21e7e115b
4 changed files with 82 additions and 51 deletions
|
@ -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<AutoFileSyncEntry> 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<AutoFileSyncEntry> 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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
@ -37,6 +38,10 @@ public class SendFiles extends DataHandler {
|
|||
this.token = token;
|
||||
}
|
||||
|
||||
public static boolean acceptFiles() {
|
||||
return Configs.CLIENT_CONFIG.getBoolean(Configs.MAIN_SYNC_CATEGORY, "acceptFiles", true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void serializeData(FriendlyByteBuf buf) {
|
||||
List<AutoFileSyncEntry> existingFiles = files.stream().filter(e -> e.fileName.exists()).collect(Collectors.toList());
|
||||
|
@ -59,45 +64,49 @@ public class SendFiles extends DataHandler {
|
|||
private List<Pair<AutoFileSyncEntry, byte[]>> 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<size; i++){
|
||||
Triple<AutoFileSyncEntry, byte[], DataExchange.AutoSyncID> 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<AutoFileSyncEntry, byte[], DataExchange.AutoSyncID> 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<AutoFileSyncEntry, byte[]> 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<AutoFileSyncEntry, byte[]> 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)
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue