记录击杀数量的物品

前置知识

示例

首先,在 AzureFlow/items/ 文件夹下,创建一个名为 KillCount.yml的文件,创建完成后,让我们正式步入主题。

在制作记录击杀数量的物品之前,我们不妨先设想一下,既然需要记录击杀数量,那么不可或缺的需要一个数据来存储这个值,由此,我们使用 data 配置项定义一个名为 kill_count 的数据,其初始值为0,编写配置如下:

data:
  kill_count: 0

与此同时,我还们希望将这个数据能够展示到物品上,因此,使用 display.name 配置项完成需求,编写配置如下:

display:
  material: diamond_sword
  name: '&7已击杀: &e${}'

现在,然后输入af reload,将物品加载到服务器中,此时 AzureFlow将自动为我们生成 uuid 编码,生成后的配置如下:

data:
  kill_count: 0

display:
  material: diamond_sword
  name: '&7已击杀: &e${kill_count}'
  
internal:
  # 每个物品的唯一标识不一样,你实际生成的值与文档可能会不一样
  uuid: fabb6460-38ed-411f-a0e2-18c19511090e

同时,为了方便我们后续获取到该物品,我们为其添加别名 kill_count_item,定义配置如下:

data:
  kill_count: 0

display:
  material: diamond_sword
  name: '&7已击杀: &e${kill_count}'
  
internal:
  uuid: fabb6460-38ed-411f-a0e2-18c19511090e
  alias: [kill_count_item]

现在,让我们回到服务器中,重载插件后输入af get kill_count_item即可获得该物品。

接下来,我们着手实现,在玩家使用该物品击杀怪物后,修改击杀计数的数据值同时更新物品。首先,既然是需要在玩家击杀后触发动作,因此我们毫无意外的使用 onKill 触发器,同时在触发器内编写动作,如 设置击杀计数的值加一、更新物品,基于上述思路,编写配置如下:

data:
  kill_count: 0

display:
  material: diamond_sword
  name: '&7已击杀: &e${kill_count}'
  
action:
  # 为了方便测试, 我们在这里额外使用 onAttack 触发器, 并且设置伤害为10000, 即秒杀怪物
  onAttack:
    - 'run: event.damage = 10000'
  onKill:
    - 'set-data:  + 1'
    - 'update'
  
internal:
  uuid: fabb6460-38ed-411f-a0e2-18c19511090e
  alias: [kill_count_item]

现在,让我们回到服务器中,使用手中的物品击杀几个怪物,不出所料,我们成功完成了记录击杀数量的物品。

Last updated