Skip to content
faith261005Public

About

修复pcl新版无法下载minecraft本体脚本

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

PCL 下载功能修复补丁

恢复 PCL 2 启动器被移除的「下载」页与「整合包安装」功能

📖 详细图文手册:docs/使用说明.md —— 含完整步骤、10 条故障排除、跨机器拷贝指南


⚠️ 使用前必读

  • 仅供个人自用。请勿倒卖、二次分发或用于商业用途。

  • 本补丁绕过的是 PCL 作者出于合规考量主动加入的限制。官方更新说明原文:

    为遵守相关法律法规,PCL 不再提供 MC 下载功能,非常抱歉 qwq……

    使用本补丁的风险由使用者自行承担。

  • 补丁会修改 PCL 主程序的可执行文件。工具会自动备份原文件,但建议你自己也留一份。

  • 下载的游戏文件来自 Mojang 官方服务器,与官方启动器一致。请使用正版账号登录。


这是什么

从 PCL 2.99.0.0 开始,作者在代码里把「下载」页的加载器整个替换成了一个直接抛异常的占位实现,同时把「整合包安装」入口也加了硬拦截。

因为控制开关是一个编译期常量(Const),编译器把它内联后删掉了正常分支,所以:

  • ❌ 更换下载源 / 镜像源 —— 无效
  • ❌ 清理缓存 —— 无效
  • ❌ 修改配置文件 —— 无效

必须在 IL(中间语言)层面修改。本工具做的就是这件事。

补丁改了什么

位置 改动
PageDownloadInstall.LoaderInit 把「抛异常的 LoaderTask」替换为真实的 ModDownload.DlClientListLoader
ModModpack.ModpackInstall 重建两个被编译器删空的重载:无参入口恢复「选文件 → 安装」,3 参重载恢复完整的 Select Case PackType 分发,接回全部 7 个 InstallPack* 安装器
  • 下载页仍是原地等长替换;
  • 整合包修复在 PE 文件中新增一个节存放重建的方法体,并重定向方法 RVA。文件会增大约 2 KB,所有原有 RVA 不变,不影响重定位表、资源与 PCL 其它功能。

⚠️ 旧版补丁只把整合包入口的「拦截闸门」改成 nop,但那段代码本身已被编译器判定为不可达而删除,Select Case 分发从未被恢复 —— 也就是说压缩包/整合包下载此前一直是坏的。本版才真正修好。

验证情况

本版重建逻辑已通过:

  • Mono.Cecil 重新解析:IL 指令、switch 的 10 个目标、异常处理表 3 个子句边界、leave 目标、全部元数据 token 均正确;
  • 与官方 ModModpack.vb 源码逐行核对:Select Case PackType 的 7 路映射与参数完全一致;
  • 真实启动 PCL:进程稳定存活、responding=True、无崩溃转储 —— 新增 PE 节被 Windows 加载器接受,手写 IL 合法;
  • 从发布 ZIP 解压后端到端复跑:输出与已验证产物逐字节一致,且重复运行幂等。

自动化的 IL/启动验证无法覆盖「点击按钮后的图形界面交互」。建议你在自己电脑上用任意一个 .zip 整合包点一次「安装整合包」做最终确认(下载页 → 整合包安装,或拖 zip 进 PCL,或「手动安装整合包」按钮)。


使用方法

第 1 步:解压

下载本仓库的 PCL-patch.zip,解压到任意目录。

💡 建议放在简单路径下,例如 C:\PCL-patch\。 不建议放在 Downloads、带空格或中文很长的目录里。

第 2 步:解除文件锁定(首次必做)

从网上下载的 ZIP 解压出来的文件,会被 Windows 打上「来自 Internet」标记, 导致 .NET 拒绝加载其中的 DLL,报错:

未能加载文件或程序集"…\tools\Mono.Cecil.dll"或它的某一个依赖项。
不支持操作。(异常来自 HRESULT:0x80131515)

解决方法:在解压后的目录中打开 PowerShell,执行

Get-ChildItem -LiteralPath '解压后的路径' -Recurse -File | Unblock-File

例如:

Get-ChildItem -LiteralPath 'C:\PCL-patch' -Recurse -File | Unblock-File

也可以:右键 ZIP → 属性 → 勾选「解除锁定」→ 确定 → 再解压。

第 3 步:完全退出 PCL

关闭主窗口,并检查右下角托盘区没有 PCL 图标(常见失败原因)。

第 4 步:运行

双击 apply-patch.bat。

看到以下两行即成功:

[OK] 复核:下载页已接回真实加载器
[OK] 复核:整合包安装分发已恢复

然后重新打开 PCL → 左侧「下载」→ 应该能看到版本列表。

还原为官方原版

双击 restore-original.bat,会从备份文件还原。


环境要求

要求 说明
操作系统 Windows 10(2016+)/ Windows 11 开箱即用
Windows 7 / 8.1 需先装 WMF 5.1
PowerShell 5.1 或更高(Win10/11 自带)
.NET Framework 4.8(PCL 本身就需要,能跑 PCL 就一定满足)
磁盘权限 PCL 若装在 Program Files 下,需以管理员身份运行

常见问题

报错 HRESULT:0x80131515 / 未能加载 Mono.Cecil.dll

文件被 Windows 标记为「来自 Internet」。见上文「第 2 步:解除文件锁定」。

