ARSpark
本帖最后由 RarityEG 于 2021-5-10 00:05 编辑

每周快照是 Alicorn 启动器的测试机制,主要用于灌水、搞笑和特性预览。

然而,每周快照主要用于新特性展示,通常存在大量漏洞。因此对于普通用户建议仅做测试尝鲜用。启动前请务必进行备份和检查更新非正式版的功能远远不及设计标准,仅供参考

不要转载本帖,因为会致使他人对本帖进行下沉灌水。

Downloads 下载
如果您已经开启了自动更新(在终端中输入 update enable),您无需下载以下文件,只需重启启动器并稍等几分钟。


Alicorn Launcher Dev Summary (Weekly)
Alicorn 开发周报

    点此前往本项目的 BitBucket 仓库 >>>

经过上百次实验和参数分析,Forge 终于投降了,现在您可以在核心安装页面安装 Forge 以及在启动台启动 Forge 引导的核心了!


有关 Forge 的坑详见下文
ChangeLog 更新内容



It Ain't Easy Handling Forge
Forge,你为何和我过不去?

Forge 的坑真的是非常大。Alicorn 早就有 Forge 启动的功能,但是一直没有成功。
今天我重新打开这个 Issue,对比了我们生成的启动参数和官启生成的参数

没有任何差别
(均是 59 个依赖库)

后来我仔细看了一下报错,发现这样的问题。
Mojang 使用 Log4j 2.8,而 Forge 使用 2.11
Forge 的 Mixin 会向 ThrowableProxy 类的一个方法进行修改

那么问题在哪里呢?
修复这个 Bug 只需要修改一行代码:

  1. retGF.libraries = gfHead.libraries.concat(retGF.libraries);
复制代码
Forge 的库必须先被加入到 ClassPath
(太累了,我要休息了,就不详细说了,Bye!)
THE END

    点此前往本项目的 BitBucket 仓库 >>>
    点此向本项目发起 Pull Request >>>

@dengyu @hzwcyq @whatfilmae @Jaanai @叉烧 @洞穴夜莺 @🔥❄️ @小默米 @🐦💕🌸🌸 @bleake @🌱⛄🐏

還生
烫手,这是啃了块硬骨头啊!

HNIN
想必下了很多功夫吧
顺便,这么晚还不睡吗(恼)

