使用Java11启动Starsector96,无class文件修改
本帖最后由 zender 于 2024-2-8 13:16 编辑发隔壁mod制作发布了
粒子引擎注入与java11之钥 - Mod制作发布 - 远行星号中文论坛 (fossic.org)
之后如果有修复/更新就在上面这个帖子发了
经过早上几个小时的研究,我搞明白了挡在Starsector96到java11前只有两件事,java ee和sun.nio.ch.DirectBuffer
premain+javassist实际上就是在运行时修改内存中的class数据,标题属于是玩了个文字游戏,该方法确实不修改任何.class和.jar文件,但是修改了class数据
借助premain+javassist技术,我重写了唯一使用sun.nio.ch.DirectBuffer 的函数
再在启动参数中加入巨量的add-opens和add-exports
再在启动参数中加入对java ee的引用
我成功的使用java11启动了Starsector96并且在超空间中飞行了一小段,过了一个月,打了一场模拟战
唯一的问题是窗口模式下边框(x按钮那部分)消失了
在这先放一个java ee下载链接 http://download.java.net/glassfish/5.0/release/javaee8-ri.zip
模组文件:
我直接就在之前pei里面写了,这次安装有所区别,请详细阅读下列文本
预准备1,正常解压模组文件后将模组文件夹中的javassist.jar和ParticleEngineInject_PreMain.jar文件挪动到starsector-core里
预准备2,从我提供的java ee下载链接下载java ee,将下载到的javaee8-ri.zip文件解压到Starsector目录(游戏可执行所在位置)下
首先,你需要在启动参数中-Dcom.fs.starfarer.settings.paths.mods=../mods和-classpath之间加入以下参数,且加入的参数前后加上空格以分隔
--add-opens=java.base/jdk.internal.vm.annotation=ALL-UNNAMED --add-opens=java.base/sun.net=ALL-UNNAMED --add-opens=java.base/sun.net.util=ALL-UNNAMED --add-opens=java.base/jdk.internal.misc=ALL-UNNAMED --add-opens=java.base/sun.net.www=ALL-UNNAMED --add-opens=java.base/jdk.internal.loader=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=jdk.unsupported/sun.misc=ALL-UNNAMED --add-exports=java.base/jdk.internal.ref=ALL-UNNAMED
然后在classpath参数的最后(一般来说,最后一项是xstream-1.4.10.jar,也就是在这之后不加空格,直接复制粘贴)加上;javassist.jar;../glassfish5/glassfish/lib/javaee.jar -javaagent:ParticleEngineInject_PreMain.jar
注意:从;开始到最后的.jar完整复制粘贴,包括;
注意:如果你已经使用了旧版本的PEI,请不要让-javaagent:ParticleEngineInject_PreMain.jar参数重复
最后将jre换成java11版本
版本注意:虽然我使用了特殊办法规避了直接引用混淆函数,但是这并不意味着模组绝对可以在096rc10之外的任何版本使用,只是相较于直接引用有了一些正常使用的可能性
事实证明Alex只是懒() 性能提升有吗 有没有试过的来说说
页:
[1]