2.13.0.0
Pre-release
Pre-release
完全重做了 Java 选择……!全新的弹出提示!屎山挖掘!巨大更新!啊累死我了……
重要提醒
- 由于 CurseForge 的 新政策,这个版本之前的 PCL 从 7 月 16 日起会无法从 CurseForge 下载资源和整合包!
- 如果你通过把 Java 放在 PCL 所在的文件夹或 Minecraft 文件夹根目录中,来让 PCL 强制使用该 Java,这会在更新后失效!如果想强制使用附带的 Java,请把 Java 放到版本文件夹中,并在版本设置中选择“使用版本文件夹中的 Java”!
Java 管理重做
- 重做全局设置中的 Java 选择:不再是强制指定某个 Java,而是允许对 Java 列表进行排序,并使用第一个兼容当前 MC 的 Java
- 由于此前只能指定一个 Java,导致总有部分 MC 会覆盖不到(例如选一个 Java 不可能同时覆盖需要 Java 21+ 的 1.21 和需要 Java 8 的 OptiFine 1.10),现在改成调整排序后就没这个问题啦
- Java 列表添加了将 Java 移出列表的选项(#874,@FangFuJi1991)
- Mojang 官方的 Java 不允许被移出
- Java 列表添加了打开 Java 所在文件夹的选项
- 全局设置中的 Java 列表挪进了默认折叠的高级选项中
- 自动下载和选择 Java 已经足够成熟,普通玩家大概率不需要考虑这个问题了
- 版本设置的 Java 选择增加了“自动选择指定版本的 Java”选项:允许输入一个 Java 版本范围,PCL 会选择符合该版本范围的 Java 启动该版本,如果没有找到会自动下载
- 部分 Mod 需要特定版本的 Java 才能启动,但此前只能按绝对路径指定 Java 或是直接附带在整合包中,若是按绝对路径指定会在导出后失效,若是附带在整合包中又过于臃肿……现在只需要设置一个版本范围,然后 PCL 就能自动处理好一切了!
- 版本设置中会显示 PCL 即将选择哪个 Java 启动这个版本
- 版本设置的 Java 选择增加了“使用版本文件夹中的 Java”选项
- 它替代了原本自动强制选择【PCL 所在的文件夹、Minecraft 文件夹、版本文件夹】中的 Java 的机制,这个机制原本可能会导致 PCL 意料外地选择到一些 Java
- 不过,如果你通过把 Java 放在【PCL 所在的文件夹或 Minecraft 文件夹】中,来让 PCL 强制使用该 Java,这会在更新后失效,需要把 Java 挪到版本文件夹里才行
- 自动搜索时,不再搜索整个磁盘中的 Java,而是只按白名单搜索特定文件夹中的 Java(#8610,@lonzov)
- 此前 PCL 会搜索到一些软件附带的精简版 Java,使用这些 Java 会导致游戏启动失败
- 虽然不全盘搜索会遗漏一些已经存在的 Java,但至少比莫名其妙地打不开游戏要好,况且就算缺少 Java 也能自动下载了,所以全盘搜索确实不太有必要了
- 删除“忽略 Java 兼容性警告”设置
- 全局设置现在只改变 Java 优先级,不会忽略兼容性强行选择
- 版本设置的行为现在也更加明确,不再需要为此弹一个兼容性警告弹窗了
- 优化全局设置中重新搜索和导入 Java 的 UX,以更符合操作直觉
- 由于 MC 和 PCL 均已不再支持 32 位系统,不再支持使用 32 位 Java
- 不再区分 JDK 和 JRE
- 优化检查 Java 的性能,现在所有 Java 相关的操作都是异步的了
- 将所有 javaw.exe 的调用换为 java.exe
整合包导出优化
- 如果该版本的 Java 设置可能存在问题,会在导出时进行提示
- 如果在版本设置选择了“使用版本文件夹中的 Java”,则允许导出这个 Java
- 若勾选了“仅从 Modrinth 下载资源文件”,则会优先使用 .mrpack 格式(#7998,@com-in)
- 若勾选了“仅从 Modrinth 下载资源文件”和“PCL 启动器程序”,会提示需要不勾选“PCL 启动器程序”才能选用 .mrpack 格式(@wwwrow)
- 不再导出 PCL 离线皮肤资源包
弹出提示重做
- 重做弹出提示的样式以及动画,以更符合现代 UI 审美
- 点击文本框时,弹出提示不再会自动收回,以更好地对照提示中的内容填写高级设置
- 弹出提示会跟随鼠标移动,而不是待在原地
- 弹出提示的触发响应更加灵敏
其他变更
- 新主页预设:Bangumi 番剧主页(#8834,作者 @wzyaeu)
- 预添加重庆大学开源软件镜像站作为 PCL 更新镜像源
- 为 CurseForge CDN 下载添加 API Key(#8785,@LinQingYuu)
- 由于 CurseForge 的 新政策,这个版本之前的 PCL 从 7 月 16 日起会无法从 CurseForge 下载资源和整合包!
- 添加建造者披风、工匠披风译名(#8726,@ahsabksha-oss,PR @CiiLu)
- 在社区资源下载页,手动输入筛选的 MC 版本号时,不再对输入文本进行自动补全(#8744,@xynsf)
- 帮助库中,完善加入服务器的地址说明(Meloong-Git/PCLHelp#466,PR @kdjnb)
- 帮助库中的小修改(Meloong-Git/PCLHelp#464、Meloong-Git/PCLHelp#468,PR @Ev1r1tt、@SquareBlock)
- 当 Mojang 的正版登录服务器宕机时,明确提示是 Mojang 的服务器出现问题
- 服务器一个月炸三次,他们到底怎么做到的?
- 安装 OptiFine 时,会自动从其 jar 文件中读取安装它所需的 Java 版本
- 由于从 CurseForge、Modrinth 获取的 Mod 信息已经能覆盖绝大多数文件了,不再尝试从 Mod 文件的 jar 中读取 Mod 信息
- 不再支持 32 位 Windows
- 使用更紧凑的方式存储 Mod 热度数据,减少了 ~70K 文件大小
- 正版登录服务器宕机时显示特殊的错误提示
- 支持处理只读文件、文件夹
- 更新法律声明,以明确允许运行、使用、不收费原样复制与分发 PCL
Bug 修复
- 更改皮肤的请求在重试时失败(#8397)
- 在资源下载页面,不会展开上个页面已展开的卡片(#8673,@ZJH-github34987233,PR @wyc-26)
- 触发网络异常时, MyLoading 格式化的错误文本有误(#8712,@Jkkoi,PR @qinghuayuci)
- 修改披风后列表中显示的当前披风不会更新(#8738,@AprilQM,PR @wyc-26)
- 非 GBK 编码、非中文文件夹下,中文的玩家名可能变成乱码(#8739,@WaltomAdaam2)
- 无法正常识别部分社区数据包(#8760,@FengguaYa)
- 可能会在更新 Mod 时意外删除该 Mod(#8764,@Furrycalin)
- 无法用繁体搜索 Mod 数据库中的繁体名称的 Mod(#8778,@Parckerz)
- 若手动修改了特定设置文件,系统设置下拉框回退时可能出错(#8782,PR @Zmjjeff7)
- 可能无法安装 OptiFine 26.1.2(#8792,@ZhangChenyi2008)
- 粘贴失败会导致崩溃(#8820,@miqidaxia2680)
- 由于愚人节彩蛋同年内只触发一次,若识别码改变,则会无法解锁滑稽彩
- 可能连续启动多次微软登录加载器
- 调试模式下的一个安全问题
- 首次打开 PCL 不会生成日志文件
- 在文本框中按下鼠标会导致 Tooltip 被错误地关闭
- ModWatcher.LatestLog 不是线程安全的
- 日志中显示的微软登录 AccessToken 过期时间有误
新增 API
- MyIconButton 添加了 CanClick 属性,以控制其是否有点击动画和事件,目前用于 Java 列表右侧的问号图标
- MyIconButton 支持 IsEnabled = False 时的样式
技术性更改
- MeloongCore 的更改详见对比页面
- 配置系统重做
- 实验性,目前只用于存储新配置,暂时还没有把老配置迁移到这个新系统
- 重新设计了整个配置系统的架构
- 使用 json 而非现在的 ini 文件存储配置
- 全局设置不再写入注册表,而是写入 %APPDATA%\PCL\config.json
- 支持直接存储可以序列化、反序列化 json 的复杂类
- 读写配置时不再使用字符串,而是直接调用 ConfigEntry 类
- 读写配置现在是线程安全的
- 为配置文件的存储添加了防抖处理,避免特定操作下高频写入文件
- 使用安全性更好的 AES 算法进行本地加解密
- 新增可以部分替代现有 Loader 类的 Worker 类
- 新增 LoaderWorker,以将新架构下的 Worker 包装为 Loader,作为兼容层
- 新增支持重试、拆分子项、记录部分进度被跳过的进度追踪与观测系统,详见 Progress.cs
- 新增支持表达一个数学区间的类 ValueRange
- LoaderBase 新增 CreateSyncProgressProvider、CreateCancellationToken、WaitForExitAsync,作为新架构的兼容层
- 迁移 Java 相关底层代码、MC 百科条目、FileChecker 等东西到 C#
- 将取消任务的异常统一为 OperationCanceledException,取消检测为 ex.IsCanceled
- 添加 ThrottleDebounce 第三方库
- 删除 ResilientUtils,换用 ThrottleDebounce.Retrier
- 统一代码文件编码为 UTF-8 无 BOM
- 将部分 ConcurrentList 替换为更细粒度的锁,例如 ConcurrentQueue
- 修改部分语法,使 Rider 可以正常打开并编译工程