开启辅助访问     
收藏本站

站内搜索

搜索

Minecraft(我的世界)苦力怕论坛

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

 发表于 5 天前|显示全部楼层|阅读模式 IP:广东省
本帖最后由 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, 下载次数: 11

苦力怕论坛,感谢有您~
 发表于 5 天前 来自手机|显示全部楼层 IP:辽宁省
很好的教程呢
不过ScriptAPI的Entity类提供了添加状态效果的方法,我更喜欢这么写:

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


评分

参与人数 1铁粒 +10收起理由
 Saka*** + 10很给力!

查看全部评分

2#5 天前收起回复
Sakarwei4 天前IP:广东省
回复
看起来确实是可以的方法,虽说我还没验证。(对我这种追求效果的人能实现就算了,没研究那么多
奶糖也不是很甜前天 11:40IP:安徽省
回复
实际上追求效果可以直接写成枚举,这样更方便调用,写成指令估计为可能执行其他指令留空间
苦力怕论坛,感谢有您~
 发表于 5 天前 来自手机|显示全部楼层 IP:广东省
感谢楼主教程
3#5 天前回复收起回复
苦力怕论坛,感谢有您~
回复支持

使用道具举报

 发表于 前天 11:38 来自手机|显示全部楼层 IP:安徽省
大佬强大
4#前天 11:38回复收起回复
苦力怕论坛,感谢有您~
回复支持

使用道具举报

本版积分规则

本站
关于我们
联系我们
坛史纲要
官方
哔哩哔哩
技术博客
下载
网易版
安卓版
JAVA
反馈
意见建议
教程中心
更多
捐助本站
QQ群
QQ群

QQ群

访问手机版

访问手机版

手机版|小黑屋|系统状态|klpbbs.com

粤公网安备 44200002445329号 | 由 木韩网络 提供云服务 | GMT+8, 2024-10-31 02:39

声明:本站与Mojang以及微软公司没有从属关系

Powered by Discuz! X3.4 粤ICP备2023071842号