跳到正文

IMBlocker

一个帮助控制输入法的 Minecraft 模组

收藏

介绍

介绍由机器翻译自 Modrinth 原页面,仅供参考。

IMBlocker

英文描述

概述

IMBlocker 是一个致力于为 Minecraft 提供完整输入法功能并略微改善输入体验的模组。

功能

该模组的主要功能及平台兼容性如下:

  1. 根据当前输入上下文自动设置输入法状态。
  2. 监控聊天输入,检测到命令语法时自动设置临时英文状态。
  3. 使候选窗口能够跟随光标位置。
  4. 游戏内渲染输入法内容。

|功能|Windows|macOS|Linux (X11)|Linux (Wayland)|
|:—:|:—:|:—:|:—:|:—:|
|自动状态切换|支持|支持|支持|支持|
|命令自动英文|支持|支持|支持|支持|
|光标跟踪|支持|支持|支持|26.1+ 或 HDR Mod|
|游戏内输入法|支持|不支持|不支持|不支持|

注意:仅当你的输入法在独占全屏模式下存在显示问题时,我们才建议启用游戏内输入法。

特殊兼容处理

该模组包含以下平台特定的兼容处理:

  • 在 macOS/Linux(<26.3)上,当候选窗口显示时,防止非字符按键泄漏到游戏中。
  • 允许在调用 SDL_StopTextInput 后仍能向游戏输入字符。

与自定义 GUI 模组的兼容性

IMBlocker 通过统一的焦点管理系统和通用的控件抽象层,结合 Mixin 技术,为第三方文本控件提供完整的输入法功能。以下模组拥有与原版相同级别的输入法增强:

  • REI物品管理器
  • EMI
  • Axiom
  • Replay Mod
  • FTB Library
  • Meteor Client
  • LibGui
  • Reese’s Sodium Options
  • BlockUI
  • SuperMartijn642’s Core Lib
  • Notes
  • Essential Mod*
  • Armourer’s Workshop
  • ModernUI
  • LDLib2

*在 Fabric 上,你需要从其模组 JAR 的根目录中提取名为 “essential-.jar” 的文件,并仅将该文件放入你的模组文件夹中。

如果你使用的模组未在此列出,且其输入控件在获得焦点后无法激活输入法,请使用界面白名单作为临时解决方案并反馈。

26.1 之后提供了什么?

简而言之:IMBlocker 的焦点跟踪几乎精确无误,这对于设置输入法状态至关重要。此外,该模组提供了许多可自定义选项以及对第三方控件的兼容性,这些在原版代码中实现并不现实。

重要:在 26.3 之后,该模组可能对所有整合包玩家都必不可少,无论其使用何种语言。原因是自定义实现的文本输入控件无法被原版识别,从而无法在获得焦点时通知 SDL 后端,而 SDL_StopTextInput 会阻止所有字符输入。如果你是这类模组的开发者,我们建议仅实现基本的 SDL_StartTextInput 和 SDL_StopTextInput 相关内容,并在存在 IMBlocker 时有条件地禁用它们。使用现有 Minecraft API 的典型实现如下所示:

......
public class MyTextInputWidget {
    ......
    public void setFocused(boolean isFocused) {
        ......
        Minecraft.getInstance().textInputManager().onTextInputFocusChange(this, isFocused);
    }
}

IMBlocker 会自动将 Minecraft API 重定向到其专用实现。如需进一步的技术支持,请在 Discord 或 Github 上联系我们。

概述

IMBlocker 是一个致力于为 Minecraft 提供完整输入法支持并根据场景增强输入体验的模组。

功能

本模组当前包含的主要功能及跨平台支持情况如下:

  1. 自动根据当前输入上下文调整输入法的激活状态;
  2. 监测聊天栏文本是否为命令格式并自动切换临时中英文状态;
  3. 令输入法候选框能够实时跟踪文本光标;
  4. 游戏内渲染输入法 UI。

|功能序号|Windows|macOS|Linux (X11)|Linux (Wayland)|
|:—:|:—:|:—:|:—:|:—:|
|1|完全支持|完全支持|完全支持|完全支持|
|2|完全支持|完全支持|完全支持|完全支持|
|3|完全支持|完全支持|完全支持|26.1+ 或 HDR Mod|
|4|完全支持|不支持|不支持|不支持|

注意:游戏内输入法仅推荐在独占全屏模式下输入法自身 UI 有显示问题时启用,此功能在 26.3 以后仍会保留为可选项,需通过 Cloth Config 开启。

特殊修复

本模组当前主要包含以下特定平台问题的修复:

  1. 修复 macOS/Linux 下候选词显示时控制按键泄漏至游戏的问题(<26.3);
  2. 修复 SDL 后端下 SDL_StopTextInput 导致无法输入任何字符的问题。

与自定义界面模组的兼容性

本模组使用定制焦点管理系统以及通用组件抽象层配合 Mixin 技术对第三方模组内的自定义文本组件提供完整的输入法支持,目前以下模组拥有与原版相同级别的输入法增强:

  • REI物品管理器
  • EMI
  • Axiom
  • Replay Mod
  • FTB Library
  • Meteor Client
  • LibGui
  • Reese’s Sodium Options
  • BlockUI
  • SuperMartijn642’s Core Lib
  • Notes
  • Essential Mod*
  • Armourer’s Workshop
  • ModernUI
  • LDLib2

*在 Fabric 下使用此模组时需要手动使用压缩软件将其 JAR 根目录下名为“essential-”的文件提取到模组文件夹并移除原模组文件

如果您使用的模组未在此列出且其中的输入框无法在获得焦点后激活输入法,请先将屏幕白名单用作临时方案并进行反馈。

对于 26.1+ 版本的作用

简而言之,IMBlocker 拥有近乎完全精准的焦点管理策略,正确的焦点状态是能够正确设置输入法状态的必要条件。同时,本模组还提供多种原版不便实现的可定制选项以及大规模第三方组件的兼容性。

重要信息:从 26.3 开始,所有大型整合包玩家无论使用何种语言都可能需要安装此模组,因为 SDL 禁用输入法的实现会阻止所有字符的输入,这些自定义界面的模组中的文本组件会因为原版无法识别其焦点而无法通知 SDL 启用输入。若您是此类模组的开发者,我们推荐在检测到 IMBlocker 不 存在时仅在文本组件焦点发生变化时调用基本的 SDL_StartTextInput 和 SDL_StopTextInput 函数,基于现成 Minecraft API 的典型实现示例如下:

......
public class MyTextInputWidget {
    ......
    public void setFocused(boolean isFocused) {
        ......
        Minecraft.getInstance().textInputManager().onTextInputFocusChange(this, isFocused);
    }
}

IMBlocker 会自动将原版输入法 API 的调用重定向至其专有实现。更多技术支持请在 Discord 或 Github 上与我们联系。

评论

登录后评论和评分