Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug] HMCL merge the wrong launch arg when using Cleanroom #3528

Open
Ecdcaeb opened this issue Jan 13, 2025 · 10 comments
Open

[Bug] HMCL merge the wrong launch arg when using Cleanroom #3528

Ecdcaeb opened this issue Jan 13, 2025 · 10 comments
Labels

Comments

@Ecdcaeb
Copy link

Ecdcaeb commented Jan 13, 2025

平台 | Platform

Windows 11

问题描述 | Bug Description

  1. Install newest Cleanroom
  2. Launch

version instance json
https://mclo.gs/dizgjNC
installer version json
https://mclo.gs/HCoXOIQ

We can see that hmcl simply merged the libraries, causing unexpected errors. lwjgl3 and lwjgl2 both existed during the run.
And other libs, guava, fastutil, exists...

Perhaps HMCL should exclude repeated artificial

启动器崩溃报告 / 启动器日志文件 | Launcher Crash Report / Launcher Log File

Non,HMCL dont crash.

@Ecdcaeb Ecdcaeb added the bug label Jan 13, 2025
@zkitefly
Copy link
Member

zkitefly commented Jan 27, 2025

我测试 HMCL 启动通过 Cleanroom 的安装程序安装的版本,结果启动并没有问题?

录屏、启动脚本和 Client JSON:https://www.123865.com/s/82uajv-DW2xH

@Ecdcaeb
Copy link
Author

Ecdcaeb commented Jan 27, 2025

我的测试中,由于库的顺序问题,0.2.4-alpha可以正常运行,但只是恰好如此
在cleanroom更换到官方lwjgl后,问题出现了。你可以使用最新 action 构建测试:
https://github.com/CleanroomMC/Cleanroom/actions
CleanroomMC/Cleanroom#282
CleanroomMC/Cleanroom#288

Hileb | OptiFine Great Again — 2025/1/12 22:35
已转发
hmcl, 0.2.4 could works,
so might something broken, should be in fix plan
#cleanroom-loader • 2025/1/12
所以应该在计划内
geeky_kappa — 2025/1/13 11:07
不对,0.2.4在HMCL能跑只是恰好能跑
并不代表我有特意支持
更不代表以后要支持
geeky_kappa — 2025/1/13 19:52
你真有兴趣可以研究下官启和HMCL怎么删除原版依赖
反正我们是没看出来能删

Hileb | OptiFine Great Again — 2025/1/13 22:40
hmcl会诡异地“修复参数”,就是把原版的内容加到forge后面。forge只是导入新的库而不修改原有的库,因此没有问题。但cleanroom需要修改库,这里有问题。过去由于可以依靠顺序找到新的库,例如从cleanroom里找到org.lwjgl.因此过去的库基本被忽略,而现在改为了transform从而暴露。我已就参数“修复”向hmcl发起issue,但看来它们积压了不少。
可以有magic的方法:
把重复的artificial 的 URL 移除,只保留最优先的
geeky_kappa — 2025/1/14 09:00
启动后对cp的任何删除都不可行
我试过用unsafe研究,里面是私有类套内部类复杂得一比,就算改了疑似换个vendor就不能用了

@zkitefly
Copy link
Member

那官方启动器的逻辑是啥

@Ecdcaeb
Copy link
Author

Ecdcaeb commented Jan 27, 2025

@Ecdcaeb
Copy link
Author

Ecdcaeb commented Jan 27, 2025

那官方启动器的逻辑是啥

不知道

@zkitefly
Copy link
Member

zkitefly commented Jan 27, 2025

https://zh.minecraft.wiki/w/Tutorial:编写启动器#额外的版本json文件

inheritsFrom
该参数指定了当前版本所继承的原版版本,意思为除此版本json文件外,同时使用inheritsFrom中指定的版本json文件内容。即,-cp参数后同时包含两个版本json文件指定的普通库文件,且natives库文件也同时包含两个版本json文件指定的,且该版本json文件优先于原版版本json文件

根据 Wiki 中的描述, HMCL 的 inheritsFrom 逻辑并没有问题,我觉得 Cleanroom Installer 该想办法迎合 Wiki 逻辑?

@kappa-maintainer
Copy link

我们只做了MMC系启动器的官方支持,因为MMC系能通过patches文件夹分发完全不同的原版JSON,从而能直接删掉各类过期库和patchy
看wiki这段理论上forge的库优先级是比原版带的库高的,但实际上报错层出不穷

@Ecdcaeb
Copy link
Author

Ecdcaeb commented Jan 27, 2025

我们只做了MMC系启动器的官方支持,因为MMC系能通过patches文件夹分发完全不同的原版JSON,从而能直接删掉各类过期库和patchy 看wiki这段理论上forge的库优先级是比原版带的库高的,但实际上报错层出不穷

因为最新 cleanroom 的 lwjgl 是 lwjglx 动态 merge 来的
所以在hmcl里,LWJGLTransformer 中 bytes 此时是有完整lwjgl2内容的。
而 0.2.4-alpha 由 cleanroom 直接分发所以没爆

@kappa-maintainer
Copy link

早在这之前就有ICU4J爆炸的事了
这次只不过是又一次lwjgl2的顺序跑到了lwjgl3之前

@zkitefly
Copy link
Member

那是不是说,cleanroom 都没法让官方启动器启动?(我买没测)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants