大家好我是皇鱼,又复活了
今天我们讲一下Forge的下载与启动
那么开始
非常感谢bmclapi使我的下载速度提升
获取Forge支持的版本列表
https://files.minecraftforge.net/net/minecraftforge/forge/index_1.2.4.html访问这个页面,获取其源码,使用正则表达式匹配<a href="index_1.3.2.html">这样的字段,提取其中1.3.2的值。
这篇文章中并没有介绍1.5.1及以下没有安装器版本的安装方法,感兴趣的可以去翻翻pcl和hmcl源代码
C#代码示例:
public static async Task<List<string>> GetForgeVersionList()
{
var versionList = new List<string>();
var html = await HttpUtils.GetString("https://files.minecraftforge.net/net/minecraftforge/forge/index_1.2.4.html");
string pattern = @"<a href=""index_([^""]+(?:\.[^""]+){1,2})\.html"">";
// string pattern = @"<a href=""index_(\d+\.\d+\.\d+)\.html"">";
MatchCollection mc = Regex.Matches(html, pattern);
foreach (Match m in mc)
{
versionList.Add(m.Groups[1].Value);
}
return versionList;
}看其中的注释部分,为什么不用注释掉的那一行呢
因为有个1.7.10-pre4。。。
mojang不是人
BMCLAPI
直接请求https://bmclapi2.bangbang93.com/forge/minecraft,返回一个json数组
获取Forge版本列表
(使用官方源获取过于抽象,只能硬生生解析HTML,建议使用bmclapi)
首先,访问https://files.minecraftforge.net/net/minecraftforge/forge/index_${mc版本号}.html
如果版本是1.7.10-pre4,要把-替换成_
然后,找到下面这一段
你要的所有信息都在这里了,注意<i class="promo-latest fa" aria-hidden="true"></i>
如果是latest(该mc版本的最后一个forge),则会显示promo-latest
如果是recommend(推荐版),则会显示promo-recommend
也会出现两者皆有的情况,分别contains就行了,参考下面代码
代码示例
class VersionInfo
{
public string Version { get; set; }
public string ReleaseDate { get; set; }
public bool IsRecommended { get; set; }
public bool isLatest { get; set; }
}
static List<VersionInfo> ParseHtml(string html)
{
var versionInfoList = new List<VersionInfo>();
string[] lines = html.Split(new[]{"\n", "\r\n"}, StringSplitOptions.RemoveEmptyEntries);
bool inVersion = false;
string ver = "";
string time = "";
bool recommended = false;
bool latest = false;
for (int i = 0; i < lines.Length; i++)
{
if(i + 1 >= lines.Length) break;
if (lines[i].Contains("class=\"download-version\"") && !inVersion)
{
inVersion = true;
ver = lines[i + 1].Trim();
}
if (lines[i].Contains("promo-recommended") && inVersion)
{
recommended = true;
}
if (lines[i].Contains("promo-latest") && inVersion)
{
latest = true;
}
if(lines[i].Contains("class=\"download-time\"") && inVersion){
time = Between(lines[i], "title=\"", "\"").Trim();
versionInfoList.Add(new VersionInfo{
Version = ver,
ReleaseDate = time,
IsRecommended = recommended,
isLatest = latest
});
inVersion = false;
recommended = false;
latest = false;
time = "";
ver = "";
}
}
return versionInfoList;
}
static string Between(string source, string start, string end)
{
int startIndex = source.IndexOf(start) + start.Length;
int endIndex = source.IndexOf(end, startIndex);
if (startIndex >= start.Length && endIndex > startIndex)
{
return source.Substring(startIndex, endIndex - startIndex);
}
return "";
}BMCLAPI
访问这个url https://bmclapi2.bangbang93.com/forge/minecraft/${mc版本}
返回如下数组
[
{
"branch": "1.9",
"build": 1766,
"mcversion": "1.9",
"modified": "2016-03-18T07:44:28.000Z",
"version": "12.16.0.1766",
"_id": "57047535e914dfb05c6a346f",
"files": [
{
"format": "zip",
"category": "mdk",
"hash": "a6612cab2c4ae3c3bba0acc089bbffc1",
"_id": "57047535e914dfb05c6a3475"
},
{
"format": "txt",
"category": "changelog",
"hash": "e67f1af901089faf424b5e98b02d44a9",
"_id": "57047535e914dfb05c6a3474"
},
{
"format": "jar",
"category": "universal",
"hash": "da088a119849ea5cee274d116e2614b1",
"_id": "57047535e914dfb05c6a3473"
},
{
"format": "jar",
"category": "userdev",
"hash": "f681db67f356e912a7baff1fa440c2a4",
"_id": "57047535e914dfb05c6a3472"
},
{
"format": "exe",
"category": "installer-win",
"hash": "ee4cce09bcfd70aa87884c5c96f46871",
"_id": "57047535e914dfb05c6a3471"
},
{
"format": "jar",
"category": "installer",
"hash": "e4e0b0e1af095519e21de667f6f30b33",
"_id": "57047535e914dfb05c6a3470"
}
]
}
]下载安装器
https://maven.minecraftforge.net/net/minecraftforge/forge/${mcVer}-${forgeVer}/forge-${mcVer}-${forgeVer}-installer.jar上述是forge安装器的下载链接,将${mcVer}和${forgeVer}分别替换成mc版本和forge版本,但是建议用上面获取的
BMCLAPI可以参考https://bmclapidoc.bangbang93.com/#api-Forge-ForgeDownload
下载下来后,解压,获取其中的install_profile.json
获取libraries数组,按照原版的方法解析它
未完待续
(这东西真的太抽象了)
参考资料
Minecraft Wiki:https://zh.minecraft.wiki
Forge:https://files.minecraftforge.net/
BMCLAPI:https://bmclapidoc.bangbang93.com/
PCL2源码:https://github.com/Hex-Dragon/PCL2
最后修改:2025-05-06 16:49
本文链接:https://blog.huangyu.win/index.php/archives/42/
版权声明:本文 如何编写一个Minecraft Java版启动器 | Part 2 Forge下载 (1) | 3-2 为 皇鱼 原创。著作权归作者所有,如无特殊声明,本文将依据CC BY-NC-SA 4.0发布,请注意版权。
转载说明:请依据CC BY-NC-SA 4.0进行转载。

1 条评论
确实挺抽象的