CocoaInputLinuxの導入方法

注意事項
・不安定です
・変換候補のウィンドウの表示位置がおかしいです。
・私はCentOS7-iBus-Anthyでテストしました。

例として、1.12.2 (forge 14.23.2.2611)に導入します。

手順1.
下記のコマンドを実行してください。

$ curl --create-dirs -o ~/.minecraft/versions/1.12.2-cocoainput/1.12.2-cocoainput.json https://axer.jp/mods/cocoainput/linux/1.12.2-cocoainput.json

こちらのコマンドは1.12.2に導入するときにしか使えません。他のバージョンについては暇があれば対応します。

手順2.
~/.minecraft/versions/1.12.2-forge1.12.2-14.23.2.2611/1.12.2-forge1.12.2-14.23.2.2611.jsonを開きます。
inheritsFromキーの値”1.12.2″を”1.12.2-cocoainput”に変更し、保存します。

手順3.
DownloadのページからCocoaInputAlpha、CocoaInputの3.1.0以上をダウンロードし、modsフォルダーに導入してください。

以上です。実際の動作例はこちらを見てください。
https://twitter.com/axer_yok/status/967818022000910336

CocoaInputLinux

先月、CocoaInputLinuxをリリースしましたが、それについて少し設計を書きます。
以前私はgistに「lwjgl2コード内の”@im=none”を消せば日本語が打てる」と書きましたが、それだけでは不十分でした。
X11でIMを使用するにはキーイベントをXIM(filterEvent)に渡す必要があります。これは大前提事項で、コレがなされていないとMod側の対処ではどうにもなりません。Modだけでどうにもならないということはライブラリに改変を施す必要があるわけです。

https://github.com/LWJGL/lwjgl/blob/master/src/java/org/lwjgl/opengl/LinuxDisplay.javaのコード
863: if (event_window != getWindow() || event_buffer.filterEvent(event_window) ||…
一見するとXIMにキーイベントを渡しているように見えますが、実はXIMの向けのキーイベントの時はevent_window != getWindow()がfalseを返してしまうようです。よって本来のXIMにキーイベントを渡す実装は
if (event_buffer.filterEvent(event_window)||event_window != getWindow()…
とするべきでした。

それでこれらの対策方法についてですがめんどくさいので省略します。
結果的にCocoaInputLinuxをインストールする時に置き換えられるlwjglのライブラリの変更点は以下の通り。
LinuxEventクラスについて、
メンバを追加
private boolean finalEventFiltered = false;
public static boolean enableIME = false;
メソッドを改変
public boolean filterEvent(long paramLong){
return this.finalEventFiltered;
}
public boolean filterEventX(long paramLong){
return enableIME ? nFilterEvent(this.event_buffer, paramLong) : false;
}
public void nextEvent(long paramLong){
nNextEvent(paramLong, this.event_buffer);
this.finalEventFiltered = filterEventX(0L);
}
この改変が全てです。こういうのをちゃんと書いておかないとキーロガーしてるんじゃないかと思われそうなので書いておきます。

なおMinecraft 1.13から採用されるlwjgl3はしっかりとfilterEventを通しているようなので、恐らくCocoaInputLinuxをmodsディレクトリに入れるだけで動くと思います。

現状のCocoaInputLinuxははっきり言ってIMEを表示させた段階で終わっていて利便性が高いとはいえません。
何より情報が非常に少なく、変換候補のウィンドウの表示位置の制御がにっちもさっちもいきません。
こればっかりは対策するのには時間がかかるor直せないということになりそうです。