利用ScriptAPI为MCBE Addon 加入新的药水(实现使用物品后执行指令)
本帖最后由 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 需要补充配置
"modules": [
// 其它成分省略
{
"type": "script",
"language": "javascript",
"uuid": "53616b61-1302-2024-1358-0241026551d7",
"entry": "scripts/start.js", // 文件名可以修改
"version":
}
]
"capabilities": ["script_eval"],
"dependencies":[
// 其它成分省略
{"module_name": "@minecraft/server","version": "1.8.0"} // 标注甲
]标注甲:
version 可以适当改动。版本号越高,要求版本越新。
其中,含“alpha”“beta”字样的版本号,需要打开“测试版API”才能玩耍,并且后续 SAPI 更新后的版本可能不能正常运行
其余版本不需要打开“测试版API”,后续更新也不必针对适配。
一、加入物品
(请加入物品部分参见其它教程)
在物品 JSON 中还需要加入部分调整:components 内 标注
"minecraft:use_animation": "drink",
"minecraft:food": {
// 此处部分内容省略,可根据其它教程补全
"using_converts_to": "glass_bottle" // 规定使用后转化成原版的玻璃瓶
}
二、编写 JS 部分
// 导入 Minecraft SAPI
import * as Minecraft from '@minecraft/server';
Minecraft.world.afterEvents.itemCompleteUse.subscribe(event=>{ // 这行之需要写一次,有什么要加,可参照下文格式加在这个花括号内。
if (event.itemStack.typeId == "【物品ID】"){event.source.runCommand(`【执行指令】`);} // 每一个物品加一行这个
// 指令以玩家身份执行。为了赋予玩家药水效果,我们要执行的指令是: effect @s 【效果ID】 【时间】 ……
// 其余类似,其余略。这里其实还可以有更多的花样,见演示包 bp/scripts/start.js 。
})
三、材质贴图、翻译、……(略,请见其它教程)
四、打包测试
演示展示:
成功加入药水并正确归类:(堆叠数量忘记调整了)
饮用后,药水转化成玻璃瓶,并正确赋予药水效果:
其它说明:
o 使用附件演示组建时,注意确认行为包和资源包是否加载。只有二者都正确加载了才能正确运行。
o 附件演示组建还加入了一个“可疑的糖果”,食用后随即赋予一个列表内的药水效果。
o 本来我想改代码高亮的,但是因为论坛 code 和代码高亮的样式代码冲突,没搞。 很好的教程呢[贴吧_大拇指]
不过ScriptAPI的Entity类提供了添加状态效果的方法,我更喜欢这么写:
if (event.itemStack.typeId === "【物品ID】"){
event.source.addEffect(状态ID,持续时间,{
amplifier: 效果等级,
showParticles: 是否展示粒子
});
}
[贴吧_滑稽] 感谢楼主教程[哔哩_脱单] 大佬强大[哔哩_脱单]
页: [1]