附加包教程第十一期——物品:武器进阶
本帖最后由 782 于 2022-5-20 20:20 编辑物品(四)
武器进阶
一、前言
上一期,我们了解了武器的基本组件,
今天,我们就来给上一期制作的剑添加其他功能与事件。
本期教程假定读者已基本了解第八期(物品:基础)和上一期的内容。
提示:使用此附加包时,必须打开“假日创造者功能”实验性玩法!
static/image/hrline/line4.png
二、正文
“minecraft:weapon”组件
上一期是基础武器的教程,但你可能希望能够在游戏中显示剑会造成的伤害点数。
要做到这一点,需要添加“minecraft:weapon”组件,即使它只是空的,这也足以让mc在内部知道,这是武器。
因此,如果将上述组件添加到上一期制作的武器的json文件中,现在将在其工具提示中看到 +10攻击伤害。
你可能在想“你为什么不在上一期添加这个?”答案是,我们将扩充这个组件,在本期教程中添加更多很酷的东西,所以我想把它分开讲述。
添加伤害时事件
如果你想做这样的事情,我们需要利用“minecraft:weapon”组件,并在武器击中实体时执行一个事件。
就像这样:
"minecraft:weapon": {
"on_hurt_entity": {
"event": "demo:my_sword.hurt_entity"
}
}
我们添加这一部分之后,那么每次用这把剑伤害实体时,它都会引发事件demo:my_sword.hurt_entity。
你可以随心所欲地命名它,但如果你有很多事件,建议有一定规则地命名,比较常用的是“命名空间:物品.名称”
例如,在这个示例中,demo是命名空间,my_sword指定事件运用在什么物品上,hurt_entity是该物品的事件名称。
我们可以用事件做我们想做的事。在下面这个例子中,我将做三件事:
[*]25%的概率传送玩家
[*]传送后,发出一条消息,让玩家知道发生了什么事。
[*]消耗剑的耐久度
然后,回到my_sword.item.json,并在components部分之后添加一个像这样的新部分。
"events": {
"demo:my_sword.hurt_entity": {
"sequence": [
{
"randomize": [
{
"weight": 1,
"teleport": {
"target": "holder",
"max_range":
},
"run_command": {
"command": [
"tellraw @s{\\"rawtext\\":[{\\"text\\":\\"§a你的剑大显神威§r\\"}]}"
]
}
},
{
"weight": 4
}
]
},
{
"damage": {
"type": "durability",
"target": "self",
"amount": 1
}
}
]
}
}
详解:
“sequence”用于执行多个事件,是数组,内含各个事件的JSON对象。
“randomize”定义了多个随机运行的事件,是数组,内含各个事件的JSON对象。
这里面还有其他的内容:
“weight”表示执行事件的概率,填写整数。
“teleport”是事件的组成部分之一,表示传送实体。它里面有两个组件:
[*]“target”指传送的实体,填写字符串。
这里的“holder”表示“拿着该物品的生物”,也就是你。
[*]“max_range”指传送的最大范围,是一个数组。
顺序(应该)是。
“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”指定攻击生物但没有造成伤害的时候执行的事件。
static/image/hrline/line9.png
三、本期文件下载
行为包文件示例:
static/image/hrline/line2.png
预告:下一期会教大家制作自定义工具
大家的打赏是对楼主最好的鼓励!
附加包教程系列导航
上一期下一期
开始懵逼了 如何让武器右键后触发某个函数?
页: [1]