internal static void SyncClientMods(BinaryReader reader) {
AllowVanillaClients = reader.ReadBoolean();
Main.statusText = "Syncing Mods";
var clientMods = ModLoader.LoadedMods;
var modFiles = ModLoader.FindMods();
var needsReload = false;
downloadQueue.Clear();
var syncSet = new HashSet<string>();
var blockedList = new List<ModHeader>();
int n = reader.ReadInt32();
for (int i = 0; i < n; i++)
{
var header = new ModHeader(reader.ReadString(), new Version(reader.ReadString()), reader.ReadBytes(20), reader.ReadBoolean());
syncSet.Add(header.name);
var clientMod = clientMods.SingleOrDefault(m => m.Name == header.name);
if (clientMod != null)
{
if (header.Matches(clientMod.File))
continue;
header.path = clientMod.File.path;
}
else
{
var disabledVersions = modFiles.Where(m => m.name == header.name).ToArray();
var matching = disabledVersions.FirstOrDefault(header.Matches);
if (matching != null)
{
ModLoader.EnableMod(matching);
needsReload = true;
continue;
}
if (disabledVersions.Length > 0)
header.path = disabledVersions[0].path;
}
if (downloadModsFromServers && (header.signed || !onlyDownloadSignedMods))
downloadQueue.Enqueue(header);
else
blockedList.Add(header);
}
foreach (var mod in clientMods)
if (mod.Side == ModSide.Both && !syncSet.Contains(mod.Name))
{
ModLoader.DisableMod(mod.File);
needsReload = true;
}
if (blockedList.Count > 0)
{
var msg = "The following mods are installed on the server but cannot be downloaded ";
msg += downloadModsFromServers
? "because you only accept mods signed by the mod browser"
: "because you have disabled automatic mod downloading";
msg += ".\nYou will need to change your settings or acquire the mods from the server owner.\n";
foreach (var mod in blockedList)
msg += "\n " + mod;
ErrorLogger.LogMissingMods(msg);
return;
}
if (downloadQueue.Count > 0)
DownloadNextMod();
else
OnModsDownloaded(needsReload);
}