Skip to content

Repository files navigation

IME Hotfix

Minecraft で日本語などの IME 入力を、普通のテキストボックスと同じ感覚で使えるようにする MOD。

現在の対応:

バージョン ローダー 対応 OS
1.20.1 Forge 47.x Windows のみ
26.2 Forge 65.x 全プラットフォーム

26.2 は Minecraft 自体が GLFW の入力メソッド対応を備えているため、OS 固有の処理が不要です。1.20.1 は同梱される GLFW に入力メソッド対応が無く、Windows の API を直接利用するため Windows 専用です。


何が直るのか

症状 原因 対応
変換中の文字(未確定文字列)がテキスト欄に出ない GLFW 3.3.1 が WM_IME_* を一切処理しないため、未確定文字列がゲームに届く経路が存在しない ウィンドウプロシージャをフックして IMM32 から直接読み取り、キャレット位置にインライン描画
変換候補ウィンドウが画面の隅に出る ImmSetCandidateWindow が呼ばれていないので既定位置になる 候補ウィンドウをキャレットの真下に追従させる
変換中の文字が画面の変な位置に二重に出る Windows が独自に未確定文字列を描画している WM_IME_STARTCOMPOSITION を IME ウィンドウへ渡さず、自前描画に一本化
IME を ON にしたままだと WASD などで動けなくなる IME が握ったキーは VK_PROCESSKEY になり、GLFW がイベントごと破棄する テキスト欄にフォーカスが無い間は IME をウィンドウから切り離す
変換の途中でクリックすると入力が消える 未確定文字列はどこにも保存されていない 離脱の瞬間に、入力していた欄へそのまま確定する
変換途中の文字が別の検索欄に移動する 未確定文字列はゲーム全体で 1 つの状態なので、フォーカスが移ると付いていってしまう 同上。フォーカスが移る前に確定させる
変換を確定するまで検索結果が絞り込まれない IME のキー入力はゲームに届かないので、画面が「文字が入力された」ことに気づけない 未確定のまま検索に反映する(下記)
どの文節を変換中か分からない 変換対象の文節をハイライト、確定済みの文節に下線を表示

未確定文字列はテキスト欄の中に表示されるため、長い文章でも欄の横スクロールが正しく追従します。

未確定文字での検索フィルター

「ダークオーク」を探すとき、「ダーク」と打った変換確定前の段階で候補が絞り込まれます。クリエイティブインベントリの Search Items、JEI の検索窓、レシピ本の検索窓で機能します。

入力欄に保存されている値そのものは一切変更していないため、確定しても破棄しても文字が重複したり消えたりすることはありません(変換中は「未確定文字を含んだ値」を報告しているだけです)。

対応する入力欄

net.minecraft.client.gui.components.EditBox を使う入力欄すべてに自動的に効きます。個別対応のコードは書いていません。

  • チャット欄
  • クリエイティブインベントリの Search Items
  • レシピ本の検索窓
  • JEI の検索窓(GuiTextFieldFilterEditBox を継承しているため)
  • サーバー追加画面、ワールド名、コマンドブロック など

看板・本と羽ペン

これらは EditBox を使わず自前でテキストを描画しているため、個別に対応しています。

  • 看板(通常・吊り看板の両方、4 行すべて)
  • 本と羽ペン(本文および署名時のタイトル)

いずれも変換中の文字がその場に表示され、候補ウィンドウがカーソルに追従します。

入りきらない文字の可視化

看板は「表示幅」、本のページは「行数と文字数」で上限が決まっているため、変換中の文字がそのまま全部入るとは限りません。そこで確定時に入りきらない部分に色を付けて、どこで切れるかが見えるようにしています。

  • 水色: 次の行 / 次のページへ送られる
  • : 収まりきらず捨てられる

看板では残りの行に実際どれだけ入るかを幅で計算しているため、長く変換すると途中で水色から赤へ切り替わります。下の行に既に文字があれば、そのぶん赤の始まりが早くなります。

色は設定で変更できます。

Textbox Improvements

IME とは独立した、テキスト入力そのものの改善です。日本語に限らず半角英数字でも動作し、文字が確定した時点で処理されます。設定で個別に無効化できます。