提示「文件被占用」/ cannot access the file

PCL 还在运行。常见原因是托盘图标没退。

  1. 关闭 PCL 主窗口
  2. 检查屏幕右下角托盘区,右键退出 PCL
  3. 任务管理器结束所有 Plain Craft Launcher 2 进程
  4. 重试

脚本遇到这种情况会安全退出,不会把文件改坏。

双击 bat 窗口一闪而过

通常是文件不完整。确认目录结构如下:

PCL-patch\
  ├─ apply-patch.bat
  ├─ restore-original.bat
  ├─ Patch-PCL.ps1
  └─ tools\
       ├─ Mono.Cecil.dll
       ├─ patchcode.b64
       └─ Rebuild-Modpack.ps1
提示「禁止运行脚本」/ about_Execution_Policies

不要直接双击 .ps1。两个 .bat 已内置 -ExecutionPolicy Bypass, 只对本次运行生效,不会修改系统设置。

提示 type PCL.PageDownloadInstall not found / refusing to patch

目标文件不是 PCL,或版本结构差异过大。

这是安全保护:结构校验不通过时拒绝修改,原文件保持不动。 请确认 -PclPath 指向的是真正的 PCL 主程序,并核对下方版本兼容性。

提示「当前文件无需修改」

两种情况之一:已经打过补丁了,或该版本本身没有这个限制。无需操作。

杀毒软件报警

工具需要改写 exe 字节,属于启发式误报。添加信任即可。 修改是原地等长的,文件会略微增大(新增一个 PE 节)。

打完补丁 PCL 打不开了

立刻双击 restore-original.bat 还原,即可回到官方原版。


版本兼容性

工具按代码结构定位,不写死地址,因此跨机器、跨路径都能用。

已实测构建

PCL 版本 文件大小 状态 说明
2.99.0.0 5980160 字节 ✅ 已验证 原版 / 补丁后哈希见下表
其它 2.x 视情况 ⚠️ 需验证 结构相同则成功,否则安全中止

哈希对照(2.99.0.0)

状态 SHA256
官方原版(备份) 6B6E1260CB5A1D6A303855F1C60CAB3D0BC1AEBBA7E40A964180188B271E7386
补丁后(旧版,仅下载页) 5992425A0ECD39ABB8A5FD8F96BCB5AE3BB5A132ABFB7641CD866EA3B0D65F63
补丁后(本版,下载页 + 整合包,5982208 字节) B54BE96B4C43EB7AE3608BD034DC60463043EB59B806BD4C5B46891A8BE08447

自查命令:

Get-FileHash "Plain Craft Launcher 2.exe" -Algorithm SHA256

兼容性判断

  • ✅ 同一版本,在任何电脑上都适用
  • ✅ 结构相同的新版本,通常也能成功
  • ⚠️ 结构不同 → 安全中止,不会损坏文件

内置的两道守卫

  1. PageLoaderInit 必须是 8 参数的实例方法
  2. 替换区间内必须确实存在 LoaderTask 的构造指令

任一不满足即中止,原文件保持原样。

跨机器实测结果

场景 结果
换盘符 / 中文路径 / 带空格路径 ✅ 通过
从任意工作目录调用 ✅ 通过
指向错误的 exe 文件 ✅ 安全中止,文件未变
指向非 .NET 程序 ✅ 安全中止,文件未变
文件带 Internet 锁定标记 ✅ 自动解除后正常

如果你文件大小不是 5980160 字节,说明是不同构建。运行脚本后留意输出的 PCL version 与守卫检查结果;若中止,把输出反馈过来即可适配。


PCL 更新后怎么办

PCL 自动更新会用官方文件覆盖本补丁,下载功能会重新失效。

重新运行一次 apply-patch.bat 即可。

建议在 PCL 设置中关闭「自动更新」,避免补丁被静默覆盖。


文件说明

文件 作用
apply-patch.bat 双击 = 打补丁
restore-original.bat 双击 = 还原官方原版
Patch-PCL.ps1 主脚本(实际逻辑)
tools/Mono.Cecil.dll .NET 元数据解析库(只读分析)
tools/patchcode.b64 下载页补丁逻辑(C# 源码编码形式)
tools/Rebuild-Modpack.ps1 整合包安装重建逻辑(动态定位 + 幂等)

技术说明

本项目不修改源码重新编译,原因是官方开源版本为删减版: ModSecret.vb 中注明「部分代码已被删除」,更新功能、赞助功能均为空实现, 微软登录 ClientId 与 CurseForge API Key 也是空的,编译产物无法替代官方版本。

因此采用直接改写 IL 字节的方式:

  1. 使用 Mono.Cecil 只读分析,取得方法 RVA、元数据 token 与替换区间(全部动态推算)
  2. 下载页:在 .text 段内原地等长替换字节
  3. 整合包:重建两个方法体写入新增 PE 节,重定向 MethodDef RVA,并重算异常处理表偏移
  4. 修改后重新用 Cecil 解析校验,确认下载页与整合包分发均已生效

免责声明

本项目与 PCL 官方(龙腾猫跃)无任何关联,非官方作品。

一切使用后果由使用者自行承担。若你认同作者的处理方式,请支持官方版本。

About

修复pcl新版无法下载minecraft本体脚本

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors