- 低代码
- 代码生成
- 桌面应用
- 游戏开发
【免费下载链接】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 生物实体定义中的Enable AI(启用 AI 任务)选项展开,说明该开关在 Java 版生物(Living Entity)建模中的实际作用、底层代码生成机制,以及它与 AI 任务编辑器(AI Task Builder)、AI 基类(AI Base)之间的协同关系。读完本文,你将掌握该选项的适用场景、如何判断何时应关闭它,并能从源码层面理解勾选/取消勾选后生成代码的差异。
一、选项位置与基本语义
在 MCreator 的生物实体编辑器(Living Entity元素)中,Enable AI是一个位于 AI 参数区域顶部的复选框,UI 中同时以帮助按钮挂接本帮助文档条目。从源码看,它由LivingEntityGUI中的hasAI复选框承载,并通过withEntry("entity/enable_ai")关联到对应帮助文档:
// src/main/java/net/mcreator/ui/modgui/LivingEntityGUI.java#L139 private final JCheckBox hasAI = L10N.checkbox("elementgui.living_entity.has_ai"); // src/main/java/net/mcreator/ui/modgui/LivingEntityGUI.java#L749-L752 JPanel aitop = new JPanel(new GridLayout(3, 1, 0, 2)); aitop.setOpaque(false); aitop.add(PanelUtils.join(FlowLayout.LEFT, HelpUtils.wrapWithHelpButton(this.withEntry("entity/enable_ai"), hasAI)));该复选框与可繁殖(Breedable)、可驯服(Tameable)、AI 基类(AI Base)同处 AI 参数面板顶部,是实体 AI 体系的总开关。它对应的数据字段定义在实体数据模型中:
// src/main/java/net/mcreator/element/types/LivingEntity.java#L180 public boolean hasAI;勾选状态通过hasAI.setSelected(livingEntity.hasAI)加载、通过livingEntity.hasAI = hasAI.isSelected()保存(见 LivingEntityGUI.java 与 LivingEntityGUI.java)。
基本语义(帮助文档原文要点):
- 勾选后,实体的 AI 任务(AI Tasks)会被激活;
- 未勾选时,在 AI 任务编辑器中定义的所有 AI 任务全部不会生效;
- 除非你正在制作某种特殊的"技术性实体"(misc entity),否则应当保持该选项启用。
二、关闭后 AI 任务为何全部失效:代码生成层原理
MCreator 的 Java 版生成器(NeoForge)在生成实体类时,直接根据hasAI的值决定两处关键代码。
1. 构造器中的setNoAi()调用
生成模板在实体构造器中写入:
// plugins/generator-1.21.1/neoforge-1.21.1/templates/livingentity/livingentity.java.ftl#L97-L100 public ${name}Entity(EntityType<${name}Entity> type, Level world) { super(type, world); xpReward = ${data.xpAmount}; setNoAi(${(!data.hasAI)});当hasAI = false时,该行编译为setNoAi(true)——原版 Minecraft 中这会直接关闭实体的 AI 更新逻辑(包括寻路、目标选择、行为目标等)。这一行在neoforge-1.21.1与neoforge-26.3两个生成器中的写法完全一致(见 plugins/generator-26.3.x/neoforge-26.3/templates/livingentity/livingentity.java.ftl)。
2. 条件包裹的registerGoals()与 AI 代码注入
模板进一步用<#if data.hasAI>包裹整个目标注册方法的覆盖:
// plugins/generator-1.21.1/neoforge-1.21.1/templates/livingentity/livingentity.java.ftl#L203-L223 <#if data.hasAI> @Override protected void registerGoals() { super.registerGoals(); <#if aicode??> <#if aiblocks?seq_contains("doors_open") || aiblocks?seq_contains("doors_close")> this.getNavigation().getNodeEvaluator().setCanOpenDoors(true); </#if> ${aicode} </#if> <#if data.ranged> this.goalSelector.addGoal(1, new RangedAttackGoal(this, 1.25, ${data.rangedAttackInterval}, ${data.rangedAttackRadius}f) { ... }); </#if> } </#if>这里揭示了三层含义:
${aicode}是 AI 任务编辑器中 Blockly 积木被编译后的 Java 代码。它由LivingEntity#getAdditionalTemplateData()中的BlocklyToJava生成(见 LivingEntity.java),所用编辑器类型为BlocklyEditorType.AI_TASK,注册名为aitasks、起始积木为aitasks_container(见 BlocklyEditorType.java)。- 未勾选
Enable AI时,registerGoals()覆盖方法根本不会被生成,自然也不存在注入 AI 积木代码的问题——这就是"AI 任务编辑器里定义的任务全部失效"的生成层原因。 - 即使勾选了,若 AI 积木中用到了开关门任务(
doors_open/doors_close),生成器还会额外把寻路节点评估器设为可开门,保证 AI 能实际操作门。
三、与 AI 基类(AI Base)的协同:谁会覆盖你的 AI 任务
Enable AI复选框下方是AI 基类(AI Base)下拉框,其可选值受数据模型中的@LimitedOptions约束:
// src/main/java/net/mcreator/element/types/LivingEntity.java#L181-L183 @LimitedOptions({ "(none)", "Bat", "Blaze", "Chicken", "Cow", "Creeper", "Enderman", "Horse", "IronGolem", "MagmaCube", "Ocelot", "Pig", "Skeleton", "Slime", "Spider", "Squid", "Villager", "Witch", "Wolf", "Zombie" }) public String aiBase;选择某个原版生物作为 AI 基类,会使你的实体行为"像对应的原版生物",但同时也会覆盖部分参数(如掉落物)。因此帮助文档(见 entity/base.md)建议:除非确有需要,应保持默认的(none)。
对Enable AI而言,aiBase有一个重要影响:部分 AI 基类的 AI 行为不可自定义。生成器定义中声明了不可修改 AI 基类列表:
# plugins/generator-1.21.1/neoforge-1.21.1/livingentity.definition.yaml#L25 unmodifiable_ai_bases: [ Bat, MagmaCube, Slime ]对应地,LivingEntity在生成 AI 代码时会做判断——若当前aiBase属于该列表,则不把 AI 任务编辑器中的积木编译成代码(aicode为空字符串),并在 UI 中显示一条"AI 不可修改"的编译提示(见 LivingEntity.java 与 LivingEntityGUI.java)。也就是说:选了蝙蝠/岩浆怪/史莱姆这类基类时,Enable AI只能控制其整体 AI 是否激活,具体行为由基类决定,无法再靠 AI 任务积木叠加。
四、什么时候应该关闭 Enable AI
帮助文档给出了明确的指导原则:除非你在做某种特殊实体,否则保持启用。结合源码可以归纳出几类典型场景:
- 纯展示/装饰性实体:不希望实体自主移动、寻路或攻击,只需静态存在(如建筑装饰、动画演示物)。
- 行为完全由自定义流程(Procedure)驱动的实体:当实体的移动、交互都由"实体更新时(on tick update)"等事件流程控制,原版 AI 反而可能干扰自定义逻辑。
- 技术性实体(misc entity):作为其他机制的一部分存在,不需要任何自主行为。
关闭后请注意两点连带影响:
- 实体不会再执行任何
registerGoals()逻辑,aiBase提供的原版行为同样不会生效; - AI 任务编辑器中的积木即使搭好也不参与代码生成(但积木 XML 仍保存在
aixml字段中,重新勾选后可恢复生效)。
五、实战:AI 任务编辑器与任务块分类
启用Enable AI后,真正的行为定义来自 AI 任务编辑器。该编辑器由BlocklyEditorType.AI_TASK定义(注册名aitasks),在 LivingEntityGUI.java 中通过BlocklyPanel加载,并监听变化实时重新编译:
blocklyPanel.addChangeListener( _ -> new Thread(() -> regenerateBlockAssemblies(true), "AITasksRegenerate").start());任务积木库存放在 plugins/mcreator-core/aitasks/ 目录,按功能分为 7 大类(以$开头的 JSON 定义分类元数据):
| 分类文件 | 代表任务积木 |
|---|---|
$basictasks.json | 基础行为类 |
$combattasks.json | attack_entity(攻击指定实体)、attack_on_collide(碰撞攻击)、attack_with_range(远程攻击)等 |
$movementtasks.json | wander(随机游荡)、fly(飞行)、swim_in_water(游泳)、leap_at_target(扑向目标)等 |
$targettasks.json | 目标选择类,如follow_entity、follow_owner、watch_closest_entity |
$parentownertasks.json | 与主人/亲子相关的跟随、保护类任务(protect_owner、fight_as_owner、follow_parent) |
$villagetasks.json | 村庄行为类(move_indoors、doors_open/doors_close/doors_break) |
$othertasks.json | 其他杂项(如panic_when_attacked、restrict_sun、avoid_entity、eat_grass) |
每个任务积木都是一个 JSON 定义文件。以attack_entity为例(见 plugins/mcreator-core/aitasks/attack_entity.json),它提供insight(是否无视遮挡视线)、nearby(是否仅附近目标)、entity(目标实体选择)和condition(附加条件流程)等参数,并归入combattasks工具盒子。任务积木通常可以串联(previousStatement/nextStatement),形成从上到下依次执行的 AI 行为序列。
六、核心要点速览
| 问题 | 结论 |
|---|---|
| Enable AI 不勾选会怎样? | 构造器生成setNoAi(true),registerGoals()覆盖方法不生成,AI 任务编辑器内容全部不生效 |
| 如何重新启用? | 重新勾选即可,AI 任务积木 XML(aixml)仍保留 |
| 什么情况应关闭? | 制作无自主行为的装饰性/技术性实体,或行为完全由 Procedure 驱动时 |
| 与 AI Base 的关系 | AI 基类为Bat/MagmaCube/Slime时 AI 不可自定义;aiBase为(none)时行为完全由 AI 任务积木决定 |
| 生成的代码在哪里看? | 生成工作空间的实体类中,构造器内setNoAi(...)与registerGoals()方法 |
七、延伸阅读:相关源码索引
- UI 实现与帮助按钮挂接:LivingEntityGUI.java 、LivingEntityGUI.java
- 数据模型字段定义:LivingEntity.java
- AI 代码编译与模板数据注入:LivingEntity.java
- NeoForge 代码生成模板(1.21.1):livingentity.java.ftl
- NeoForge 代码生成模板(26.3):livingentity.java.ftl
- 生成器定义中的不可修改 AI 基类:livingentity.definition.yaml
- AI 任务编辑器类型定义:BlocklyEditorType.java
- AI 任务积木库:plugins/mcreator-core/aitasks/
- 相邻帮助文档:AI 基类说明 entity/base.md、生物类型说明 entity/behaviour.md
- 低代码
- 代码生成
- 桌面应用
- 游戏开发
【免费下载链接】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.
相关推荐
Taskmaster AI任务协作:多用户实时编辑与评论
Taskmaster AI任务协作:多用户实时编辑与评论 痛点:团队协作中的任务管理困境 你是否曾经遇到过这样的场景?团队成员各自为战,任务状态更新不及时,依赖
AI Agent开发工具CLIMCPApache Druid任务管理详解:Overlord与任务优先级调度机制
Apache Druid任务管理详解:Overlord与任务优先级调度机制 在实时数据分析场景中,任务调度的效率直接影响数据处理的及时性和系统资源利用率。Apa
数据库数据分析OLAP大数据实时分析数据仓库后端MCreator 实体行为(Behaviour)参数完全指南:Mob、Creature 与 Raider 的选用逻辑与底层生成原理
MCreator 实体行为(Behaviour)参数完全指南:Mob、Creature 与 Raider 的选用逻辑与底层生成原理 本篇指南聚焦 MCreato
低代码代码生成桌面应用游戏开发
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考