Jaanai
我在想是不是可以等正式版出来之后看到楼主拿到绊线钩?(逃

xmdhs
本帖最后由 xmdhs 于 2021-5-10 00:33 编辑

和先后顺序应该没关系吧,我是先把原版的 libraries 加进去,再读 forge 的 json 把 forge 的 libraries 加进去。

大概是这样
  1. if mod.InheritsFrom != "" {
  2.                 b, err := ioutil.ReadFile(g.Minecraftpath + `/versions/` + mod.InheritsFrom + "/" + mod.InheritsFrom + ".json")
  3.                 if err != nil {
  4.                         if os.IsNotExist(err) {
  5.                                 return nil, fmt.Errorf("Gameinfo.modjson: %w", err)
  6.                         }
  7.                         panic(fmt.Errorf("Gameinfo.modjson: %w", err))
  8.                 }
  9.                 err = json.Unmarshal(b, &j)
  10.                 if err != nil {
  11.                         return nil, JsonErr
  12.                 }
  13.                 for _, v := range mod.Libraries {
  14.                         l := g.libraries2LibraryX115(v)
  15.                         j.Libraries = append(j.Libraries, l)
  16.                 }
  17.                 g.Version = mod.ID
  18.                 j.MainClass = mod.MainClass
  19.                 if len(mod.Arguments.Game) != 0 {
  20.                         j.Arguments.Game = append(j.Arguments.Game, mod.Arguments.Game...)
  21.                 }
  22.                 if mod.MinecraftArguments != "" {
  23.                         j.Arguments.Game = append(j.Arguments.Game, minecraftArguments2jvm(mod.MinecraftArguments)...)
  24.                         j.Arguments.Jvm = append(j.Arguments.Jvm, getjvm()...)
  25.                 }

  26.         }
复制代码


而且 libraries 其实有共性,无论是原版还是 forge 和 fabric,都有 libraries.[].name 。解析这个就可以不用管什么 forge 还是 fabric 了。当然,下载还是得多写点代码,我这的方法是判断,然后转化成 1.15 原版的 json 的数据结构,然后只需要多写转换的代码了。

兼容性可能不是最佳,但是就像是用百分之二十的内容,覆盖百分之八十的场景,还是挺舒服的。

ARSpark
本帖最后由 RarityEG 于 2021-5-10 06:47 编辑
xmdhs 发表于 2021-5-10 00:31
和先后顺序应该没关系吧,我是先把原版的 libraries 加进去,再读 forge 的 json 把 forge 的 libraries 加 ...

我生成的参数和标准参数就只有顺序区别
我的参数启动的游戏的报错原因是一个Mixin出错
Forge向org.apache.log4j.core.impl.ThrowableProxy的一个方法进行Mixin
这个方法在2.8中没有,只有2.11才有,Mojang用2.8,Forge用2.11
Java查找Class的时候会根据ClassPath依次寻找
所以必须把Forge的库放在前面,不然JVM优先找到2.8中的那个类结果又找不到那个方法,就炸掉了
这个问题在1.16.5上出现

。—。
是时候给开发板定个版本号规范了

xmdhs
RarityEG 发表于 2021-5-10 06:45
我生成的参数和标准参数就只有顺序区别
我的参数启动的游戏的报错原因是一个Mixin出错
Forge向org.apache. ...

我这用了 hashmap 去储存了 forge 的 libraries 的包名和版本,之后生成 cp 后那一串东西时,如果包名相同,版本不同就不会加进 cp。

所以生成后是这样的
  1. D:/mc/.minecraft/libraries/com/mojang/patchy/1.1/patchy-1.1.jar;
  2. D:/mc/.minecraft/libraries/oshi-project/oshi-core/1.1/oshi-core-1.1.jar;
  3. D:/mc/.minecraft/libraries/net/java/dev/jna/jna/4.4.0/jna-4.4.0.jar;
  4. D:/mc/.minecraft/libraries/net/java/dev/jna/platform/3.4.0/platform-3.4.0.jar;
  5. D:/mc/.minecraft/libraries/com/ibm/icu/icu4j/66.1/icu4j-66.1.jar;
  6. D:/mc/.minecraft/libraries/com/mojang/javabridge/1.0.22/javabridge-1.0.22.jar;
  7. D:/mc/.minecraft/libraries/io/netty/netty-all/4.1.25.Final/netty-all-4.1.25.Final.jar;
  8. D:/mc/.minecraft/libraries/com/google/guava/guava/21.0/guava-21.0.jar;
  9. D:/mc/.minecraft/libraries/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5.jar;
  10. D:/mc/.minecraft/libraries/commons-io/commons-io/2.5/commons-io-2.5.jar;
  11. D:/mc/.minecraft/libraries/commons-codec/commons-codec/1.10/commons-codec-1.10.jar;
  12. D:/mc/.minecraft/libraries/net/java/jinput/jinput/2.0.5/jinput-2.0.5.jar;
  13. D:/mc/.minecraft/libraries/net/java/jutils/jutils/1.0.0/jutils-1.0.0.jar;
  14. D:/mc/.minecraft/libraries/com/mojang/brigadier/1.0.17/brigadier-1.0.17.jar;
  15. D:/mc/.minecraft/libraries/com/mojang/datafixerupper/4.0.26/datafixerupper-4.0.26.jar;
  16. D:/mc/.minecraft/libraries/com/google/code/gson/gson/2.8.0/gson-2.8.0.jar;
  17. D:/mc/.minecraft/libraries/com/mojang/authlib/2.1.28/authlib-2.1.28.jar;
  18. D:/mc/.minecraft/libraries/org/apache/commons/commons-compress/1.8.1/commons-compress-1.8.1.jar;
  19. D:/mc/.minecraft/libraries/org/apache/httpcomponents/httpclient/4.3.3/httpclient-4.3.3.jar;
  20. D:/mc/.minecraft/libraries/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jar;
  21. D:/mc/.minecraft/libraries/org/apache/httpcomponents/httpcore/4.3.2/httpcore-4.3.2.jar;
  22. D:/mc/.minecraft/libraries/it/unimi/dsi/fastutil/8.2.1/fastutil-8.2.1.jar;
  23. D:/mc/.minecraft/libraries/org/lwjgl/lwjgl/3.2.2/lwjgl-3.2.2.jar;
  24. D:/mc/.minecraft/libraries/org/lwjgl/lwjgl-jemalloc/3.2.2/lwjgl-jemalloc-3.2.2.jar;
  25. D:/mc/.minecraft/libraries/org/lwjgl/lwjgl-openal/3.2.2/lwjgl-openal-3.2.2.jar;
  26. D:/mc/.minecraft/libraries/org/lwjgl/lwjgl-opengl/3.2.2/lwjgl-opengl-3.2.2.jar;
  27. D:/mc/.minecraft/libraries/org/lwjgl/lwjgl-glfw/3.2.2/lwjgl-glfw-3.2.2.jar;
  28. D:/mc/.minecraft/libraries/org/lwjgl/lwjgl-stb/3.2.2/lwjgl-stb-3.2.2.jar;
  29. D:/mc/.minecraft/libraries/org/lwjgl/lwjgl-tinyfd/3.2.2/lwjgl-tinyfd-3.2.2.jar;
  30. D:/mc/.minecraft/libraries/org/lwjgl/lwjgl/3.2.2/lwjgl-3.2.2.jar;
  31. D:/mc/.minecraft/libraries/org/lwjgl/lwjgl-jemalloc/3.2.2/lwjgl-jemalloc-3.2.2.jar;
  32. D:/mc/.minecraft/libraries/org/lwjgl/lwjgl-openal/3.2.2/lwjgl-openal-3.2.2.jar;
  33. D:/mc/.minecraft/libraries/org/lwjgl/lwjgl-opengl/3.2.2/lwjgl-opengl-3.2.2.jar;
  34. D:/mc/.minecraft/libraries/org/lwjgl/lwjgl-glfw/3.2.2/lwjgl-glfw-3.2.2.jar;
  35. D:/mc/.minecraft/libraries/org/lwjgl/lwjgl-tinyfd/3.2.2/lwjgl-tinyfd-3.2.2.jar;
  36. D:/mc/.minecraft/libraries/org/lwjgl/lwjgl-stb/3.2.2/lwjgl-stb-3.2.2.jar;
  37. D:/mc/.minecraft/libraries/com/mojang/text2speech/1.11.3/text2speech-1.11.3.jar;
  38. D:/mc/.minecraft/libraries/com/mojang/text2speech/1.11.3/text2speech-1.11.3.jar;
  39. D:/mc/.minecraft/libraries/net/minecraftforge/forge/1.16.5-36.1.12/forge-1.16.5-36.1.12.jar;
  40. D:/mc/.minecraft/libraries/org/ow2/asm/asm/9.0/asm-9.0.jar;
  41. D:/mc/.minecraft/libraries/org/ow2/asm/asm-commons/9.0/asm-commons-9.0.jar;
  42. D:/mc/.minecraft/libraries/org/ow2/asm/asm-tree/9.0/asm-tree-9.0.jar;
  43. D:/mc/.minecraft/libraries/org/ow2/asm/asm-util/9.0/asm-util-9.0.jar;
  44. D:/mc/.minecraft/libraries/org/ow2/asm/asm-analysis/9.0/asm-analysis-9.0.jar;
  45. D:/mc/.minecraft/libraries/cpw/mods/modlauncher/8.0.9/modlauncher-8.0.9.jar;
  46. D:/mc/.minecraft/libraries/cpw/mods/grossjava9hacks/1.3.3/grossjava9hacks-1.3.3.jar;
  47. D:/mc/.minecraft/libraries/net/minecraftforge/accesstransformers/3.0.1/accesstransformers-3.0.1.jar;
  48. D:/mc/.minecraft/libraries/org/antlr/antlr4-runtime/4.9.1/antlr4-runtime-4.9.1.jar;
  49. D:/mc/.minecraft/libraries/net/minecraftforge/eventbus/4.0.0/eventbus-4.0.0.jar;
  50. D:/mc/.minecraft/libraries/net/minecraftforge/forgespi/3.2.0/forgespi-3.2.0.jar;
  51. D:/mc/.minecraft/libraries/net/minecraftforge/coremods/4.0.6/coremods-4.0.6.jar;
  52. D:/mc/.minecraft/libraries/net/minecraftforge/unsafe/0.2.0/unsafe-0.2.0.jar;
  53. D:/mc/.minecraft/libraries/com/electronwill/night-config/core/3.6.3/core-3.6.3.jar;
  54. D:/mc/.minecraft/libraries/com/electronwill/night-config/toml/3.6.3/toml-3.6.3.jar;
  55. D:/mc/.minecraft/libraries/org/jline/jline/3.12.1/jline-3.12.1.jar;
  56. D:/mc/.minecraft/libraries/org/apache/maven/maven-artifact/3.6.3/maven-artifact-3.6.3.jar;
  57. D:/mc/.minecraft/libraries/net/jodah/typetools/0.8.3/typetools-0.8.3.jar;
  58. D:/mc/.minecraft/libraries/org/apache/logging/log4j/log4j-api/2.11.2/log4j-api-2.11.2.jar;
  59. D:/mc/.minecraft/libraries/org/apache/logging/log4j/log4j-core/2.11.2/log4j-core-2.11.2.jar;
  60. D:/mc/.minecraft/libraries/net/minecrell/terminalconsoleappender/1.2.0/terminalconsoleappender-1.2.0.jar;
  61. D:/mc/.minecraft/libraries/net/sf/jopt-simple/jopt-simple/5.0.4/jopt-simple-5.0.4.jar;
  62. D:/mc/.minecraft/libraries/org/spongepowered/mixin/0.8.2/mixin-0.8.2.jar;
  63. D:/mc/.minecraft/libraries/net/minecraftforge/nashorn-core-compat/15.1.1.1/nashorn-core-compat-15.1.1.1.jar;
  64. D:/mc/.minecraft/versions/1.16.5/1.16.5.jar
复制代码

白门
看不懂,只能精神上支持一下楼主了

whatfilmae
多么辛勤的楼主,凌晨了还在编程,我们应该多向楼主学习

ARSpark
xmdhs 发表于 2021-5-10 08:31
我这用了 hashmap 去储存了 forge 的 libraries 的包名和版本,之后生成 cp 后那一串东西时,如果包名相 ...

我明白了
你在把一个库push进来的时候检查了版本
  1. D:/mc/.minecraft/libraries/org/apache/logging/log4j/log4j-core/2.11.2/log4j-core-2.11.2.jar;
复制代码

而Forge里面有log4j 2.11,Mojang 有2.8
然后你的启动器就用2.11替代了2.8

而我的启动器不检查版本,只会根据json指定的库进行处理

所以简而言之我们的解决方法是一样的,你是不加载2.8那个jar,而我是把2.8丢到2.11后面让2.11覆盖它
所以看上去和顺序有关系,其实就是一个版本问题

LeoPro
好耶 可惜还是没有 macOS 版本


第一页 上一页 下一页 最后一页