我的世界Bedrock版自定义聊天命令失效,加载世界报错求助
解决Minecraft Bedrock 1.20.40自定义聊天命令加载报错问题
你遇到的TypeError: cannot read property 'subscribe' of undefined错误,核心原因是脚本未正确配置依赖权限或事件路径存在版本兼容问题,以下是具体解决方案:
1. 修正脚本代码
在1.20.40版本中,chatSend事件属于world.beforeEvents,但需增加玩家校验和异步命令错误处理,同时做版本兼容回退:
import { world, Player } from '@minecraft/server'; // 优先使用前置事件拦截聊天消息 if (world.beforeEvents.chatSend) { world.beforeEvents.chatSend.subscribe((eventData) => { const sender = eventData.sender; // 仅处理玩家发送的消息,避免控制台触发错误 if (!(sender instanceof Player)) return; switch (eventData.message.trim()) { case '!creative': eventData.cancel = true; sender.runCommandAsync('gamemode creative') .catch(err => console.error(`切换创造模式失败: ${err}`)); break; case '!survival': eventData.cancel = true; sender.runCommandAsync('gamemode survival') .catch(err => console.error(`切换生存模式失败: ${err}`)); break; default: break; } }); } else { // 版本兼容回退:若前置事件不存在则使用普通聊天事件 world.events.chatSend.subscribe((eventData) => { const sender = eventData.sender; if (!(sender instanceof Player)) return; switch (eventData.message.trim()) { case '!creative': sender.runCommandAsync('gamemode creative') .catch(err => console.error(`切换创造模式失败: ${err}`)); break; case '!survival': sender.runCommandAsync('gamemode survival') .catch(err => console.error(`切换生存模式失败: ${err}`)); break; default: break; } }); }
2. 修正插件manifest.json配置
这是关键的隐藏步骤,必须在manifest.json中声明正确的API版本和权限,否则脚本无法访问聊天事件:
{ "format_version": 2, "header": { "name": "Custom Commands", "description": "Gamemode switch chat commands", "uuid": "你的插件唯一UUID", "version": [1, 0, 0], "min_engine_version": [1, 20, 40] }, "modules": [ { "type": "script", "language": "javascript", "uuid": "你的模块唯一UUID", "version": [1, 0, 0], "entry": "index.js" } ], "dependencies": [ { "module_name": "@minecraft/server", "version": "1.12.0" } ], "capabilities": [ "minecraft:chat" ] }
min_engine_version需严格对应1.20.40版本dependencies中@minecraft/server的版本设为1.12.0(1.20.40对应的Script API版本)capabilities添加minecraft:chat权限,允许脚本读写聊天事件
额外注意事项
- 插件和模块的UUID需保证唯一,可在线生成随机UUID
- 测试时需确保世界开启"实验性玩法"中的"脚本API"选项
runCommandAsync是异步操作,必须添加catch处理权限不足等执行失败场景
内容的提问来源于stack exchange,提问作者Kere23
相关产品推荐
相关产品推荐

