画廊
打字真是太累啦!作者开头原话如此。
📖 关于
本模组为命令提供了一个更好的提示系统:匹配提示的词语首字母。
本模组为客户端模组(即不需要服务器安装),同时支持模组的命令以及数据包或服务器插件提供的命令。
💡 使用方法
通过只输入其中几个词语的首字母来输入由多个词语组成的命令/参数。
例如:如果你想输入 /gamerule doDaylightCycle false,你可以输入:
/gr <Ctrl>+<空格键> dc <Ctrl>+<空格键> f <回车>(不要对键位疑惑,下面会讲)
一般来说,只输入每个词语的首字母都可以应付大部分情况,并且输入每个单词的两个开头字母几乎可以解决任何的歧义。尝试只输入几个首字母很容易,你很快就会习惯的!
如果你需要选择的提示并非第一个显示的提示,再输入几个字母就好。如果你用箭头来选择你想要的提示,那你就大错特错了(在浏览可用的提示时箭头才是方便的选择)。
这就是代码编辑器(地球上最懒惰的人——程序员——使用的工具)如何筛选自动补全提示的方法。而 Minecraft 的命令行也必不可少(你看,游玩 Minecraft 的时候我很懒,懒到甚至一时兴起做了这个模组,因为关闭天气实在是太麻烦了)。
⌨ 键盘快捷键
本模组也允许你通过<Ctrl>+<空格>和<回车>来补全提示,而不是 Minecraft 默认使用的<Tab>键。
有时候 Tab 键按起来有点儿远了。
<回车>键只有当前指令被认为是非法(你的命令文本显示为红色)的时候才被用作补全提示。否则将会被用作执行当前的命令。
在处理只有服务器知道是否补全的命令时,本模组可能会补全提示失败,例如 创世神 的命令使用<Args>参数类型对可变参数进行分组。不幸的是,客户端无法判断这些命令是否补全(你会注意到命令文本不是红色的,这种情况下使用 Tab 键就好了)。
如果你使用<Ctrl>+<空格>进行补全,本模组会自动为你添加后方的空格(棒不棒呀?)(这个特性是刻意的,相信我,绝对不是因为我总是忘记输入空格后意识到大部分情况下这是一个很方便的功能)。
✨ 它是如何工作的?
模组会向服务器请求两次命令的补全。一次省略你上一次输入的参数(盲查),另一次包含全部内容用作保证(详查)。解释一下,补全是会向服务端请求的,服务端的补全在进行提供补全的操作时,是可以获得命令之前所有输入的参数的,有的指令提供的补全会与之前的参数有联系,第一次盲查可能会漏特定参数,所以才会有第二次详查。
然后我们假设盲查过程服务端已经回复所有可能的补全,在客户端对补全进行智能的过滤和排序。
原理图
如果服务器提供的详细列表中存在任何与没有被我们的算法所匹配的提示(非常罕见),模组也会在末尾以不同的颜色显示这些提示,因此你永远不会看不到任何自己就提供智能建议的潜在复杂命令(我从未见过这种情况发生)。主要是服务端的命令在提示是无法获取到当前参数输入的内容,只能获取之前的参数的内容,可能是因为实时参数会频繁的发包。而客户端不同,可以获取当前参数的内容并实时更新。嗯,我之前想做过服务端的智能提示插件,但悲剧的发现服务端无法获取实时参数。
对于包含多个单词的参数,它会第三次查询,仅省略最后一个单词(单词查询),但这只是单词和参数之间一个很小的技术区别。
为了过滤提示,本模组会根据你输入的部分文本来通过两种方法来匹配提示:
✂ 文本是如何拆分的?
当参数使用常见的分隔策略时,很容易拆分为单词。例如:
但是,大多数 Minecraft 命令并不在上方类别中,而是使用平写(例如:/gamerule),即没有任何分隔。
不幸的是,除非你有一个字典,否则系统地切分平写是不可能的。 这就是为什么本模组尝试使用已知单词列表来切分平写,这些单词可以被资源包覆盖(参见 Wiki)。 默认情况下,它支持 Minecraft、Fabric、(Neo)Forge 和 创世神 命令中使用的大多数单词,并且大多数情况下不会造成任何问题。
请随时报告任何单词切分不正确的问题。
📋 提示是如何排序的?
提示根据以下标准进行排序:
单词首字母匹配的显示在所有位置匹配之前 (doWeatherCycle > sendCommandFeedback);
优先显示首字母匹配更多的提示(doInsomnia >disableRaids);
优先显示相同首字母能匹配多于一个单词的提示 (doDaylightCycle > doWeatherCycle);
优先显示词数更少的提示(doInsomnia > doImmediateRespawn);
优先显示匹配内容更靠近开头的提示(gamemode > defaultgamemode);
优先显示更短的提示(tp >tell)。
否则,建议将按照默认顺序(通常按字母顺序)进行排序(fallDamage > fireDamage)。
目前无法自定义此顺序。 如果你有任何改进建议,请随时告诉我。 定下这些标准背后的原因是在输入缩写时能更加符合预期,并通过输入更多缩写来消除歧义。
🎨 自定义
提示根据 completion_style.json 文件中定义的样式高亮显示,该样式可以被资源包覆盖(请参阅 Wiki)。
默认情况下,提示中匹配的内容会以蓝色高亮显示。
查询部分的替代匹配(doDaylightCycle)、所有位置匹配(sendCommandFeedback)和意料外的服务器提示均以深青色高亮显示。
此外,如果提示以一个单词作为前缀开头,后跟冒号(例如命名空间),如果没有匹配,否则它将以深灰色高亮显示(minecraft:golden_apple)。
❓ 帮助
本模组有一个 Wiki,你可以查阅。
当然,如果你有问题,或者只是想问声好,也可以加入我们的 Discord 服务器。
🤝 支持本项目
如果你想支持本项目,只需要分享给你的朋友们!