BE教程

利用ScriptAPI为MCBE Addon 加入新的药水(实现使用物品后执行指令)

Saka***版主 发表于 2024-10-26 · 最后回复 2024-10-29 IP:广东省 5,089 5
AI 速览2026-09-27 02:31 生成

用ScriptAPI给MCBE Addon加自定义药水,实现饮用后执行指令

这篇教程介绍如何用Script API为基岩版Addon添加自定义药水,思路是监听物品使用事件并执行指令来赋予玩家药水效果,而不是直接做药水效果。相比参考网易教程或金苹果的做法,这种方式能避免格式版本落后、喝药后玻璃瓶被一并消耗、创造模式分类混乱等问题。教程涵盖启用SAPI、配置物品JSON、编写JS代码、打包测试等步骤,并附有演示组件,适合有一定Addon开发基础的玩家参考。

获取方式
  • 附件demo-v4.mcaddon为免费演示组件,含自定义药水与可疑的糖果
  • 行为包manifest需补充SAPI配置,版本号越高要求游戏版本越新
  • 含alpha或beta字样的版本需开启测试版API,后续更新可能失效
  • 使用演示组件时需确认行为包和资源包均已正确加载
本卡片由 AI 阅读本帖后生成,可能存在疏漏,请以帖子正文为准。
本帖最后由 Sakarwei 于 2024-10-26 13:49 编辑

前言:这里介绍的是加入新的药水,不是药水效果。

不知道有多少人想要添加自定义药水,然后就根据[网易我的世界的Addon教程开发加入的,或者参考金苹果制作加入。
彼链接:https://mc.163.com/dev/mcmanual/mc-dev/mconline/15-玩法组件教程【新版】/8-自定义物品/2-制作一个新药水.html


但是这样做的话有很多缺点,比如说:
  • o 格式版本落后,适配麻烦,或导致插件包资源混乱。
  • o 不可以要求使用后转化成为玻璃瓶,导致玩家喝下药水的时候把玻璃瓶子一并吃掉,浪费玻璃资源。(虽然可再生,但是玻璃再生途径非常有限)
  • o (似乎)不能调整物品细分分类,创造模式菜单下不能和原版的药水在一起。

今天我想告诉大家:Minecraft 加入自定义药水,其实有更好的打开策——
利用 Script API 编写物品使用事件并通过执行指令赋予玩家药水效果。

注:Js 和 Json 非字符串内的“//”后的内容是注释,删除、修改和保留都不影响代码解析和执行。
〇、启用 SAPI。


行为包
侧 manifest.json 需要补充配置
  1. "modules": [
  2.         // 其它成分省略
  3.         {
  4.                 "type": "script",
  5.                 "language": "javascript",
  6.                 "uuid": "53616b61-1302-2024-1358-0241026551d7",
  7.                 "entry": "scripts/start.js", // 文件名可以修改
  8.                 "version": [0,0,1]
  9.         }
  10. ]
  11. "capabilities": ["script_eval"],
  12. "dependencies":[
  13.                 // 其它成分省略
  14.                 {"module_name": "@minecraft/server","version": "1.8.0"} // 标注甲
  15.         ]
复制代码
标注甲:
version 可以适当改动。版本号越高,要求版本越新。
其中,含“alpha”“beta”字样的版本号,需要打开“测试版API”才能玩耍,并且后续 SAPI 更新后的版本可能不能正常运行
其余版本不需要打开“测试版API”,后续更新也不必针对适配。

一、加入物品
(请加入物品部分参见其它教程)
在物品 JSON 中还需要加入部分调整:components 内 标注
  1. "minecraft:use_animation": "drink",
  2. "minecraft:food": {
  3. // 此处部分内容省略,可根据其它教程补全
  4.         "using_converts_to": "glass_bottle" // 规定使用后转化成原版的玻璃瓶
  5. }
复制代码

二、编写 JS 部分
  1. // 导入 Minecraft SAPI
  2. import * as Minecraft from '@minecraft/server';
  3. Minecraft.world.afterEvents.itemCompleteUse.subscribe(event=>{ // 这行之需要写一次,有什么要加,可参照下文格式加在这个花括号内。
  4.         if (event.itemStack.typeId == "【物品ID】"){event.source.runCommand(`【执行指令】`);} // 每一个物品加一行这个
  5.         // 指令以玩家身份执行。为了赋予玩家药水效果,我们要执行的指令是: effect @s 【效果ID】 【时间】 ……
  6.         // 其余类似,其余略。这里其实还可以有更多的花样,见演示包 bp/scripts/start.js 。
  7. })
复制代码

三、材质贴图、翻译、……(略,请见其它教程)
四、打包测试


演示展示:


其它说明:
o 使用附件演示组建时,注意确认行为包和资源包是否加载。只有二者都正确加载了才能正确运行。
o 附件演示组建还加入了一个“可疑的糖果”,食用后随即赋予一个列表内的药水效果。
o 本来我想改代码高亮的,但是因为论坛 code 和代码高亮的样式代码冲突,没搞。

demo-v4.mcaddon

7 KB, 下载次数: 62

回复 5 最早 最新 只看楼主
方***Lv.3 中级会员
2024-10-26 21:00:11 · 来自手机 IP:辽宁省
很好的教程呢
不过ScriptAPI的Entity类提供了添加状态效果的方法,我更喜欢这么写:

  1. if (event.itemStack.typeId === "【物品ID】"){
  2. event.source.addEffect(状态ID,持续时间,{
  3. amplifier: 效果等级,
  4. showParticles: 是否展示粒子
  5. });
  6. }
复制代码


2# 2024-10-26 21:00:11 收起回复
Sakarwei 2024-10-27 11:52 IP:广东省
回复 举报
看起来确实是可以的方法,虽说我还没验证。(对我这种追求效果的人能实现就算了,没研究那么多)
已注销_ehRl1k 2024-10-29 11:40 IP:安徽省
回复 举报
实际上追求效果可以直接写成枚举,这样更方便调用,写成指令估计为可能执行其他指令留空间
您需要登录后才可以回帖 登录 | 立即注册
本版积分规则