You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

我的世界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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:42:38