BE教程

【BE附加包】根据游戏难度定义怪物伤害

YesN***版主 发表于 昨天 16:30 IP:广东省 119 0
AI 速览2026-11-02 17:07 生成

基岩版附加包教程:用事件按游戏难度切换实体攻击伤害

这是一篇面向附加包新手的教程,讲解如何让实体在简单难度下造成 0 点伤害,在普通和困难难度下造成不同伤害。作者先介绍 minecraft:attack 组件,再借助 minecraft:entity_spawned 与 minecraft:entity_transformed 事件配合组件组,实现按难度切换攻击数值,并可选在困难难度附加缓慢效果。适合已了解 JSON 语法和附加包基础、想动手制作自定义实体的玩家阅读。

  • 需先了解 JSON 语法和附加包基础
  • 组件组名称必须与事件中引用的名称一致
  • 多个事件写在同一个 events 对象下时需用逗号分隔
  • 实体生成后再切换难度不会重新触发事件
  • 教程不涉及索敌、移动等基础行为组件
本卡片由 AI 阅读本帖后生成,可能存在疏漏,请以帖子正文为准。
这是我新开的一个教程系列。之后我会在随机时间挑选一个或几个组件,简单地和大家一起学习如何制作自己的 Addon。

我的能力有限,所以会优先选择难度低、易上手的内容()
。如果内容有误,或者你有更好的写法,欢迎回帖指出!

在阅读本篇之前,建议你先了解 JSON 语法和附加包基础,可参考:
https://klpbbs.com/thread-80923-1-1.html

本期实现效果

让生物在简单难度下造成 0 点伤害,在普通至困难难度下造成正常伤害。

本期用到的组件与事件

组件:minecraft:attack
事件:minecraft:entity_spawned、minecraft:entity_transformed

本教程不列出索敌、移动等相关组件,默认实体已具备这些基础行为。

一、认识 minecraft:attack

在基岩版附加包的实体文件中,决定近战伤害的关键是 minecraft:attack 组件。通过 attack 组件,实体可以对目标造成伤害,也可以给予状态效果。

参考:
https://learn.microsoft.com/zh-c ... raft-bedrock-stable

在实体 JSON 的 components 中写入:


  1. "minecraft:attack": {
  2.   "damage": 6
  3. }
复制代码


这样实体就拥有 6 点攻击伤害。

但是,直接写在 components 中的 minecraft:attack 是全局生效的,不会随游戏难度变化。要实现“不同难度不同伤害”,就需要借助事件。

二、用 minecraft:entity_spawned 按难度切换

minecraft:entity_spawned 事件可以检测实体生成,并在生成后应用事件内的内容。

在 components 同级写入 events:


  1. "events": {
  2.   "minecraft:entity_spawned": {
  3.     "sequence": [
  4.       {
  5.         "filters": { "test": "is_difficulty", "value": "easy" },
  6.         "remove": {
  7.           "component_groups": ["normal_attack", "hard_attack"]
  8.         },
  9.         "add": {
  10.           "component_groups": ["easy_attack"]
  11.         }
  12.       },
  13.       {
  14.         "filters": { "test": "is_difficulty", "value": "normal" },
  15.         "remove": {
  16.           "component_groups": ["easy_attack", "hard_attack"]
  17.         },
  18.         "add": {
  19.           "component_groups": ["normal_attack"]
  20.         }
  21.       },
  22.       {
  23.         "filters": { "test": "is_difficulty", "value": "hard" },
  24.         "remove": {
  25.           "component_groups": ["easy_attack", "normal_attack"]
  26.         },
  27.         "add": {
  28.           "component_groups": ["hard_attack"]
  29.         }
  30.       }
  31.     ]
  32.   }
  33. }
复制代码


其中 easy_attack、normal_attack、hard_attack 是自定义组件组,可以自由命名。这里通过 is_difficulty 判断游戏难度,添加对应难度的组件组,并删除不属于当前难度的组件组。

三、定义不同难度的组件组

同样在 components 同级写入 component_groups:


  1. "component_groups": {
  2.   "easy_attack": {
  3.     "minecraft:attack": {
  4.       "damage": 0
  5.     }
  6.   },
  7.   "normal_attack": {
  8.     "minecraft:attack": {
  9.       "damage": 4
  10.     }
  11.   },
  12.   "hard_attack": {
  13.     "minecraft:attack": {
  14.       "damage": 6
  15.     }
  16.   }
  17. }
复制代码


组件组名称必须与 events 中使用的名称保持一致。

这样即可实现:简单难度 0 点伤害,普通难度 4 点伤害,困难难度 6 点伤害。

四、可选:困难难度附加状态效果

如果想让困难难度下的攻击额外附带缓慢效果,可以把 hard_attack 改成:


  1. "hard_attack": {
  2.   "minecraft:attack": {
  3.     "damage": 6,
  4.     "effect_duration": 10,
  5.     "effect_name": "slowness"
  6.   }
  7. }
复制代码


这样实体在困难难度下攻击时,会造成 6 点伤害,并给予目标 10 秒缓慢效果。数值和效果类型可按需调整。

五、处理转换生成的实体:minecraft:entity_transformed

上面的写法并不全面。如果生物是通过某些方式转换而来的,minecraft:entity_spawned 不会检测到这个生物“生成了”,因此上述内容不会触发。如果 components 中没有写入 minecraft:attack 兜底,这个实体可能不会正常攻击。

这时需要用到 minecraft:entity_transformed 事件。该事件可以检测实体被转换,例如村民转换为女巫时会触发。

写法与 minecraft:entity_spawned 基本一致:


  1. "minecraft:entity_transformed": {
  2.   "sequence": [
  3.     {
  4.       "filters": { "test": "is_difficulty", "value": "easy" },
  5.       "remove": {
  6.         "component_groups": ["normal_attack", "hard_attack"]
  7.       },
  8.       "add": {
  9.         "component_groups": ["easy_attack"]
  10.       }
  11.     },
  12.     {
  13.       "filters": { "test": "is_difficulty", "value": "normal" },
  14.       "remove": {
  15.         "component_groups": ["easy_attack", "hard_attack"]
  16.       },
  17.       "add": {
  18.         "component_groups": ["normal_attack"]
  19.       }
  20.     },
  21.     {
  22.       "filters": { "test": "is_difficulty", "value": "hard" },
  23.       "remove": {
  24.         "component_groups": ["easy_attack", "normal_attack"]
  25.       },
  26.       "add": {
  27.         "component_groups": ["hard_attack"]
  28.       }
  29.     }
  30.   ]
  31. }
复制代码


将 minecraft:entity_spawned 和 minecraft:entity_transformed 两个事件配合使用,基本可以保证实体在生成或转换后,都能根据当前难度切换攻击伤害。

注意:如果两个事件都写在同一个 events 对象下,事件之间需要用逗号分隔。

六、补充:minecraft:entity_born

同理,也可以使用 minecraft:entity_born 事件,让实体在“出生”时根据难度切换攻击伤害。不过一般较少考虑宝宝刚出生就攻击的场景,可按需添加。

七、限制与总结

仍有一个限制:如果实体已经生成后再切换游戏难度,这些事件不会重新触发。这属于游戏机制层面的限制,本篇不展开。

总结:通过 minecraft:attack 组件、component_groups 组件组,以及 minecraft:entity_spawned、minecraft:entity_transformed 事件,我们实现了最基础的“按难度切换实体攻击伤害”功能。

如果内容有误,或者你有更好的写法,欢迎回帖指出!
您需要登录后才可以回帖 登录 | 立即注册
本版积分规则