开启辅助访问      

站内搜索

搜索
热搜: 下载 1.19 1.20

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

[BE教程] 附加包教程第十一期——物品:武器进阶

782
发表于 2022-5-14 13:02:01 | 显示全部楼层 |阅读模式 IP:江苏省
本帖最后由 782 于 2022-5-20 20:20 编辑

物品(四)
武器进阶

一、前言
上一期,我们了解了武器的基本组件,
今天,我们就来给上一期制作的剑添加其他功能与事件。
本期教程假定读者已基本了解第八期(物品:基础)和上一期的内容。
提示:使用此附加包时,必须打开“假日创造者功能”实验性玩法!

二、正文
“minecraft:weapon”组件
上一期是基础武器的教程,但你可能希望能够在游戏中显示剑会造成的伤害点数。
要做到这一点,需要添加“minecraft:weapon”组件,即使它只是空的,这也足以让mc在内部知道,这是武器。
因此,如果将上述组件添加到上一期制作的武器的json文件中,现在将在其工具提示中看到 +10攻击伤害。

你可能在想“你为什么不在上一期添加这个?”答案是,我们将扩充这个组件,在本期教程中添加更多很酷的东西,所以我想把它分开讲述。

添加伤害时事件
如果你想做这样的事情,我们需要利用“minecraft:weapon”组件,并在武器击中实体时执行一个事件。
就像这样:
  1. "minecraft:weapon": {
  2.     "on_hurt_entity": {
  3.         "event": "demo:my_sword.hurt_entity"
  4.     }
  5. }
复制代码

我们添加这一部分之后,那么每次用这把剑伤害实体时,它都会引发事件demo:my_sword.hurt_entity。
你可以随心所欲地命名它,但如果你有很多事件,建议有一定规则地命名,比较常用的是“命名空间:物品.名称”
例如,在这个示例中,demo是命名空间,my_sword指定事件运用在什么物品上,hurt_entity是该物品的事件名称。
我们可以用事件做我们想做的事。在下面这个例子中,我将做三件事:
  • 25%的概率传送玩家
  • 传送后,发出一条消息,让玩家知道发生了什么事。
  • 消耗剑的耐久度

然后,回到my_sword.item.json,并在components部分之后添加一个像这样的新部分。
  1. "events": {
  2.     "demo:my_sword.hurt_entity": {
  3.         "sequence": [
  4.             {
  5.                 "randomize": [
  6.                     {
  7.                         "weight": 1,
  8.                         "teleport": {
  9.                             "target": "holder",
  10.                             "max_range": [8, 8, 8]
  11.                         },
  12.                         "run_command": {
  13.                             "command": [
  14.                                 "tellraw @s{\"rawtext\":[{\"text\":\"§a你的剑大显神威§r\"}]}"
  15.                             ]
  16.                         }
  17.                     },
  18.                     {
  19.                         "weight": 4
  20.                     }
  21.                 ]
  22.             },
  23.             {
  24.                 "damage": {
  25.                     "type": "durability",
  26.                     "target": "self",
  27.                     "amount": 1
  28.                 }
  29.             }
  30.         ]
  31.     }
  32. }
复制代码

详解:
“sequence”用于执行多个事件,是数组,内含各个事件的JSON对象。

“randomize”定义了多个随机运行的事件,是数组,内含各个事件的JSON对象。
这里面还有其他的内容:
“weight”表示执行事件的概率,填写整数。

“teleport”是事件的组成部分之一,表示传送实体。它里面有两个组件:
  • “target”指传送的实体,填写字符串。
    这里的“holder”表示“拿着该物品的生物”,也就是你。
  • “max_range”指传送的最大范围,是一个数组。
    顺序(应该)是[x, y, z]。

“run_command”是事件组成的部分之一,表示执行命令。
其中的“command”定义要运行的命令,是一个数组,里面可以填写带有命令的字符串。
要注意的是,如果要在命令中使用双引号,必须使用转义符号(\),否则会引发重大错误!

不知道大家有没有注意,在主事件下面还有一个空的事件,这个空的事件可以理解为虚拟事件
这个空的事件有一个重要的作用:调整概率。
我们有一个比重(weight)为1的主事件和第二个比重(weight)为4的第二个空事件,所以这说明有四分之一(25%)的概率执行主事件(传送玩家)。
如果我们使用比重(weight)为100的空事件,那么我们将有一百分之一(1%)的概率会执行主事件(传送玩家)。
如果我们没有第二个空事件,那么第一个事件的比重(weight)将被忽略,并且它会100%发生

后面还有一个“damage”事件,是为了减少剑的耐久度。
  • “type”指定伤害类型,填写字符串。
    这里的“durability”表示耐久度减少
  • “target”指定目标,填写字符串。
    这里的“self”表示物品本身
  • “amount”表示数量,填写整数。

拓展
在“minecraft:weapon”组件中,还可以添加其他内容
例如:
“on_hit_block”指定当破坏方块的时候执行的事件;
“on_not_hurt_entity”指定攻击生物但没有造成伤害的时候执行的事件。

三、本期文件下载
行为包文件示例: my_sword.item.json (2.22 KB, 下载次数: 56)

预告:下一期会教大家制作自定义工具

大家的打赏是对楼主最好的鼓励!

附加包教程系列导航
上一期  下一期

评分

参与人数 3铁粒 +120 收起 理由
WZMint + 100 我要这铁粒有何用
松饼nb + 10 讲的不错?????
千铭刻 + 10 可以的话作者做一个装备进化的模组吧(「・.

查看全部评分

苦力怕论坛,感谢有您~
回复

使用道具 举报

发表于 2022-12-2 07:33:48 来自手机 | 显示全部楼层 IP:河南省
开始懵逼了
2# 2022-12-2 07:33:48 回复 收起回复
苦力怕论坛,感谢有您~
回复 支持

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

QQ群

访问手机版

访问手机版

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

粤公网安备 44200002445329号 | 由 木韩网络 提供云服务 | GMT+8, 2024-4-29 19:42

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

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