游戏相关 已自动关闭

这个监听器打开ActionFormData表单的脚本怎么写

EnderT***Lv.2 注册会员 发表于 2025-7-1 · 最后回复 2025-7-4 IP:山东省 1,584 5
88铁粒
本帖最后由 EnderTrekker 于 2025-7-2 16:25 编辑

我的想法是,当在聊天栏输入“菜单”二字的时候,打开这个菜单表单,表单的标题是菜单,里面有两个按钮,当玩家点击第一个按钮(开启)执行指令/tag @s add oy ,当玩家点击第二个按钮(关闭)执行指令/tag remove oy,下面是我原本写的一个,但是就是不行,找AI帮我改也没改好:
  1. import { world } from "@minecraft/server";
  2. import { ActionFormData } from "@minecraft/server-ui";
  3. //表单定义
  4. class SoulMenu {
  5.     static showMainMenu(player) {
  6.         const form = new ActionFormData()
  7.             .title("§l§a菜单")
  8.             .body("§7选择操作:")
  9.             .button("§a开启")
  10.             .button("§c关闭");
  11.         
  12.         form.show(player)
  13.             .then((response) => {
  14.                 if (response.canceled) return;
  15.                
  16.                 const commands = {
  17.                     0: { cmd: "tag @s add outofbody" },
  18.                     1: { cmd: "tag @s remove outofbody" }
  19.                 };
  20.                
  21.                 if (commands[response.selection]) {
  22.                     player.runCommandAsync(commands[response.selection].cmd)
  23.                         .then(() => player.sendMessage("§a操作成功!"))
  24.                         .catch(console.error);
  25.                 }
  26.             })
  27.             .catch(console.error);
  28.     }
  29. }
  30. //监听
  31. world.beforeEvents.chatSend.subscribe((event) => {
  32.     if (event.message === "帮助") {
  33.         event.cancel = true;
  34.         event.sender.sendMessage(HELP_MESSAGE);
  35.         return;
  36.     }
  37.    
  38.     if (event.message === "菜单") {
  39.         event.cancel = true;
  40.         SoulMenu.showMainMenu(event.sender);
  41.     }
  42. })
复制代码

 UI.js (1.26 KB, 下载次数: 8)
我是一个新手开发者,对代码很多都不太了解,如果有会修改的麻烦帮忙修改一下,谢谢!!!

最佳答案

查看完整内容

现在没有什么方便的办法能在玩家在聊天栏发出特定消息之后打开菜单,因为打开菜单的优先级貌似是低于聊天栏的优先级的,在玩家打开聊天栏时调用打开菜单的方法没有作用。一个比较好的办法是换成自定义命令解决,这时候需要system.run(() => SoulMenu.showMainMenu(event.sender));这样
回复 5 最早 最新 只看楼主
Cat_A*** Lv.4 高级会员
2025-7-1 21:55:48 · 来自手机 IP:天津
现在没有什么方便的办法能在玩家在聊天栏发出特定消息之后打开菜单,因为打开菜单的优先级貌似是低于聊天栏的优先级的,在玩家打开聊天栏时调用打开菜单的方法没有作用。一个比较好的办法是换成自定义命令解决,这时候需要system.run(() => SoulMenu.showMainMenu(event.sender));这样
2# 2025-7-1 21:55:48 回复 收起回复
EnderT*** 楼主Lv.2 注册会员
2025-7-4 14:17:17 · 来自手机 IP:山东省
Cat_Anchor 发表于 2025-7-3 17:02
现在没有什么方便的办法能在玩家在聊天栏发出特定消息之后打开菜单,因为打开菜单的优先级貌似是低于聊天栏 ...

具体怎么改呢,不太会啊,这个自定义指令东西我试了试,不会写网上也没找到合适的教程
3# 2025-7-4 14:17:17 回复 收起回复
EnderT*** 楼主Lv.2 注册会员
2025-7-4 14:17:55 · 来自手机 IP:山东省
Cat_Anchor 发表于 2025-7-3 17:02
现在没有什么方便的办法能在玩家在聊天栏发出特定消息之后打开菜单,因为打开菜单的优先级貌似是低于聊天栏 ...

另外感谢大佬回复
4# 2025-7-4 14:17:55 回复 收起回复
您需要登录后才可以回帖 登录 | 立即注册
本版积分规则