Terraria.ModLoader.ModNet.SyncClientMods C# (CSharp) Method

SyncClientMods() static private method

static private SyncClientMods ( BinaryReader reader ) : void
reader BinaryReader
return void
		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);
		}