- 低代码
- 代码生成
- 桌面应用
- 游戏开发
【免费下载链接】MCreator
MCreator is an open-source software used to make Minecraft Java Edition mods, Minecraft Bedrock Edition Add-Ons, resource packs, and data packs using an intuitive easy-to-learn interface or with an integrated code editor. It is used worldwide by Minecraft players, aspiring mod developers, for education, online classes, and STEM workshops.
导读
本文围绕 MCreator 中"生物(Living Entity)"元素的被闪电击中(When struck by lightning)触发器展开:它会在自定义生物被雷击的瞬间执行一个流程(Procedure),是制作"雷击变身""闪电召唤掉落"等玩法的基础事件入口。读完本文,你将掌握该触发器的编辑器配置位置、可用的流程依赖变量,以及它在 NeoForge 生成代码中如何通过覆写thunderHit方法落地,从而能独立在 MCreator 工作区中设计并调试此类雷击事件逻辑。
触发器是什么:触发条件与语义
原帮助文档(de_DE 版本 及对应的 zh_CN 版本)对该触发器的定义非常简洁:
当该实体被一道闪电击中时,触发(执行)该流程。
也就是说,只要 Minecraft 世界中存在一个闪电实体(LightningBolt)与你的自定义生物发生"雷击命中"交互,该事件就会被抛出。典型来源包括:自然雷暴天气降下的闪电、玩家使用"引雷(Channeling)"附魔三叉戟召唤的闪电,以及其他模组或指令(如/summon minecraft:lightning_bolt)生成的闪电。
在 MCreator 编辑器中的位置与配置
该触发器属于"生物(Living Entity)"元素的**事件(Events)**区块,与"实体被玩家右击""实体受伤""实体死亡""实体掉落"等触发器并列,集中展示在生物编辑界面的同一面板中。
从源码可以确认它的完整注册方式:在 LivingEntityGUI.java 中,它通过ProcedureSelector构建:
onStruckByLightning = new ProcedureSelector(this.withEntry("entity/when_struck_by_lightning"), mcreator, L10N.t("elementgui.living_entity.event_struck_by_lightning"), AbstractProcedureSelector.Side.SERVER, Dependency.fromString("x:number/y:number/z:number/world:world/entity:entity"));其中:
this.withEntry("entity/when_struck_by_lightning")直接关联到本文所基于的帮助文档路径(plugins/mcreator-localization/help/<语言>/entity/when_struck_by_lightning.md),帮助面板中展示的正是这份说明;- 界面显示名取自本地化键
elementgui.living_entity.event_struck_by_lightning,例如中文为"实体被雷击时"、德文为Wenn vom Blitz getroffen(见 texts_zh_CN.properties 与 texts_de_DE.properties); Side.SERVER表明该触发器产生的流程运行在服务端,适合执行改变世界状态、伤害实体、掉落物品等逻辑;- 参数列表明确声明了该触发器向流程暴露的五个依赖(见下文)。
用户在该选择器中选定的流程,会被保存到生物数据模型LivingEntity的onStruckByLightning字段上(LivingEntity.java),并在界面保存时写回工作区(LivingEntityGUI.java)。
可用依赖变量(Dependencies)
选中该触发器后,在流程编辑器中可用的依赖变量与含义如下:
| 依赖 | 类型 | 含义 |
|---|---|---|
x | number | 被雷击实体当前的 X 坐标 |
y | number | 被雷击实体当前的 Y 坐标 |
z | number | 被雷击实体当前的 Z 坐标 |
world | world | 实体所在的世界/维度对象,可用于放置方块、生成闪电等操作 |
entity | entity | 被闪电击中的实体本身 |
这五个依赖正是 LivingEntityGUI.java 中Dependency.fromString("x:number/y:number/z:number/world:world/entity:entity")所声明的集合。由于雷击事件天然携带位置信息,这类流程最常用的就是"在 (x, y, z) 附近执行区域操作"或"对 entity 执行状态变更"。
生成代码剖析:thunderHit 覆写
选中该触发器并生成模组后,MCreator 会在自定义实体的 Java 源码中覆写 NeoForge/Minecraft 的thunderHit方法。两个 NeoForge 生成器(1.21.1 版模板 与 26.3.x 版模板)的生成逻辑完全一致:
<#if hasProcedure(data.onStruckByLightning)> @Override public void thunderHit(ServerLevel serverWorld, LightningBolt lightningBolt) { super.thunderHit(serverWorld, lightningBolt); <@procedureCode data.onStruckByLightning, { "x": "this.getX()", "y": "this.getY()", "z": "this.getZ()", "entity": "this", "world": "this.level()" }/> } </#if>这段模板揭示了三个底层事实:
- 触发时机:
thunderHit(ServerLevel, LightningBolt)是 Minecraft 实体在服务端被闪电击中时由游戏引擎调用的回调。当你的自定义实体遭遇闪电时,该覆写方法即被执行,因此触发器的时机与游戏内"雷击命中"事件完全同步。 - 依赖注入方式:模板将流程中使用的
x/y/z/entity/world分别映射为this.getX()、this.getY()、this.getZ()、this与this.level()。也就是说,流程运行时拿到的entity就是被雷击的自定义实体实例本身,world即其所在的ServerLevel。 - 默认行为保留:覆写方法第一行先调用
super.thunderHit(serverWorld, lightningBolt),因此原版"被闪电击中后着火"等默认行为依然生效,用户的流程是在默认行为之后追加执行的自定义逻辑。
模板外层使用<#if hasProcedure(data.onStruckByLightning)>做条件包裹:只有用户确实为该生物选择了流程时,才会生成这段覆写代码,未配置时生成的实体类不包含任何雷击相关逻辑,从而保持生成的类干净精简。
典型使用场景
基于以上依赖与生成机制,该触发器适合实现以下玩法:
- 雷击进化/变身:流程中判断
entity的类型,满足条件时将实体替换为更强的变体,或为实体施加状态效果(如力量、速度); - 雷击掉落:在
x/y/z坐标生成自定义掉落物、经验球或触发另一个流程; - 连锁闪电:通过
world在世界中再次召唤LightningBolt,制造二次雷击; - 区域事件:将
x/y/z传给区域操作,例如雷击点周围方块被烧毁、生成自定义结构等; - 玩法保护:检测到雷击后为
entity施加防雷效果、恢复生命,实现"避雷针"式的自定义生物特性。
由于流程运行在服务端,这些逻辑天然具备多人联机下的权威性,不需要额外处理客户端同步。
注意事项与适用边界
- 仅适用于"生物(Living Entity)"元素:从源码看,该触发器只注册于
LivingEntityGUI的事件面板中(LivingEntityGUI.java),普通"生物群系"、"物品"等其他元素类型没有此事件; - 仅适用于基于实体类的生成器:其生成代码位于 NeoForge 生成器的
livingentity模板中,数据包(Datapack)与资源包(Resource Pack)生成器不涉及实体类生成,因此该触发器只在生成 Java 模组时生效; - 触发条件是"实体被雷击",而非"闪电生成":若你想在闪电落地的瞬间(无论是否击中实体)执行逻辑,应改用世界/位置类事件或在流程中另行监听闪电实体生成,而非本触发器;
- 默认雷击伤害/着火行为仍然存在:由于模板先调用
super.thunderHit(...),原版雷击伤害与引燃逻辑不会被覆盖,如需完全免疫需在流程中自行处理生命值恢复或清除着火状态。
小结
"实体被雷击时"是 MCreator 生物元素中一个服务端流程触发器,通过 LivingEntityGUI.java 注册、在 LivingEntity.java 中持久化、并由 livingentity.java.ftl 覆写thunderHit生成落地代码。它向流程暴露x/y/z/world/entity五个依赖,是搭建"雷击类"自定义生物玩法最直接、最可靠的事件入口。配合 MCreator 流程编辑器中的条件判断与实体操作块,即可在几分钟内完成一套完整的雷击事件玩法。
- 低代码
- 代码生成
- 桌面应用
- 游戏开发
【免费下载链接】MCreator
MCreator is an open-source software used to make Minecraft Java Edition mods, Minecraft Bedrock Edition Add-Ons, resource packs, and data packs using an intuitive easy-to-learn interface or with an integrated code editor. It is used worldwide by Minecraft players, aspiring mod developers, for education, online classes, and STEM workshops.
相关推荐
MCreator 方块"被弹射物击中"事件详解:触发器配置、依赖注入与代码生成原理
MCreator 方块"被弹射物击中"事件详解:触发器配置、依赖注入与代码生成原理 当箭矢、雪球、末影珍珠或自定义弹射物命中自定义方块时,MCreator 提供
低代码代码生成桌面应用游戏开发MCreator 实体「攻击击退(Attack Knockback)」参数完全指南:原理、设置与生成代码解析
MCreator 实体「攻击击退(Attack Knockback)」参数完全指南:原理、设置与生成代码解析 本指南围绕 MCreator 活体实体(Livin
低代码代码生成桌面应用游戏开发MCreator 实体「初始生成」触发器(On Initial Spawn)详解:配置、依赖变量与 NeoForge 底层实现
MCreator 实体「初始生成」触发器(On Initial Spawn)详解:配置、依赖变量与 NeoForge 底层实现 导读 本文围绕 MCreator
低代码代码生成桌面应用游戏开发
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考