Skip to content

Comments

feat(instance): 实现 Forge Like 安装器#2284

Draft
copytiao wants to merge 2 commits intoPCL-Community:devfrom
LuoYun-Team:feat/forge-installer
Draft

feat(instance): 实现 Forge Like 安装器#2284
copytiao wants to merge 2 commits intoPCL-Community:devfrom
LuoYun-Team:feat/forge-installer

Conversation

@copytiao
Copy link
Member

No description provided.

@pcl-ce-automation pcl-ce-automation bot added 🛠️ 等待审查 Pull Request 已完善,等待维护者或负责人进行代码审查 size: L PR 大小评估:大型 labels Jan 23, 2026
@copytiao
Copy link
Member Author

copytiao commented Jan 23, 2026

171 ++ = Size:L( 确信

@copytiao copytiao marked this pull request as draft January 23, 2026 05:54
@pcl-ce-automation pcl-ce-automation bot added 🚧 正在处理 开发人员正在对该内容进行开发、测试或修复,进展中 and removed 🛠️ 等待审查 Pull Request 已完善,等待维护者或负责人进行代码审查 labels Jan 23, 2026
@copytiao
Copy link
Member Author

copytiao commented Jan 23, 2026

umm 看了看,这东西还需要完整的实例支持,但是 Core 的实例实现是半成品......

实例那边要不完全重构好了,反正看不懂 pynickle 写了什么东西

@pynickle
Copy link
Contributor

umm 看了看,这东西还需要完整的实例支持,但是 Core 的实例实现是半成品......

实例那边要不完全重构好了,反正看不懂 @pynickle 写了什么东西

我可以做一些地方的优化和修复)当然你们要是觉得整体架构不好那你们整体重构也无所谓)

@LingYue412
Copy link
Collaborator

umm 看了看,这东西还需要完整的实例支持,但是 Core 的实例实现是半成品......
实例那边要不完全重构好了,反正看不懂 @pynickle 写了什么东西

我可以做一些地方的优化和修复)当然你们要是觉得整体架构不好那你们整体重构也无所谓)

你来啦?问问实例什么时候能用上 inheritFrom?

@copytiao
Copy link
Member Author

copytiao commented Jan 23, 2026

umm 看了看,这东西还需要完整的实例支持,但是 Core 的实例实现是半成品......
实例那边要不完全重构好了,反正看不懂 pynickle 写了什么东西

我可以做一些地方的优化和修复)当然你们要是觉得整体架构不好那你们整体重构也无所谓)

给点用例?比如从哪里加载/获取实例信息

@pynickle
Copy link
Contributor

umm 看了看,这东西还需要完整的实例支持,但是 Core 的实例实现是半成品......
实例那边要不完全重构好了,反正看不懂 @pynickle 写了什么东西

我可以做一些地方的优化和修复)当然你们要是觉得整体架构不好那你们整体重构也无所谓)

你来啦?问问实例什么时候能用上 inheritFrom?

我是真没看懂inheritFrom这个玩意到底有什么实际意义)

@pynickle
Copy link
Contributor

umm 看了看,这东西还需要完整的实例支持,但是 Core 的实例实现是半成品......
实例那边要不完全重构好了,反正看不懂 pynickle 写了什么东西

我可以做一些地方的优化和修复)当然你们要是觉得整体架构不好那你们整体重构也无所谓)

给点用例?比如从哪里加载/获取实例信息

过几天再说)沉迷终末地 ing,要不你先写些别的)

题外话(可能是):
你之前 Core 那几个 PR 放那一万年了,现在 Core 没了,你那几个 PR 还做吗)
(如果做:)别开坑了,你坑有点太多了)

@copytiao
Copy link
Member Author

copytiao commented Jan 23, 2026

题外话(可能是): 你之前 Core 那几个 PR 放那一万年了,现在 Core 没了,你那几个 PR 还做吗) (如果做:)别开坑了,你坑有点太多了)

