public override List <DownloadItem> GetAllItemsToDownload() { var l = new List <DownloadItem>(); using (WebClient wc = new WebClient()) { var json = wc.DownloadString(MinecraftVersionManifestURL); var matches = Regex.Matches(json, "{\"id\": \"(.*?)\", \"type\": \"(.*?)\"," + " \"url\": \"(.*?)\", \"time\": \"(.*?)\"," + " \"releaseTime\": \"(.*?)\"}"); foreach (Match m in matches) { var e = m.Groups.GetEnumerator(); var glist = EnumeratorUtils.MakeListFromEnumerator(e); var id = ((Group)glist[1]).Value; var type = ((Group)glist[2]).Value; var url = ((Group)glist[3]).Value; var releaseTime = ((Group)glist[5]).Value; var vi = new MinecraftDownloadItem(UseBMCLAPI, MinecraftFolderName, id, type, url, releaseTime); l.Add(vi); } } return(l); }
public override List <DownloadItem> GetAllItemsToDownload() { var list = new List <DownloadItem>(); using (var wc = new WebClient()) { var manifestUrl = string.Format( "http://files.minecraftforge.net/maven/net/minecraftforge/forge/index_{0}.html", MCVersion.VersionName ); var htmllist = wc.DownloadString(manifestUrl); var matches = Regex.Matches(htmllist, "<tr>\\n\\s*?<td class=\"download-version\">\\n\\s*(.*?)\\n"); foreach (Match match in matches) { var groups = EnumeratorUtils.MakeListFromEnumerator(match.Groups.GetEnumerator()); var version = ((Group)groups[1]).Value; var mc = this.MCVersion.VersionName; var url = string.Format( "http://files.minecraftforge.net/maven/net/minecraftforge/forge/{0}-{1}/forge-{0}-{1}-universal.jar", mc, version ); list.Add(new ForgeDownloadItem(this.MCVersion, version, url, this.UseBMCL)); } } return(list); }
public IEnumerator Init(IProgress <float> progress) { valuesStore = new BlockValuesStore(); var enumerator = EnumeratorUtils.ReportForeachOperation(blockTemplateBag, RegisterBlockTemplate, progress); while (enumerator.MoveNext()) { yield return(enumerator.Current); } }
/// <summary> /// <p>Builds a list of item-item correlations given an {@link ItemCorrelation} implementation and a /// <see cref="DataModel">DataModel</see>, rather than a list of {@link ItemItemCorrelation}s.</p> /// <p>It's valid to build a <see cref="GenericItemCorrelation"/> this way, but perhaps missing some of the point /// of an item-based Recommender. Item-based recommenders use the assumption that item-item correlations /// are relatively fixed, and might be known already independent of user preferences. Hence it is useful /// to inject that information, using {@link GenericItemCorrelation(java.util.Collection)}.</p> /// </summary> /// <param name="otherCorrelation">otherCorrelation other {@link ItemCorrelation} to get correlations from</param> /// <param name="dataModel">dataModel data Model to get {@link Item}s from</param> public GenericItemCorrelation(ItemCorrelation otherCorrelation, DataModel dataModel) { List <Item> items = EnumeratorUtils.EnumerableToList <Item>(dataModel.GetItems()); int size = items.Count; for (int i = 0; i < size; i++) { Item item1 = items[i]; for (int j = i + 1; j < size; j++) { Item item2 = items[j]; double correlation = otherCorrelation.GetItemCorrelation(item1, item2); Dictionary <Item, Double> map = null; if (!correlationMaps.TryGetValue(item1, out map)) { map = new Dictionary <Item, Double>(1009); correlationMaps.Add(item1, map); } map.Add(item2, correlation); } } }
public static void Visit <T>(this IEnumerator <T> enumerator, Action <T> visitor) { EnumeratorUtils.Visit(enumerator, visitor); }
public static void Visit <T>(this IEnumerator <T> enumerator, Func <T, bool> visitor) { EnumeratorUtils.Visit(enumerator, visitor); }
public static void MoveToEnd(this IEnumerator enumerator) { EnumeratorUtils.MoveToEnd(enumerator); }
public static IEnumerable <object> Enumerate(this IEnumerator enumerator) { return(EnumeratorUtils.Enumerate(enumerator)); }
public static IEnumerable <T> Enumerate <T>(this IEnumerator <T> enumerator) { return(EnumeratorUtils.Enumerate(enumerator)); }
public override void Download() { bool NeedBranchName = !NetUtils.IsUrlExists(Url); if (NeedBranchName) { Url = string.Format( "http://files.minecraftforge.net/maven/net/minecraftforge/forge/{0}-{1}-{0}/forge-{0}-{1}-{0}-universal.jar", MCVersion.VersionName, ForgeVersion ); } if (UseBMCL) { Url = Url.Replace("files.minecraftforge.net", "bmclapi2.bangbang93.com"); } OnProgressChanged("正在检查launchwrapper安装情况并确保安装", 0); MCVersion.InstallLaunchWrapper(); string jarfile, folder; if (NeedBranchName) { jarfile = string.Format("forge-{0}-{1}-{0}.jar", this.MCVersion.VersionName, this.ForgeVersion); folder = string.Format("net/minecraftforge/forge/{0}-{1}-{0}/", this.MCVersion.VersionName, this.ForgeVersion); } else { jarfile = string.Format("forge-{0}-{1}.jar", this.MCVersion.VersionName, this.ForgeVersion); folder = string.Format("net/minecraftforge/forge/{0}-{1}/", this.MCVersion.VersionName, this.ForgeVersion); } var location = folder + jarfile; var realLocation = LauncherMain.Instance.Settings.MinecraftFolderName + "libraries\\" + location.Replace('/', '\\'); var realFolder = LauncherMain.Instance.Settings.MinecraftFolderName + "libraries\\" + folder.Replace('/', '\\'); if (!Directory.Exists(realFolder)) { Directory.CreateDirectory(realFolder); } using (var wc = new WebClient()) { OnProgressChanged("开始下载" + jarfile, 0); bool downloaded = false; wc.DownloadFileCompleted += (o, e) => { downloaded = true; wc.Dispose(); }; wc.DownloadProgressChanged += (o, e) => OnProgressChanged(null, e.ProgressPercentage); wc.DownloadFileAsync(new Uri(this.Url), realLocation); while (!downloaded) { Thread.Sleep(100); } } var zip = ZipFile.Open(realLocation, ZipArchiveMode.Read); var versionlistentry = zip.GetEntry("version.json"); var sr = new StreamReader(versionlistentry.Open()); var json = sr.ReadToEnd(); sr.Close(); zip.Dispose(); var matches = Regex.Matches(json, "\"name\"\\s*:\\s*\"(.*?)\""); var manifest = MinecraftManifest.AnalyzeFromVersion(MCVersion); int needDownload = 0; int downloadedCount = 0; foreach (Match match in matches) { var groups = EnumeratorUtils.MakeListFromEnumerator(match.Groups.GetEnumerator()); var libname = ((Group)groups[1]).Value; var names = new List <string>(libname.Split(':')); if (names[1] != "launchwrapper") { manifest.libraries.RemoveAll(m => { var ns = m.name.Split(':'); return(ns[1] == names[1]); }); var fnames = names[0].Split('.'); names.RemoveAt(0); names.InsertRange(0, fnames); string url; if (this.UseBMCL) { url = "http://bmclapi2.bangbang93.com/maven/"; } else { if (Regex.IsMatch( json, string.Format( "\"name\"\\s*:\\s*\"{0}\"\\n" + "\\s*?\"url\"\\s*:\\s*\"http://files\\.minecraftforge\\.net/maven/\"", libname.Replace(".", "\\.") ) )) { url = "http://files.minecraftforge.net/maven/"; } else { url = "https://libraries.minecraft.net/"; } } url += string.Join("/", names); var jarname = names[names.Count - 2] + "-" + names[names.Count - 1] + ".jar"; url += "/" + jarname; var localDir = LauncherMain.Instance.Settings.MinecraftFolderName + "libraries\\" + string.Join("\\", names) + "\\"; if (!Directory.Exists(localDir)) { Directory.CreateDirectory(localDir); } var localLoc = localDir + jarname; if (!File.Exists(localLoc)) { var wc = new WebClient(); wc.DownloadFileCompleted += (o, e) => { downloadedCount++; OnProgressChanged(jarname + "已下载", (int)(downloadedCount / (double)needDownload * 100)); wc.Dispose(); }; wc.DownloadProgressChanged += (o, e) => Debug.WriteLine(string.Format("{0} Downloaded {1}", jarname, e.ProgressPercentage)); wc.DownloadFileAsync(new Uri(url), localLoc); } var library = new MinecraftLibrary { name = libname }; manifest.libraries.Add(library); needDownload++; } } while (needDownload != downloadedCount) { Thread.Sleep(100); } if (manifest.arguments == null) { manifest.minecraftArguments += " --tweakClass cpw.mods.fml.common.launcher.FMLTweaker"; } else { manifest.arguments.game.Add("--tweakClass"); manifest.arguments.game.Add("cpw.mods.fml.common.launcher.FMLTweaker"); } MCVersion.SaveManifest(manifest); }
public override List <DownloadItem> GetAllItemsToDownload() { var list = new List <DownloadItem>(); var manifest = MinecraftManifest.AnalyzeFromVersion(this.Version); var id = manifest.id; downloadVersionInfos = new List <OptifineDownloadItem>(); using (var wc = new WebClient()) { if (UseBMCL) { var jsonurl = string.Format(BMCLAPI_OPTIFINE_LIST_FORMAT, id); var seri = new JavaScriptSerializer(); var itemList = seri.Deserialize <List <BMCLOptifineDownloadItem> >( wc.DownloadString(jsonurl) ); foreach (var item in itemList) { var MCVersion = this.Version; var Type = item.type; var Patch = item.patch; var Url = string.Format( "https://bmclapi2.bangbang93.com/optifine/{0}/{1}/{2}", item.mcversion, item.type, item.patch ); var listItem = new OptifineDownloadItem(MCVersion, Type, Patch, Url); downloadVersionInfos.Add(listItem); list.Add(listItem); } } else { var downloads = wc.DownloadString(OPTIFINE_OFFICAL_DOWNLOADS); Match main = Regex.Match( downloads, string.Format("<h2>Minecraft {0}</h2>((.|\n)*?)</table>", id.Replace(".", "\\.")) ); MatchCollection matches = Regex.Matches( main.Value, "<tr class='downloadLine.*?'>\\n<td class='downloadLineFile.*?'>(.*?)</td>\\n<td class='downloadLineDownload.*?'><a href=.*?>Download</a></td>\\n<td class='downloadLineMirror'><a href=\"(.*?)\"> \\(mirror\\)</a></td>" ); foreach (Match match in matches) { var groups = EnumeratorUtils.MakeListFromEnumerator( match.Groups.GetEnumerator() ); var name = ((Group)groups[1]).Value; var mirror = ((Group)groups[2]).Value; var t = EnumeratorUtils.MakeListFromEnumerator( Regex.Match( mirror, "http://optifine.net/adloadx\\?f=(.*)" ).Groups.GetEnumerator() ); var jar = ((Group)t[1]).Value; var adsite = wc.DownloadString(mirror); var uri = Regex.Match(adsite, string.Format("downloadx\\?f={0}&x=.*?'", jar.Replace(".", "\\."))).Value; uri = uri.Substring(0, uri.Length - 1); var url = "https://optifine.net/" + uri; var args = name.Split(' '); var type = args[2] + "_" + args[3]; var patch = args[4]; var info = new OptifineDownloadItem(Version, type, patch, url); downloadVersionInfos.Add(info); list.Add(info); } } } return(list); }