Minecraft基岩版2.0.0-beta脚本API运行命令权限问题求助
解决Minecraft基岩版脚本API取消聊天并执行命令的权限问题
核心问题在于world.beforeEvents.chatSend的回调处于只读上下文,无法直接调用player.runCommand();而world.afterEvents.chatSend虽为读写上下文,却不支持取消聊天消息。
可行的解决方案是利用system.run()将命令执行逻辑转移到读写阶段:
"use strict"; import { world, system } from "@minecraft/server"; world.beforeEvents.chatSend.subscribe((event) => { event.cancel = true; const player = event.sender; // 通过system.run将命令执行放到读写上下文 system.run(() => { try { player.runCommand("say hello"); } catch (err) { console.error("命令执行失败: " + err); } }); player.sendMessage("已执行say hello命令"); });
原理说明
system.run()会把传入的回调函数安排到下一个游戏tick的读写阶段执行,既保留了beforeEvents.chatSend取消聊天消息的能力,又绕过了只读上下文的权限限制。添加try-catch是为了捕获命令执行时可能出现的错误(比如权限不足、命令格式错误),避免脚本崩溃。
内容的提问来源于stack exchange,提问作者rawsome1234
相关产品推荐
相关产品推荐

