MC~蛟龙
总所周知,MC原版是可以获取玩家一些键位绑定的是什么键的
见: 原始JSON文本格式

同样,[color=var(--color-a-link)]net.md_5.bungee.api.chat.KeybindComponent类可以帮助我们创建按键绑定的组件,
然后通过聊天的方式发送 (是否可以不发送,单单只获取绑定的键位信息)

Adventure API 中的 MiniMessage 也可以帮助创建键位组件

不过,除了第一种可以用指令在非聊天地方显示键位信息
BungeeAPI和AdventureAPI似乎都得用聊天的方式发送才能显示

举个例子:用这样的MiniMessage信息
  1. <key:key.jump>
复制代码
放到Invero菜单 (支持MiniMessage) 显示的是
  1. key.jump
复制代码


究其原因,
大概是这类(指按键绑定、已翻译文本)的消息,
需要一个玩家对象(因为读取是玩家客户端信息)
但是大部分(我就没见过)菜单插件对这类信息的解析不会提供玩家对象。

如:
  1. <blockquote>fun String.translateFormattedMessage(player: Player, variables: Map<String, Any?> = emptyMap()) =
复制代码
所以说,它根本解析不出来这种信息

我也尝试过PAPI扩展,但是我不会。

那么?
该怎么办呢?






无敌三脚猫
是否可以不发送
不可以
除非有客户端mod和插件通信,把那些信息发到服务端来

MC~蛟龙
无敌三脚猫 发表于 2023-7-23 15:31
不可以
除非有客户端mod和插件通信,把那些信息发到服务端来

请仔细看https://minecraft.fandom.com/zh/ ... E%E7%BB%91%E5%AE%9A
谢谢
原版可以的,服务端也一定有办法

无敌三脚猫
MC~蛟龙 发表于 2023-7-23 15:53
请仔细看https://minecraft.fandom.com/zh/wiki/%E5%8E%9F%E5%A7%8BJSON%E6%96%87%E6%9C%AC%E6%A0%BC%E5% ...

你可能没看懂
我也不知道怎么跟你解释比较好譬如插一块牌子,json文本是{"score":{"name":"某人","objective":"某计分板"}}
  1. /setblock ~ ~ ~ minecraft:oak_sign{Text1:'{"score":{"name":"某人","objective":"某计分板"}}'}
复制代码
会被服务端自动解析成{"text":"分数"}
而如果json文本是{"keybind":"key.jump"}
  1. /setblock ~ ~ ~ minecraft:oak_sign{Text1:'{"keybind":"key.jump"}'}
复制代码
这样一块牌子插下来,其json文本仍是
{"keybind":"key.jump"},这都是可以用/data get看到的,只有客户端自己才知道把它解析成对应的按键名字
总之,如果没有客户端mod配合,服务端一定没有办法

无敌三脚猫

不过,如果不看你帖子内容(想在服务端获取客户端按键),只看标题的话,显示在gui里的字,无非是gui的标题、物品名字和lore,都是可以用这个json组件的,比如你可以拿到这样一个苹果自己看看
  1. /give @s apple{display:{Name:'{"keybind":"key.jump"}',Lore:['{"keybind":"key.sneak"}']}}
复制代码

MC~蛟龙
无敌三脚猫 发表于 2023-7-23 16:57
不过,如果不看你帖子内容(想在服务端获取客户端按键),只看标题的话,显示在gui里的字,无非是gui的标 ...

好吧,谢谢,不过为什么菜单我写上去却没有用,聊天好像也不行

无敌三脚猫
MC~蛟龙 发表于 2023-7-23 17:46
好吧,谢谢,不过为什么菜单我写上去却没有用,聊天好像也不行

Invero吗?可能有bug吧
Invero能不能写物品nbt,能的话,照我上面那种写法把nbt写上去就是