Prepare to sync Mods

This commit is contained in:
Frank 2021-08-18 09:57:52 +02:00
parent 55f00c664c
commit e9fc77ab0d
4 changed files with 108 additions and 15 deletions

View file

@ -1,11 +1,14 @@
package ru.bclib.api.dataexchange.handler.autosync;
import net.minecraft.network.FriendlyByteBuf;
import ru.bclib.BCLib;
import ru.bclib.api.dataexchange.DataHandler;
import ru.bclib.api.dataexchange.SyncFileHash;
import ru.bclib.api.dataexchange.handler.autosync.AutoSync.NeedTransferPredicate;
import ru.bclib.api.dataexchange.handler.autosync.SyncFolderDescriptor.SubFile;
import ru.bclib.util.Pair;
import ru.bclib.util.PathUtil;
import ru.bclib.util.PathUtil.ModInfo;
import ru.bclib.util.Triple;
import java.io.File;
@ -50,6 +53,38 @@ class AutoFileSyncEntry extends AutoSyncID {
}
}
static class ForModFileRequest extends AutoFileSyncEntry {
public static Path getLocalPathForID(String modID){
ModInfo mi = PathUtil.getModInfo(modID);
if (mi!=null){
return mi.jarPath;
}
return null;
}
ForModFileRequest(String modID) {
super(modID, AutoSyncID.ForModFileRequest.UNIQUE_ID, getLocalPathForID(modID).toFile(), false, (a, b, c) -> false);
if (this.fileName == null){
BCLib.LOGGER.error("Unknown mod '"+modID+"'.");
}
}
@Override
public int serializeContent(FriendlyByteBuf buf) {
final int res = super.serializeContent(buf);
return res;
}
static AutoFileSyncEntry.ForModFileRequest finishDeserializeContent(String modID, FriendlyByteBuf buf) {
return new AutoFileSyncEntry.ForModFileRequest(modID);
}
@Override
public String toString() {
return modID;
}
}
public final NeedTransferPredicate needTransfer;
public final File fileName;
public final boolean requestContent;
@ -101,6 +136,9 @@ class AutoFileSyncEntry extends AutoSyncID {
if (AutoSyncID.ForDirectFileRequest.MOD_ID.equals(modID)) {
entry = AutoFileSyncEntry.ForDirectFileRequest.finishDeserializeContent(uniqueID, buf);
}
else if (AutoSyncID.ForModFileRequest.UNIQUE_ID.equals(uniqueID)) {
entry = AutoFileSyncEntry.ForModFileRequest.finishDeserializeContent(uniqueID, buf);
}
else {
entry = AutoFileSyncEntry.findMatching(modID, uniqueID);
}

View file

@ -39,6 +39,24 @@ public class AutoSyncID {
return new ForDirectFileRequest(uniqueID, fl);
}
}
static class ForModFileRequest extends AutoSyncID {
public final static String UNIQUE_ID = "bclib::MOD";
ForModFileRequest(String modID) {
super(modID, ForModFileRequest.UNIQUE_ID);
}
@Override
void serializeData(FriendlyByteBuf buf) {
super.serializeData(buf);
}
static ForModFileRequest finishDeserialize(String modID, String uniqueID, FriendlyByteBuf buf){
return new ForModFileRequest(modID);
}
}
/**
* A Unique ID for the referenced File.
* <p>
@ -91,7 +109,9 @@ public class AutoSyncID {
if (ForDirectFileRequest.MOD_ID.equals(modID)){
return ForDirectFileRequest.finishDeserialize(modID, uID, buf);
} else {
} else if (ForModFileRequest.UNIQUE_ID.equals(uID)){
return ForModFileRequest.finishDeserialize(modID, uID, buf);
} else{
return new AutoSyncID(modID, uID);
}
}

View file

@ -260,6 +260,14 @@ public class HelloClient extends DataHandler.FromServer {
}
}
@Environment(EnvType.CLIENT)
private void processModFileSync(final List<AutoSyncID> filesToRequest) {
for (Entry<String, String> e : modVersion.entrySet()) {
String ver = PathUtil.getModVersion(e.getKey());
BCLib.LOGGER.info(" - " + e.getKey() + " (client=" + ver + ", server=" + ver + ")");
}
}
@Environment(EnvType.CLIENT)
@Override
@ -279,11 +287,9 @@ public class HelloClient extends DataHandler.FromServer {
final List<AutoSyncID> filesToRequest = new ArrayList<>(2);
final List<AutoSyncID.ForDirectFileRequest> filesToRemove = new ArrayList<>(2);
for (Entry<String, String> e : modVersion.entrySet()) {
String ver = PathUtil.getModVersion(e.getKey());
BCLib.LOGGER.info(" - " + e.getKey() + " (client=" + ver + ", server=" + ver + ")");
}
processModFileSync(filesToRequest);
processSingleFileSync(filesToRequest);
processAutoSyncFolder(filesToRequest, filesToRemove);