PCL 2.99 二改记录:恢复 Minecraft 本体下载,移除启动器自更新
好久没更新博客了。
这次想写的不是一个从零开始的新项目,而是前段时间折腾的一件小事:我给 PCL 2.99.0.0 做了一个个人二改版本,把 Minecraft 本体下载入口恢复了回来,同时把启动器自更新相关的残留链路彻底移除。
先把话说在前面:这是非官方构建,和 PCL 官方团队没有任何关系。 文章记录的是我自己的源码修改、构建过程和成品校验结果,不代表官方立场。
本文提到的二改版基于 PCL 2.99.0.0 源码修改,不是 PCL 官方发布版本,也不包含任何 Minecraft 游戏本体文件。
如果你只准备使用官方版本,请直接前往 PCL 官方网站获取。二改版仅用于个人学习、研究和自身使用场景。
所需文件与下载地址
- PCL 2.99 二改版(单文件 EXE)
- 网盘下载:
- 说明:打开后请先确认地址栏域名是
cloud.jiugg.cn,再下载文件 - 校验:文件大小和 SHA256 见下方“下载与文件校验”
先说结论
这次改动主要就两件事:
- 恢复 Minecraft 本体下载入口。 原版通过
RestrictMcDownload = True屏蔽了相关入口,我把它改回False,原本就存在的下载与安装流程随之恢复。 - 移除启动器自更新链路。 不只是删除设置页里的按钮,而是把更新区域、事件、启动参数、启动加载器、退出重启、更新日志和相关提示一起清理掉。
最终成品是单文件 EXE,压缩包里只有一个 Plain Craft Launcher 2.exe。启动器不会检查新版本,不会弹更新提示,也不会在退出后替换自身。
需要特别说明的是:恢复 Minecraft 下载,不等于重新实现了一个下载器。 下载、安装、整合包处理这些代码原本就完整存在于 PCL 源码中,只是被一个功能开关挡住了。我做的只是把开关恢复,并没有绕开官方下载源,也没有把游戏文件塞进启动器。
为什么会有这个二改
前段时间,PCL 2.99.0.0 不再提供 Minecraft 本体下载入口。具体原因我不清楚,所以这篇文章不猜,也不替官方解释。
我看到的实际问题是:对一部分用户来说,启动器仍然能管理和启动已有游戏,但想重新下载一个版本时会发现入口不见了。既然源码里下载逻辑还在,只是被 RestrictMcDownload 这个开关拦住,那么在自己的构建里把入口恢复,就是一个比较直接的解决办法。
另一个问题则是更新。PCL 2.99.0.0 的更新实现其实已经变成了提示或空方法,但源码里仍然留着设置页、关于页、事件枚举、启动参数、启动加载和退出重启等入口。它们未必真的会完成更新,却会让“这个版本到底还会不会更新”变得不够明确。
所以这次二改的目标很明确:
- 游戏下载功能要能用;
- 启动器更新链路要真的不存在;
- 最终分发尽量简单,只给一个 EXE;
- 所有改动都要能解释清楚,不靠猜。
恢复 Minecraft 本体下载
关键改动只有一行,位置在 Modules\ModSecret.vb。
原版:
Public Const RestrictMcDownload As Boolean = True
二改版:
Public Const RestrictMcDownload As Boolean = False
这行代码的意义不是“打开一个隐藏彩蛋”,而是解除源码中对 Minecraft 下载功能的统一限制。
PCL 里多个位置都会读取这个值。例如下载安装页会根据它决定是否抛出“暂时不再提供 MC 下载功能”的异常,整合包安装入口也会做类似检查。因此把它改回 False 之后,原有的下载、安装和整合包流程就重新走通了。
这里有两个边界需要讲清楚:
- 恢复的是启动器入口和原有流程,不是破解 Minecraft,也不是提供盗版游戏文件。
- 实际下载仍然走 PCL 原本使用的官方或镜像来源,二改版没有内置游戏资源。
换句话说,这更像是把一扇原本装好的门重新打开,而不是另外造了一扇门。
把启动器更新链路整段移除
如果只是把“检查更新”按钮隐藏,代码里仍然可能保留事件、参数和调用入口。这样的处理我不太满意,所以这次是把整条链路一起清理。
1. 清空更新核心区域
Modules\ModSecret.vb 里的更新区域现在只保留一句说明:
#Region "更新" '启动器自动更新功能已从构建中彻底移除。 #End Region
原本用于检查、下载、替换和重启的方法都不再保留。
2. 替换联网配置加载器
原版启动时会调用 ServerLoader.Start(),这个加载器与联网配置和更新检查有关。二改版把它换成了一个兼容占位对象,只记录“联网配置加载已停用”,不下载公告、不读取更新版本,也不触发替换。
这样既不会因为删除对象导致其它代码编译失败,也不会真的去访问更新服务器。
3. 删除 --update 启动参数
原版启动逻辑里可以识别 --update,用于进入更新替换流程。二改版只保留 --gpu、--memory、--wait 等正常参数,不再识别 --update。
即使外部程序仍然传入这个旧参数,也不会进入任何更新流程。
4. 删除启动加载与退出重启
FormMain.xaml.vb 中原本有两处关键调用:
- 启动时的
ServerLoader.Start(); - 退出时的
If IsUpdateWaitingRestart Then UpdateRestart(False)。
这两处都已经删除。启动器启动时不会加载更新配置,退出时也不会检查“等待更新重启”状态。
5. 删除更新 UI 和更新日志
设置页里的“启动器更新”下拉框、“检查更新”按钮,以及关于页里的更新按钮都已经移除。对应的选择变更和点击事件也一并删除。
版本升级时原本还会调用 ShowUpdateLog 显示更新日志。这个方法及其调用同样已经删除。正常的设置迁移仍然保留,但不会再把更新日志弹窗误当成更新提示。
6. 强制视为当前版本
设置页里的 IsLauncherNewest() 现在直接返回 True:
Public Shared Function IsLauncherNewest() As Boolean?
'自动更新通道已移除,始终视为当前版本。
Return True
End Function
这样即使旧配置或其它页面查询“是否最新版”,也不会再触发更新引导。
7. 清理残留事件和提示
此外还删除了 EventType.检查更新 枚举值及对应分支,并清理了日志、崩溃报告、反馈页面和联机错误提示中“更新 PCL 或许能解决”之类的引导。
这些提示本身不一定能触发更新,但既然构建目标是不包含启动器更新,就没有必要继续保留。
怎么确认不是“只删了一个按钮”
源码改完之后,我做了几轮检查。
第一轮是源码入口扫描。在排除 obj、bin 等生成目录后,搜索下面这些标识,没有发现可执行入口:
UpdateCheckByButton IsUpdateWaitingRestart UpdateRestart UpdateReplace DownloadLatestPCL ServerLoader.Start --update EventType.检查更新
第二轮是成品二进制扫描。对最终 EXE 的 ASCII 和 UTF-16 字符串进行检查,上述启动器更新标识均为 0 次。
这里有两个容易误判的地方,也顺便说明一下:
- 二进制里仍可能出现
CheckUpdateRelease、CheckUpdateSnapshot,但它们对应的是 Minecraft 正式版/测试版更新提示,属于游戏版本设置,不是启动器自更新。 - 源码里还有一个可选主页预设叫“PCL 更新摘要”,那只是社区主页内容,不会主动检查或替换启动器。除非用户手动选择该主页,否则不会运行。
第三轮是启动日志检查。最终单文件版在空目录中启动成功,日志里没有启动器更新、强制更新或联网配置更新记录。
启动时确实会访问 Mojang 的 version_manifest.json,但这是恢复后的 Minecraft 本体下载功能所需请求,用于获取游戏版本列表,不是 PCL 启动器在检查新版本。这一点我觉得有必要单独讲清楚,免得看到网络请求就误判。
单文件 EXE 是怎么来的
单文件版不是另外写了一个打包器,也不是把依赖 DLL 删掉后假装还能用。
PCL 项目原本就有资源嵌入和程序集解析机制。依赖 DLL 会作为资源嵌入 EXE,运行时 .NET Framework 找不到外部程序集,就会触发 AssemblyResolve,PCL 再从内嵌资源中把程序集加载出来。
所以分发时只需要一个 Plain Craft Launcher 2.exe。压缩包内也确实只有这一个文件。
不过要注意,单文件说的是分发形式。启动器运行后仍然可能在 PCL 目录生成配置、日志、缓存,或者按需释放 libwebp.dll 这类原生组件。这些是运行数据,不代表压缩包里还藏着别的文件。
下载与文件校验
所需文件与下载地址
- PCL 2.99 二改版(单文件 EXE)
- 网盘下载:
- 说明:打开后请先确认地址栏域名是
cloud.jiugg.cn,再下载文件 - 校验:文件大小和 SHA256 见下方表格
本次文章对应的是带二改作者标注版。如果你在其它地方看到转载,请以本站页面给出的地址和校验值为准。
| 项目 | 内容 |
|---|---|
| 文件名 | Plain Craft Launcher 2.exe |
| 版本 | 2.99.0.0 |
| 文件大小 | 5,868,032 bytes |
| SHA256 | DB1621661E8AB680EB7066CCAE328E80AA93D4A1A3BE9BBAA21D5995184F9FDF |
单文件 ZIP:
| 项目 | 内容 |
|---|---|
| 文件名 | PCL-2.99-NoUpdate-Author-PageAnnotation-Single.zip |
| ZIP 内文件 | Plain Craft Launcher 2.exe |
| ZIP 大小 | 2,653,305 bytes |
| ZIP SHA256 | CA383CACF58AE2665F8FDF2065A0E7BFB1F43E6731CBFE652997CCF46ADE20D3 |
下载后可以在 PowerShell 里校验:
Get-FileHash -LiteralPath '.\Plain Craft Launcher 2.exe' -Algorithm SHA256
计算出的值应当与上面的 SHA256 完全一致。
如果你下载的是 ZIP,也可以先校验 ZIP,再解压确认里面只有一个 EXE。压缩包内的 EXE 与单独分发版本的 SHA256 是一致的。
使用说明和已知现象
- 首次启动可能显示用户协议确认窗口,这是正常流程,不是更新提示。
- 如果电脑上已经有 PCL 实例在运行,单实例互斥可能让新实例直接退出,这不代表单文件包损坏。
- 二改版不会自动更新。后续如果官方发布新版本,需要自行决定是否更换回官方版。
- 如果 Windows SmartScreen 或杀毒软件给出提示,请先核对文件来源和 SHA256,不要为了运行程序直接关闭安全防护。
- 建议在替换启动器前备份原有的
PCL配置目录,避免版本切换后需要重新调整设置。
关于版权和修改边界
PCL 原项目版权归原作者及成都瓜皮龙科技有限公司所有。二改版没有冒用官方身份,也没有改写、删除原作者的版权声明来宣称自己拥有版权。
成品文件属性里的 LegalCopyright 字段被清空,只是为了避免二改版继续显示原版权字符串造成混淆,并不表示二改作者取得了原项目版权。文件说明、产品名称和备注等字段则保留了二改版标识。
再次强调:二改版与 PCL 官方无关,不包含 Minecraft 游戏文件,也不提供任何绕过正版验证的能力。
写在最后
这次二改没有多么复杂的“黑科技”,真正花时间的不是改那一行开关,而是把更新相关的残留入口逐一确认、删除和验证。
我对这个版本的定位很简单:
- 想下载 Minecraft 时,入口能用;
- 日常启动游戏时,不被启动器更新打扰;
- 分发时只有一个 EXE,不需要额外带一堆 DLL;
- 所有行为都能从源码和日志里解释清楚。
文章先写到这里。下载地址和校验值都已经放在上面的“下载与文件校验”一节。如果你也在使用这个版本,遇到问题可以在评论区留言,尽量带上系统版本、启动器日志和复现步骤,这样更方便排查。


评论区
评论加载中...