Leave Team 的这几天有了新想法(是的,我回来的理由就是这么荒谬,因为有新想法就跑回来继续 PR),现在脑子里已经有了事件驱动一切的想法了,所以那几个坑可能还得挖大点(

@LingYue412
Copy link
Collaborator

我是真没看懂inheritFrom这个玩意到底有什么实际意义)

规范,规范,还是 tmd 规范(这辈子和规范过不去了)

@copytiao
Copy link
Member Author

我是真没看懂inheritFrom这个玩意到底有什么实际意义)

事实上,第三方组件为了和 Mojang 资源解耦合(避免被告)才有的,并且 @Big-Cake-jpg 似乎很喜欢这个设计(虽然我也不理解为什么)

@Big-Cake-jpg
Copy link
Member

用 inheritsFrom 一是为了遵循 Mojang 给出的规范、避免法律风险,二是为了一定程度上减少安装新实例对用户设备存储空间的需求。

以我的实际使用作为例子:

我的游戏位于 D:\Minecraft\.minecraft 文件夹下。

从 2020 年使用 HMCL 和 PCL 主线、2022 - 2025 年中使用 BakaXL,再到现在开始换用 CE 作为主力启动器,这个文件夹下目前包含了 64 个实例,整个文件夹的存储空间占用来到了惊人的 24GB。

image image

使用 inheritsFrom 形式的实例与 patch 实例相比存储空间占用能大幅缩小。让我们使用 PCL CE 与 BakaXL 从 Modrinth 各全新安装一个 Fabulously Optimized 整合包 1.20.1 的最新版本。

image

可以发现 inheritsFrom 实例相比 patch 实例,存储空间需求减少了一半。

@copytiao
Copy link
Member Author

copytiao commented Feb 1, 2026

@pynickle 大概什么时候能把用例补齐?因为 2 月 5 那会放假了,进度会继续往前推一些

@pynickle
Copy link
Contributor

pynickle commented Feb 1, 2026

@pynickle 大概什么时候能把用例补齐?因为 2 月 5 那会放假了,进度会继续往前推一些

我的 PCL CE 现在都运行不起来)有猎奇小 Bug

@pynickle
Copy link
Contributor

pynickle commented Feb 2, 2026

// 获取当前文件夹
var currentFolder = FolderService.FolderManager.CurrentFolder;

// 创建实例
var instancePath = Path.Combine(currentFolder.Path, "versions", "forge-1.19.2-43.2.0");
var instance = await InstanceFactory.CreateInstanceAsync(instancePath, currentFolder);

// 加载实例
instance.Load();

// 获取实例信息
var instanceInfo = instance.InstanceInfo;
var forgePatch = instanceInfo.GetPatch("Forge");   // 参考 PCL.Core/Minecraft/Instance/Interface/IMcInstance.cs

// 版本隔离路径
Path.Combine(instance.IsolatedPath, "mods");

@copytiao
Copy link
Member Author

copytiao commented Feb 2, 2026

ummm 有没有可枚举实例列表,以及附加组件的安装信息

暂时还没空研究源代码

@pynickle
Copy link
Contributor

pynickle commented Feb 2, 2026

ummm 有没有可枚举实例列表,以及附加组件的安装信息

暂时还没空研究源代码

var instanceManager = FolderService.FolderManager.CurrentFolder?.InstanceList;

// 枚举所有实例
foreach (var instance in instanceManager.McInstanceList) {
    Console.WriteLine($"{instance.Name} - {instance.CardType}");

    var forgePatch = instance.InstanceInfo.GetPatch("Forge");
    if (instance.InstanceInfo.HasPatch("Forge")) {
        Console.WriteLine($"Forge 版本: {forgePatch.Version}");
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size: L PR 大小评估:大型 🚧 正在处理 开发人员正在对该内容进行开发、测试或修复,进展中

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants