Yesterday17 / KokoaLinux

[1.12.2] IME solution for Minecraft under linux.
Other
46 stars 3 forks source link

如果能支持一下1.8.9就更好了 #4

Closed PumpkinXD closed 1 month ago

PumpkinXD commented 3 years ago

是这样的

inputfix在linux下仍然不能解决输入问题,以至于游玩hypixel的时候只能复制粘帖

(其实本来想自行解决这个问题的,但苦于不会java也不了解forge api就只好作罢)

Yesterday17 commented 3 years ago

原理上 1.12.2 之前的这些版本差别应该都不是很大,要改动的也只有forge相关的代码。

看了一下,要改动的地方有:

其实我现在也不大会 JavaForge API 最近在忙别的项目,等一个好心人接手(

PumpkinXD commented 3 years ago

原理上 1.12.2 之前的这些版本差别应该都不是很大,要改动的也只有forge相关的代码。

看了一下,要改动的地方有:

* https://github.com/Yesterday17/KokoaLinux/tree/master/src/main/java/cn/yesterday17/kokoalinux/config
  这部分可以完全删掉,我记得低版本Config还挺麻烦的。配置项写死就行了,就一个 `debug` 一个 `disable`。

* https://github.com/Yesterday17/KokoaLinux/blob/86196e8cf9020c2c8f1106683c422c289cc6ac0a/src/main/java/cn/yesterday17/kokoalinux/transformer/GuiTextFieldTransformer.java#L18

  `func_146195_b` 不确定有没有变化,应该是没有。

* 不确定 189 的 `LWJGL` 版本对 `Transform` 的影响有多大。`1.12.2` 使用的是 `LWJGL2` 的最后一个版本,之前是什么样的就完全不知道了(

* 详细的思路可以看 https://www.bilibili.com/read/cv4246084

~其实我现在也不大会 JavaForge API 了~ 最近在忙别的项目,等一个好心人接手(

啊这

看了一下1.8.9使用的 LWJGL2 的版本 和1.1.2使用的是同一个版本 func_146195_b应该是没有变化 net.minecraftforge.client.event.GuiOpenEvent在1.8.9下用不了getGui(),用的是gui

不过由于不会forge不知道config应该怎么写,只能看着idea给cn.yesterday17.kokoalinux.config.*cn.yesterday17.kokoalinux.input.InputNative飘红

PumpkinXD commented 2 years ago

似乎 jna的版本对移植造成了一点点的困扰

1.8.9 forge的jna版本号是3.4而1.12.2的则是4.4

而目前直接用1.8.9跑我那两个branch的编译产物会崩端(均与jna有关)

老是启动阶段报java.lang.UnsatisfiedLinkError: Unable to load library 'kokoa': libkokoa.so: 无法打开共享对象文件: 没有那个文件或目录就崩了 图片 (而jar里面是有libkoa.so的) 图片

~丢人的是没有在stack overflow或者google找到解决方法, jna3.4的文档感觉提示也不太够~

kappa-maintainer commented 2 years ago

我在移植1.7.10的,套用了GTNH的脚本,删了高版本的config内容,因为好像没有jna就shadow了一个jna,总算是进了游戏 当前问题是不论有没有开GUI都能切输入法,而且只能输入第一个字,猜测是有某些版本差异没发现……

Yesterday17 commented 2 years ago

我在移植1.7.10的,套用了GTNH的脚本,删了高版本的config内容,因为好像没有jna就shadow了一个jna,总算是进了游戏 当前问题是不论有没有开GUI都能切输入法,而且只能输入第一个字,猜测是有某些版本差异没发现……

1710 的的话可能 GuiTextFieldTransformer.java 要改一下

Yesterday17 commented 2 years ago

似乎 jna的版本对移植造成了一点点的困扰

1.8.9 forge的jna版本号是3.4而1.12.2的则是4.4

而目前直接用1.8.9跑我那两个branch的编译产物会崩端(均与jna有关)

老是启动阶段报java.lang.UnsatisfiedLinkError: Unable to load library 'kokoa': libkokoa.so: 无法打开共享对象文件: 没有那个文件或目录就崩了 图片 (而jar里面是有libkoa.so的) 图片

~丢人的是没有在stack overflow或者google找到解决方法, jna3.4的文档感觉提示也不太够~

可以尝试 shade 一下?

kappa-maintainer commented 2 years ago

我在移植1.7.10的,套用了GTNH的脚本,删了高版本的config内容,因为好像没有jna就shadow了一个jna,总算是进了游戏 当前问题是不论有没有开GUI都能切输入法,而且只能输入第一个字,猜测是有某些版本差异没发现……

1710 的的话可能 GuiTextFieldTransformer.java 要改一下

经检查涉及的几个函数和变量的mapping都没变,toggleIC如果只传false也能起效,但还是启动时就已经能调输入法了 edit: 开了调试后发现创造的物品栏搜索框及其正常,告示牌完全不foucs和unfocus,聊天栏只会focus,我猜应该去翻源代码了 edi2: 破案了,GUI的EventHandler完全没有注册到,估计也是莫名其妙的版本差别 edit3: 原来是一直被当成纯coremod,不知为何META-INF里FMLCorePluginContainsFMLMod没起作用……

kappa-maintainer commented 2 years ago

改成LoadingPlugin就行了,现在的问题只剩下为什么一次只能输入一个字

kappa-maintainer commented 2 years ago

成功了,原因是GuiScreen里handleKeyboardInput和1.12不一样,改了就好了 我不会写asm,最后还是用mixin写的…… 所以……能让我传cf造福一下本就稀有的Linux1.7.10玩家吗?

Yesterday17 commented 2 years ago

欢迎 我gtnh也能用了

kappa-maintainer @.***> 于2022年4月22日周五 22:10写道:

成功了,原因是GuiScreen里handleKeyboardInput和1.12不一样,改了就好了 我不会写asm,最后还是用mixin写的…… 所以……能让我传cf造福一下本就稀有的Linux1.7.10玩家吗?

— Reply to this email directly, view it on GitHub https://github.com/Yesterday17/KokoaLinux/issues/4#issuecomment-1106556208, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACCEFLTUSAXARQYHE6PRUBDVGKXO7ANCNFSM5BTSWQSQ . You are receiving this because you commented.Message ID: @.***>

Yesterday17 commented 2 years ago

(也可以加个member传到kokoalinux上

kappa-maintainer commented 2 years ago

哦已经有cf了,那没事了 那感觉感觉还是把那点mixin交给原作者写成asm再上传更稳妥一点…… 另外说一下,ITweaker改LoadingPlugin是因为gui事件原来的的@Subscribe似乎没用,只好一路改成@Mod.EventHandler,也有可能是我搞错了……

PumpkinXD commented 2 years ago

我在移植1.7.10的,套用了GTNH的脚本,删了高版本的config内容,因为好像没有jna就shadow了一个jna,总算是进了游戏 当前问题是不论有没有开GUI都能切输入法,而且只能输入第一个字,猜测是有某些版本差异没发现……

只能打一个字的问题可以考虑再加个inputfix解决

我1.8.9的移植目前在没inputfix或者patcher的情况下也是只能打一个字

至于没打开gui就能切换输入法我感觉还好(

似乎 jna的版本对移植造成了一点点的困扰 1.8.9 forge的jna版本号是3.4而1.12.2的则是4.4 而目前直接用1.8.9跑我那两个branch的编译产物会崩端(均与jna有关) 老是启动阶段报java.lang.UnsatisfiedLinkError: Unable to load library 'kokoa': libkokoa.so: 无法打开共享对象文件: 没有那个文件或目录就崩了 图片 (而jar里面是有libkoa.so的) 图片 ~丢人的是没有在stack overflow或者google找到解决方法, jna3.4的文档感觉提示也不太够~

可以尝试 shade 一下?

~偷懒直接给jna传了个jar包外的路径"解决"了之前的崩端问题,不过我可以试一下shade(不过不太了解估计。。。)~

kappa-maintainer commented 2 years ago

我就是参考了inputFix才确认问题在哪的,自用的话还是不想多装 shadow会大大增加文件体积,可以先给jna传个debug参数让它输出搜索的路径看看

PumpkinXD commented 2 years ago

我就是参考了inputFix才确认问题在哪的,自用的话还是不想多装 shadow会大大增加文件体积,可以先给jna传个debug参数让它输出搜索的路径看看

图片 ~算了我还是直接上shadow吧~

~!jna3.4也太弱智了~

算了勉强能用就行,搞不明白jna3.4的机制也搞不明白shadowjar咋用(idea还在给我提示jna3.4)

PumpkinXD commented 2 years ago

可以尝试 shade 一下?

shadowJAR也不是很了解 ,不清楚为什么用的还是jna3.4

我想我一时半会只能先将就着用jar包外加载native的版本了

又搜了一下,搜到的建议我把lib先从jar提取到临时目录再加载,但这样和我现在将就着用的方法一样都是把jna当jni用了

update:看了下jna3.4的源码,发现并不能像1.12.2用的jna4那样从jar中加载native

PumpkinXD commented 1 year ago

寄了,因为 JNA#679 的原因我不能relocate jna (最起码不会很简单)

但是1.8.9已经有了一个不能从jar中提取native的jna3.4,直接shade会冲突

看来得考虑用别的库了(不是很想再写一遍提取)

话说有啥库的推荐么 想了解一下(对了该不会我得把这个库给shade进来吧)