• 欢迎加入MineBBS QQ讨论群:点击查看所有的官方讨论群
  • 我们将于近期对服务器进行迁移,服务可能中断至多2日。请各位安排好自己的访问计划,造成不便敬请谅解!
  • MineBBS入站考试已经上线!想要成为【正式会员】解锁更多功能吗?快来参与吧!【点我去看】

教程攻略 Minecraft Bedrock Script API 初学者入门指南

[MD] # Minecraft Bedrock Script API 初学者入门指南 ## 1. 什么是 Minecraft Script API? Minecraft Bedrock Script API(简称 SAPI)是一套允许你使用 JavaScript/TypeScript 编写脚本,扩展和自定义 Minecraft 游戏体验的工具。通过脚本,你可以: - 创建自定义游戏机制 - 控制实体、方块和物品 - 构建动态用户界面 - 响应游戏事件 - 创建全新的维度空间 ## 2. 准备工作 ### 2.1 所需工具 - **Minecraft: Bedrock Edition**(版本 1.21.80 或更高) - **文本编辑器** - **行为包**结构知识 ### 2.2 创建行为包 1. 在 `com.mojang/development_behavior_packs` 文件夹中创建你的行为包 2. 创建必要的 `manifest.json` 文件 3. 启用 Beta APIs 实验性功能(某些 API 需要) ### 2.3 基础 `manifest.json` 配置 ```json { "format_version": 2, "header": { "name": "我的脚本包", "min_engine_version": [1, 21, 80] }, "modules": [ { "type": "script", "language": "javascript", "entry": "scripts/main.js", "version": [1, 0, 0], "uuid": "生成唯一的UUID" } ], "dependencies": [ { "module_name": "@minecraft/server", "version": "beta" }, { "module_name": "@minecraft/server-ui", "version": "2.0.0" } ] } ``` ## 3. 基础概念 ### 3.1 游戏循环和 Ticks Minecraft 以 **tick** 为单位运行游戏逻辑: - 1 秒 = 20 ticks - 游戏循环每秒运行 20 次 ### 3.2 第一个脚本 创建 `scripts/main.js`: ```javascript import { world, system } from "@minecraft/server"; function mainTick() { if (system.currentTick % 200 === 0) { // 每10秒 world.sendMessage("Hello from Script API!"); } system.run(mainTick); // 设置下一次运行 } system.run(mainTick); // 启动游戏循环 ``` ### 3.3 变量和函数 ```javascript let counter = 0; // 全局变量 function incrementCounter() { counter += 1; return counter; } // 使用 const 定义不可变变量 const MAX_COUNT = 100; ``` ## 4. 核心 API 模块 ### 4.1 @minecraft/server 模块 这是最核心的模块,包含: - **world** - 世界操作 - **system** - 系统功能和时间管理 - **Player** - 玩家对象 - **Entity** - 实体对象 - **Dimension** - 维度操作 - **Block** - 方块操作 等等。 ### 4.2 基本导入模式 ```javascript import { world, system } from "@minecraft/server"; ``` ## 5. 事件系统 ### 5.1 事件类型 - **Before Events**(前事件)- 在动作发生前触发,可以取消 - **After Events**(后事件)- 在动作发生后触发,用于响应 ### 5.2 执行权限 了解不同的执行模式很重要: | 执行模式 | 使用场景 | API 访问限制 | |---------|---------|-------------| | **受限执行** | Before 事件、属性获取器 | 只能访问有受限执行权限的 API | | **早期执行** | 世界启动时、自定义组件注册 | 只能访问有早期执行权限的 API | | **默认执行** | After 事件、协程 | 可以访问所有 API | ### 5.3 事件订阅示例 ```javascript // Before 事件 - 可以取消 world.beforeEvents.playerBreakBlock.subscribe((event) => { console.log(`玩家 ${event.player.name} 试图破坏方块`); // event.cancel = true; // 可以取消事件 }); // After 事件 - 用于响应 world.afterEvents.playerJoin.subscribe((event) => { world.sendMessage(`欢迎 ${event.playerName} 加入游戏!`); }); ``` ## 6. 用户界面 (UI) ### 6.1 传统 UI 系统 ```javascript import { ActionFormData } from "@minecraft/server-ui"; function showMenu(player) { const form = new ActionFormData() .title("主菜单") .body("请选择一个选项") .button("开始游戏") .button("设置") .button("退出"); form.show(player).then((response) => { if (!response.canceled) { switch(response.selection) { case 0: startGame(player); break; case 1: openSettings(player); break; case 2: exitGame(player); break; } } }); } ``` ### 6.2 数据驱动 UI (DDUI) - 现代方法 DDUI 提供了更动态、响应式的 UI: ```javascript import { CustomForm, Observable } from "@minecraft/server-ui"; function showSettings(player) { const volume = Observable.create<number>(50, { clientWritable: true }); const musicEnabled = Observable.create<boolean>(true, { clientWritable: true }); CustomForm.create(player, "设置") .slider("音量", volume, 0, 100, { step: 5 }) .toggle("启用音乐", musicEnabled) .button("保存", () => { console.log(`音量: ${volume.getData()}, 音乐: ${musicEnabled.getData()}`); }) .show() .catch(console.error); } ``` ### 6.3 DDUI 的优势 - **响应式数据绑定** - UI 自动更新 - **内联回调** - 代码更清晰 - **动态控件** - 运行时显示/隐藏/启用/禁用控件 - **统一表单类型** - CustomForm 处理大多数场景 ## 7. 高级功能 ### 7.1 自定义维度 ```javascript import { system } from "@minecraft/server"; const CUSTOM_DIMENSION_ID = "mypack:void_arena"; system.beforeEvents.startup.subscribe((event) => { // 在启动时注册自定义维度 event.dimensionRegistry.registerCustomDimension(CUSTOM_DIMENSION_ID); }); // 世界加载后构建平台 world.afterEvents.worldLoad.subscribe(() => { const dim = world.getDimension(CUSTOM_DIMENSION_ID); // 构建安全着陆区域 buildPlatform(dim); }); ``` ### 7.2 生成实体 ```javascript function spawnEntityAtPlayer(player) { const dimension = player.dimension; const location = player.location; dimension.spawnEntity("minecraft:fox", location); } ``` ### 7.3 方块操作 ```javascript function placeBlock(dimension, location, blockId) { const block = dimension.getBlock(location); if (block) { const permutation = BlockPermutation.resolve(blockId); block.setPermutation(permutation); } } ``` ## 8. 开发工作流和最佳实践 ### 8.1 热重载 使用 `/reload` 命令重新加载脚本,无需重启世界: ```javascript // 使用模运算而不是固定 tick,便于热重载测试 if (system.currentTick % 200 === 0) { // 每10秒执行的代码 } ``` ### 8.2 错误处理 ```javascript try { // 可能出错的代码 dimension.spawnEntity("invalid:entity", location); } catch (error) { console.error(`生成实体失败: ${error}`); world.sendMessage("§c发生错误,请检查控制台"); } ``` ### 8.3 调试技巧 1. 使用 `console.log()` 输出信息 2. 在 Visual Studio Code 中使用调试器 3. 利用 `world.sendMessage()` 显示游戏内提示 4. 使用格式化代码(§ 符号)增强可读性 ### 8.4 性能考虑 - 避免每 tick 执行繁重操作 - 使用 `system.runInterval()` 控制执行频率 - 及时清理事件订阅 - 使用局部变量而非全局变量 ## 9. 下一步学习 ### 10.1 推荐学习路径 1. **掌握 JavaScript/TypeScript 基础** 2. **完成官方教程**: - Introduction to Scripting - Next Steps: Scripting with TypeScript - Building with Custom Components 3. **探索 API 文档**: - `@minecraft/server` 模块参考 - `@minecraft/server-ui` 模块参考 4. **查看示例代码**: - [Minecraft Samples GitHub](https://github.com/microsoft/minecraft-samples) ### 10.2 进阶主题 - **TypeScript 开发环境配置** - **自定义组件系统** - **多人游戏感知脚本** - **性能优化和调试** - **与其他创作者工具集成** ### 10.3 社区资源 - [Minecraft Creator Documentation](https://learn.microsoft.com/en-us/minecraft/creator/) - [Minecraft Discord 社区](https://discord.gg/minecraft) - [MCTools.dev 代码沙盒](https://mctools.dev/) ## 结语 Minecraft Script API 为创作者提供了强大的工具来扩展游戏体验。从简单的自动化脚本到复杂的自定义游戏模式,可能性是无限的。记住: 1. **从简单开始** - 先实现小功能,逐步扩展 2. **测试频繁** - 使用热重载快速迭代 3. **参考文档** - API 文档是你的最佳朋友 4. **参与社区** - 与其他创作者交流学习 祝你创作愉快! [/MD]
 
内容版权许可
CC BY-NC-SA 署名-非商业性使用-相同方式共享
对于BeforeEvents可以@minecraft/server.system.run从而在当前或下一个中进一步使用API(这也是大部分作者的常用的手段)
 
[MD] 事实上将新维度创建放在这里是我的错,这只是为了让新手有更多的兴趣,但如果真要尝试的话,请注意: 1. 这些 API 目前处于实验阶段 2. 目前只能注册虚空维度 3. 较为复杂、困难 如果真想尝试,详见[官方文档](https://learn.microsoft.com/en-us/minecraft/creator/documents/scripting/custom-dimension-api-tutorial?view=minecraft-bedrock-experimental)。 [/MD]
 

在线会员

  • mcmanzi
  • jimi1104
后退
顶部 底部