本帖最后由 结冰的离季 于 2022-6-24 01:22 编辑
控制台命令颜色提示是paper新加的功能
为了动态注册命令,我写了以下测试代码,不用管simpleCommandMap怎么来的,只需要知道它的类型是org.bukkit.command.SimpleCommandMap
出现的问题是控制台虽然补全完整了,但是是红色的,无论有没有子节点都是整个红,很容易误导以为命令不存在,即使重启也是一样,这个命令是可以正常使用的
像其他插件在配置里注册的命令补全完整就是灰色的
有没有办法让它变正常,或者是有没有别的动态注册命令正常的办法(就是不在plugin.yml声明)
感觉得翻paper代码= =
日志:
找到 github有类似issue,但没有解决:https://github.com/PaperMC/Paper/issues/6309
通过CommandAPI 代码 发现貌似跟 brigadier 有关 https://github.com/Mojang/brigadier/ 原版的命令系统
发现taboolib的注册也是使用commandmap,但是它却没问题,研究中...https://github.com/TabooLib/tabo ... rm/BukkitCommand.kt
解决方案及造成的原因
命令注册完运行代码:
复制代码原因是注册的代码并没有在服务端更新; paper控制台颜色高亮基于brigadier,而 CraftServer的public方法 syncCommands 包含了更新brigadier的代码,同时也更新玩家的
https://hub.spigotmc.org/stash/p ... raftServer.java#444,461
但是有个问题,1.13以下没有这个方法,需要注意。
控制台命令颜色提示是paper新加的功能
为了动态注册命令,我写了以下测试代码,不用管simpleCommandMap怎么来的,只需要知道它的类型是org.bukkit.command.SimpleCommandMap
出现的问题是控制台虽然补全完整了,但是是红色的,无论有没有子节点都是整个红,很容易误导以为命令不存在,即使重启也是一样,这个命令是可以正常使用的
像其他插件在配置里注册的命令补全完整就是灰色的
有没有办法让它变正常,或者是有没有别的动态注册命令正常的办法(就是不在plugin.yml声明)
感觉得翻paper代码= =
日志:
找到 github有类似issue,但没有解决:https://github.com/PaperMC/Paper/issues/6309
通过CommandAPI 代码 发现貌似跟 brigadier 有关 https://github.com/Mojang/brigadier/ 原版的命令系统
发现taboolib的注册也是使用commandmap,但是它却没问题,研究中...https://github.com/TabooLib/tabo ... rm/BukkitCommand.kt
解决方案及造成的原因
命令注册完运行代码:
- Bukkit.getServer().javaClass.getDeclaredMethod("syncCommands").invoke(Bukkit.getServer())
https://hub.spigotmc.org/stash/p ... raftServer.java#444,461
但是有个问题,1.13以下没有这个方法,需要注意。