AI 速览
基岩版附加包教程:用事件按游戏难度切换实体攻击伤害
这是一篇面向附加包新手的教程,讲解如何让实体在简单难度下造成 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 中写入:
这样实体就拥有 6 点攻击伤害。 但是,直接写在 components 中的 minecraft:attack 是全局生效的,不会随游戏难度变化。要实现“不同难度不同伤害”,就需要借助事件。 二、用 minecraft:entity_spawned 按难度切换 minecraft:entity_spawned 事件可以检测实体生成,并在生成后应用事件内的内容。 在 components 同级写入 events:
其中 easy_attack、normal_attack、hard_attack 是自定义组件组,可以自由命名。这里通过 is_difficulty 判断游戏难度,添加对应难度的组件组,并删除不属于当前难度的组件组。 三、定义不同难度的组件组 同样在 components 同级写入 component_groups:
组件组名称必须与 events 中使用的名称保持一致。 这样即可实现:简单难度 0 点伤害,普通难度 4 点伤害,困难难度 6 点伤害。 四、可选:困难难度附加状态效果 如果想让困难难度下的攻击额外附带缓慢效果,可以把 hard_attack 改成:
这样实体在困难难度下攻击时,会造成 6 点伤害,并给予目标 10 秒缓慢效果。数值和效果类型可按需调整。 五、处理转换生成的实体:minecraft:entity_transformed 上面的写法并不全面。如果生物是通过某些方式转换而来的,minecraft:entity_spawned 不会检测到这个生物“生成了”,因此上述内容不会触发。如果 components 中没有写入 minecraft:attack 兜底,这个实体可能不会正常攻击。 这时需要用到 minecraft:entity_transformed 事件。该事件可以检测实体被转换,例如村民转换为女巫时会触发。 写法与 minecraft:entity_spawned 基本一致:
将 minecraft:entity_spawned 和 minecraft:entity_transformed 两个事件配合使用,基本可以保证实体在生成或转换后,都能根据当前难度切换攻击伤害。 注意:如果两个事件都写在同一个 events 对象下,事件之间需要用逗号分隔。 六、补充:minecraft:entity_born 同理,也可以使用 minecraft:entity_born 事件,让实体在“出生”时根据难度切换攻击伤害。不过一般较少考虑宝宝刚出生就攻击的场景,可按需添加。 七、限制与总结 仍有一个限制:如果实体已经生成后再切换游戏难度,这些事件不会重新触发。这属于游戏机制层面的限制,本篇不展开。 总结:通过 minecraft:attack 组件、component_groups 组件组,以及 minecraft:entity_spawned、minecraft:entity_transformed 事件,我们实现了最基础的“按难度切换实体攻击伤害”功能。 如果内容有误,或者你有更好的写法,欢迎回帖指出! |
提升卡
观察者