782 发表于 2022-5-20 20:43:44

附加包教程第十四期——物品:盔甲进阶

本帖最后由 782 于 2022-5-24 21:19 编辑


物品(七)
盔甲进阶
一、前言
上一期,我们学习了盔甲的基础内容,今天就来教大家如何在佩戴多个盔甲时添加事件
这有点难,但如果你希望你的自定义盔甲表现得像RPG游戏中的盔甲,我们可以添加一些代码来检查我们是否配备了这套盔甲,并用它做很多的事情。
在本例中,我们将增加一个事件,将攻击者传送到附近的某个地方,并输出一条消息。
由于我们希望这在玩家被攻击时触发,我们需要向player.json文件添加一些代码。
这是一个巨大的文件,不幸的是,由于它将覆盖原有的文件,我们需要确保它包含所有的默认内容。
因此,在本例中将不包括整个player.json文件,本例将只包括部分需要添加到components和events部内容。
如果找不到原版player.json,可以在教程底部找到原版文件,并将其复制到附加包中即可。
要注意它的路径:行为包/entities/player.json
本期教程假定读者已经基本了解第十一期(物品:武器进阶)并制作上一期的全套盔甲。
提示:使用此附加包时,必须打开“假日创造者功能”实验性玩法!
static/image/hrline/line4.png
二、添加检测部分
存放于player.json#components组件内
...
//伤害检测
"minecraft:damage_sensor": {
    "triggers": {
      "on_damage": {
            "filters": {
                "all_of": [
                  {
                        //“test”指定条件判断的内容
                        "test": "has_equipment",
                        //“subject”指定条件判断的对象
                        "subject": "self",
                        // 在这里,“domain”指身体部位
                        "domain": "head",
                        // “operator”表示比较符号
                        "operator": "==",
                        // 物品标识符
                        "value": "demo:my_helmet"
                  },
                  {
                        "test": "has_equipment",
                        "subject": "self",
                        "domain": "torso",
                        "operator": "==",
                        "value": "demo:my_chestplate"
                  },
                  {
                        "test": "has_equipment",
                        "subject": "self",
                        "domain": "leg",
                        "operator": "==",
                        "value": "demo:my_leggings"
                  },
                  {
                        "test": "has_equipment",
                        "subject": "self",
                        "domain": "feet",
                        "operator": "==",
                        "value": "demo:my_boots"
                  }
                ]
            },
            // 如果在“filters”中的条件都匹配,则执行事件
            "event": "demo:armor_sets.my_custom.taken_damage"
      },
      // 这意味着即使条件匹配,仍会受到伤害
      "deals_damage": true
    }
}
...
这些组件在实体教程中(尤其是“filters”)会进行讲解
跟着注释,一步一步来就行了。
static/image/hrline/line3.png
三、添加事件部分
存放于player.json#events组件内
...
"demo:armor_sets.my_custom.taken_damage": {
    "randomize": [
      {
            "weight": 1,
            // 做一个事件序列以执行多个命令
            "sequence": [
                {
                  // 这将需要攻击者在伤害检测器中触发事件
                  "run_command": {
                        // 把实体传送走
                        "command": "spreadplayers ~~ 5 20 @s",
                        // 在攻击者上执行命令,而不是我们
                        "target": "other"
                  }
                },
                {
                  "run_command": {
                        "command": "tellraw @s{\\"rawtext\\":[{\\"text\\":\\"§a你的盔甲大显神威,敌人被打跑了\\"}]}"
                  }
                }
            ]
      },
      {
            // 虚拟事件,导致主事件有概率发生
            "weight": 20
      }
    ]
}
...
本部分的解析可以在附加包教程第十一期——物品:武器进阶内找到
这里就不作太多解释了,跟着注释来

就是这样简单,可以测试一下它是怎么执行事件的,也可以测试它是否只有装备了全套装备才会执行事件。
虽然player.json是关于实体的内容,但今天我们稍作了解,为以后打下基础。
static/image/hrline/line9.png
四、本期文件下载
player.json原版文件下载:
static/image/hrline/line2.png
预告:下一期会教大家继续为盔甲添加更高级的事件
大家的打赏是对楼主最好的鼓励!
附加包教程系列导航
上一期下一期


782 发表于 2022-5-20 20:48:09

@lpyqzMinecraft
继续更新~

lpyqzMinecraft 发表于 2022-5-20 22:04:18

782 发表于 2022-5-20 20:48
@lpyqzMinecraft
继续更新~

这期好水。

782 发表于 2022-5-20 23:25:52

lpyqzMinecraft 发表于 2022-5-20 22:04
这期好水。

确实[抖音_504]

lxhzzy 发表于 2022-6-3 22:39:05

写的很不错,很多术语都用通俗易懂的语言表达出来了
页: [1]
查看完整版本: 附加包教程第十四期——物品:盔甲进阶