智能补全

智能补全

更好的Minecraft命令补全

工具

因为打字实在太费劲了

Smart Completion

Available for Minecraft 1.16 - 26.2 Available for [Neo]Forge Available for Fabric Side: Client (Not needed in servers) License GitHub Download from CurseForge Join the Discord

📖 关于

客户端模组,为命令提供更好的自动补全建议。

支持来自数据包或服务器插件的模组命令和自定义命令,且无需在服务器上安装即可使用。

💡 使用方法

若要输入由多个单词组成的命令/参数,只需输入其各个单词的几个首字母。

例如,如果你想输入 /gamerule doDaylightCycle true,可以输入 /gr dc t。

输入 `/gr dc t` 会得到 `/gamerule doDaylightCycle true`

⌨ 键盘快捷键

除了 <Tab> 之外,你还可以使用 <Ctrl>+<Space> 来接受建议,它会自动插入一个空格,以便你开始输入下一个参数。

此外,如果当前命令已知是不完整的(你的文本显示为红色),按下 <Enter> 将接受选中的建议(如果有的话),而不是尝试执行一条无效命令。

默认情况下,当你某时要编辑较早的参数时,使用 <Ctrl>+<Space> 或使用鼠标中键点击来接受建议,还会清除光标之后的剩余文本。此行为可以按按键/鼠标按钮进行配置。

🔀 区分建议

为了区分不同建议,你可能需要为每个单词输入多于一个字母。

例如,要输入 fireDamage 而非 fallDamage(输入 fd 时它排在前面),你可以输入 fid。

通过输入更多字母来区分 `[f]all[D]amage` 和 `[f]ire[D]amage`

一般来说,多打几个字母让你想要的建议排到列表最前面,比使用方向键/用 <Tab> 循环选择要快得多,因为打字可以形成肌肉记忆。

随着时间推移,你会习惯输入常用命令所需的最少字母数,输入它们将会变得轻而易举。

🔍 浏览建议

由于你输入的单词不必位于所输入名称的开头,相比于 Minecraft 建议通常的工作方式,你可能会发现更多有用的建议。

例如,如果你输入 /give @p wood,你会看到所有包含以 wood 开头的单词的物品建议(例如 oak_[wood]),而不仅仅是名称本身以 wood 开头的物品(例如 [wood]en_axe)。

玩家输入 `/give @p wood` 时提供的建议

此外,如果你的查询没有匹配到某个建议的任何一个首字母,它还会在建议内部的任意位置进行模糊匹配,这些匹配会列在智能匹配之后。当你并不确切知道自己在找什么时,这很有帮助。

🎁 额外功能

本模组默认还会反转建议的顺序,使最相关的建议离输入栏最近,也就是你的目光已经所在之处。

如果你觉得这太令人困惑,可以使用以下命令禁用它:

/smartcompletion invert_suggestion_order false

它还会防止鼠标在建议出现于其下方时选中它们,这是一个老 bug,让小窗口中输入命令变得不必要地困难。

✨ 它是如何工作的?

对于你输入的每条命令,我们会向服务器请求建议两次。一次省略你为最后一个参数输入的内容(盲查询),另一次包含所有内容作为保证(知情查询)。大多数情况下只会发送一次请求,因为我们还会在你输入时缓存请求,以减少延迟和建议列表的闪烁。

然后,我们假设服务器会回复盲查询的所有可能建议,并在客户端对建议进行智能过滤和排序。

如果知情列表中有任何未被我们的过滤匹配的意外建议,它们也会以不同的颜色显示,这样你绝不会漏看来自可能提供自己智能建议的复杂命令的任何建议。

为了过滤建议,我们使用两种方法:

  • 在你的查询片段与建议各部分的首字母之间进行智能匹配(gr 匹配 [g]ame[r]ule)(就像任何代码编辑器中的补全那样)
  • 在建议内部对你查询的每一部分进行弱搜索(lock on 匹配 b(lock)Explosi(on)DropDecay)(当你不确定在找什么时很有帮助)

✂ 单词是如何拆分的?

我们在任何非字母字符处拆分单词,同时在 camelCase 单词处拆分。

此外,如果一条命令无法以这种方式拆分,我们会假设它是以 flatcase 书写的,就像大多数 Minecraft 命令那样。

不幸的是,除非你有一本词典,否则系统地拆分 flatcase 是不可能的。这就是为什么我们使用一个小型词典,包含 Minecraft、Fabric、[Neo]Forge 和 WorldEdit 命令所用的单词,以尝试将命令拆分为单词。

此词典可以被资源包覆盖(见 wiki),但如果遇到单词未被正确拆分的问题,欢迎随时报告。

📋 建议是如何排序的?

建议按照以下标准排序,以最先适用者为准:

  1. 更靠近光标的建议显示在前面(/give @p chest 会先建议 [ 再是 minecart_chest)

  2. 单词首字母的匹配显示在回退匹配之前([d]oWeather[C]ycle > sen[dC]ommandFeedback)

  3. 超过某些阈值的显著匹配显示在前面([app]le > [a]cacia_[p]ressure_[p]late)

  4. 首字母匹配更多的匹配显示在前面([d]o[I]nsomnia > [di]sableRaids)

  5. 某些首字母本可以匹配多个单词的匹配显示在前面([d]o(D)aylight[C]ycle > [d]oWeather[C]ycle)

  6. 单词更少的建议显示在前面([d]o[I]nsomnia > [d]o[I]mmediateRespawn)

  7. 匹配更靠近建议开头的显示在前面([g]ame[m]ode > default[g]ame[m]ode)

  8. 更短的建议显示在前面([t]p > [t]ell)

  9. 否则,建议按照服务器提供的原始顺序显示**(通常是字母顺序)**([f]all[D]amage > [f]ire[D]amage)。

目前无法自定义此顺序。如果你有任何改进建议,请告诉我。这些标准背后的逻辑是符合自然预期,并让你能通过立即输入更多首字母来解决冲突歧义。

🎨 自定义

建议根据 style.json 文件中定义的样式进行高亮显示,该文件可以被资源包覆盖(见 wiki)。

默认情况下,建议中的匹配([g]ame[r]ule)以蓝色高亮显示。

某个查询部分的替代匹配([d]o(D)aylight[C]ycle)、回退匹配(sen[dC]ommandFeedback)以及意外的服务器建议都以深青色高亮显示。

此外,如果某个建议以一个单词前缀开头,后跟一个冒号(即资源位置命名空间),它将以深灰色高亮显示,除非被匹配({minecraft:}[g]olden_[ap]ple)。

❓ 帮助

本模组有一个 wiki,你可以查阅。

另外,如果你遇到任何问题,或者只是想打个招呼,欢迎来我们的 Discord 服务器 逛逛。

🤝 支持此项目

如果你想支持此项目,把它分享给你的朋友们吧!