機能 内容
看板の自動折り返し 行の幅に入らない文字を次の行へ送ります。バニラは黙って捨てます
本の自動次ページ ページに入らない文字を次のページへ送ります(必要ならページを追加)

設定

config/imehotfix.properties(初回起動時に生成。項目が増えた場合は起動時に追記されます)

IME

キー 既定 効果
disableImeOutsideTextFields true テキスト欄にフォーカスが無い間 IME を切り離す。WASD が効かなくなる問題の対策なので通常は変更しない
suppressSystemCompositionWindow true Windows 既定の未確定文字列ウィンドウを隠す。IME が候補を出さなくなる場合はここを false
inlinePreedit true 未確定文字列をテキスト欄内に描画する。false にすると描画を Windows 側へ返す
pinCandidateWindowToCaret true 候補ウィンドウをキャレットに追従させる
filterWithComposition true 変換確定前の文字でも検索を絞り込む
commitCompositionOnBlur true クリックやフォーカス移動で入力欄を離れるとき、未確定文字列をその欄へ確定する
cancelCompositionOnFocusLoss true 画面が閉じるなど、確定先が無くなった場合に未確定文字列を破棄する
highlightOverflow true 確定時に入りきらない部分に色を付ける
verboseLogging false IME のウィンドウメッセージをすべてログに出す(診断用)

色 (0xAARRGGBB)

キー 既定 効果
targetTint 0x40FFFFFF 変換中の文節の背景
targetUnderline 0xFFFFFFFF 変換中の文節の下線
clauseUnderline 0xFFA0A0A0 確定済みの文節の下線
errorUnderline 0xFFFF5555 IME が解釈できなかった入力の下線
overflowWrapTint 0x6033CCFF 次の行 / ページへ送られる部分の背景
overflowDropTint 0x60FF3333 捨てられる部分の背景

#RRGGBB 形式でも指定できます。

Textbox Improvements

キー 既定 効果
signAutoWrap true 看板の自動折り返し
bookAutoPage true 本の自動次ページ

バージョンごとの違い

26.2 のバニラは既に IME に対応しています。この MOD が置き換えるのは以下です。

バニラ 26.2 この MOD
未確定文字の表示 入力欄の外に浮かぶ白いボックス 入力欄の中にインライン表示
変換確定前の検索 反映されない 反映される
看板の自動折り返し 無し あり
本の自動次ページ 無し あり
入りきらない文字の可視化 無し あり

既知の不具合

26.2 の本と羽ペンでのみ、以下が確認されています。検索窓・看板・チャットでは発生しません。

  • 未確定文字が長くなると、下線が前半に付かないことがある
  • 未変換のまま長く打ち続けると、変換が勝手に確定されることがある

回避したい場合は config/imehotfix.propertiesinlinePreeditfalse にしてください。本を含むすべての箇所でバニラの表示(浮動ボックス)に戻ります。

ビルド

1.20.1 は JDK 17、26.2 は JDK 25 が必要です。

cd forge-1.20.1     # または forge-26.2
gradlew build       # 成果物は build/libs/
gradlew runClient   # 開発クライアントを起動

構成

core/            MC に一切依存しない共通実装(Java 8 文法)
forge-1.20.1/    Windows の IMM32 を直接利用する実装
forge-26.2/      MC 自身の入力メソッド機能に乗る実装

core は Minecraft の API を一切参照しません。プラットフォーム差は ImeBackend の実装を差し替えることで吸収しており、26.2 対応では core を 1 行も変更していません。詳細と移植時の注意点は IMPLEMENTATION_PLAN.md を参照してください。

動作環境

  • 1.20.1: Windows のみ、64bit JVM 必須。macOS / Linux では何もせずバニラの挙動になります(クラッシュはしません)
  • 26.2: プラットフォーム制限なし
  • いずれもクライアント専用。サーバーには不要です

ライセンス

GNU Lesser General Public License v3.0 or later (LICENSE / LICENSE.GPL)

About

Proper IME (Japanese/CJK) input for Minecraft: inline composition text, candidate window that follows the caret, and no more IME swallowing your movement keys. Minecraft 1.20.1 / Forge.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages