- 低代码
- 代码生成
- 桌面应用
- 游戏开发
【免费下载链接】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 允许为自定义实体设置"袭击者(Raider)"行为类型,使其能够参与 Minecraft 原版的村庄袭击(Raid)事件。本文围绕实体编辑器中的"每波袭击生成数量(Raid Spawns Counts)"配置项,说明袭击波数如何随游戏难度变化、7 个波次生成数量输入框的取值规则与默认值,并从仓库源码角度解析该配置从 UI 到生成模板的完整数据链路。读完本文,你将能够在 MCreator 中创建行为正确的自定义袭击者实体,并精确控制其在各难度袭击波次中的刷怪数量。
一、功能定位:什么是"袭击者(Raider)"实体
在 MCreator 的实体(Living Entity)编辑器中,"行为类型(mob behaviour type)"决定实体的基础行为框架。从数据模型的定义看,该字段仅允许三种取值:
Mob(敌对生物)Creature(普通生物)Raider(袭击者)
对应源码位于 src/main/java/net/mcreator/element/types/LivingEntity.java:
@LimitedOptions({ "Mob", "Creature", "Raider" }) public String mobBehaviourType;只有当实体行为类型选择Raider时,"每波袭击生成数量"配置才会生效并可编辑。因此,该配置的完整名称应为:Raider 类型实体在各难度袭击波次中的每波生成数量。
二、袭击波数如何随难度变化
在原版 Minecraft 中,一次袭击(Raid)会按游戏难度划分为若干波次,不同难度下的袭击波数不同。MCreator 的帮助文档明确给出了对应关系(中文版文档):
| 游戏难度 | 袭击波数 |
|---|---|
| 和平(Peaceful) | 0 |
| 简单(Easy) | 3 |
| 普通(Normal) | 5 |
| 困难(Hard) | 7 |
同时,中文版帮助文档补充了一条重要规则:当玩家身上的"不祥之兆"状态效果等级大于 1 时,会无视难度为袭击额外增加一个波次。
这一"波次数量随难度变化"的设计,直接决定了配置界面为何需要提供多个输入框——因为不同难度的袭击有不同数量的波次,你需要为每一个可能的波次单独指定生成数量。
三、配置界面与操作步骤
该配置项位于实体编辑器 → 生成(Spawning)面板中。界面代码如下(src/main/java/net/mcreator/ui/modgui/LivingEntityGUI.java):
selp.add(HelpUtils.wrapWithHelpButton(this.withEntry("entity/raid_spawns_counts"), L10N.label("elementgui.living_entity.raid_spawns_counts"))); selp.add(PanelUtils.gridElements(1, -1, 2, 2, raidSpawnsCount[0], raidSpawnsCount[1], raidSpawnsCount[2], raidSpawnsCount[3], raidSpawnsCount[4], raidSpawnsCount[5], raidSpawnsCount[6]));操作要点:
- 新建或打开一个实体,在"行为类型"下拉框中选择Raider;
- 切换到"生成"相关面板,找到Raid Spawns Counts(每波袭击生成数量)配置区,该区共7 个数字输入框,分别对应袭击的第 1 波至第 7 波;
- 为每个波次填入该波生成的实体数量即可。设置完成后生成代码时,MCreator 会将这些数值写入实体的袭击者注册数据。
输入框的默认值与取值范围
这 7 个输入框在 UI 初始化时的默认值与取值范围如下(LivingEntityGUI.java):
private final JSpinner[] raidSpawnsCount = new JSpinner[] { new JSpinner(new SpinnerNumberModel(4, 0, 1000, 1)), new JSpinner(new SpinnerNumberModel(3, 0, 1000, 1)), new JSpinner(new SpinnerNumberModel(3, 0, 1000, 1)), new JSpinner(new SpinnerNumberModel(4, 0, 1000, 1)), new JSpinner(new SpinnerNumberModel(4, 0, 1000, 1)), new JSpinner(new SpinnerNumberModel(4, 0, 1000, 1)), new JSpinner(new SpinnerNumberModel(2, 0, 1000, 1)) };| 波次 | 默认生成数量 | 取值范围 |
|---|---|---|
| 第 1 波 | 4 | 0 ~ 1000 |
| 第 2 波 | 3 | 0 ~ 1000 |
| 第 3 波 | 3 | 0 ~ 1000 |
| 第 4 波 | 4 | 0 ~ 1000 |
| 第 5 波 | 4 | 0 ~ 1000 |
| 第 6 波 | 4 | 0 ~ 1000 |
| 第 7 波 | 2 | 0 ~ 1000 |
每个输入框的步长为 1,即只能填写整数。将某波次的数值设为 0,可让自定义袭击者在该波次不生成。
四、配置在源码与生成代码中的落点
1. 数据模型层:raidSpawnsCount 数组
每个实体元素(ModElement)在保存时,会将这 7 个值写入LivingEntity数据模型的raidSpawnsCount整型数组字段(LivingEntity.java):
public int[] raidSpawnsCount;其默认初始值恰好与界面默认值一致(LivingEntity.java):
this.raidSpawnsCount = new int[] { 4, 3, 3, 4, 4, 4, 2 };2. 界面联动:仅 Raider 类型可编辑
MCreator 在切换行为类型时会动态启用/禁用相关字段。当选中 Raider 时,raidCelebrationSound(袭击胜利庆祝音效)与 7 个数量输入框被启用,同时自动取消"可繁殖(breedable)"选项、重置 AI 基础类型;反之,非 Raider 类型下这些输入框不可编辑(LivingEntityGUI.java):
private void enableOrDisableFields() { boolean isRaider = "Raider".equals(mobBehaviourType.getSelectedItem()); if (isRaider) { breedable.setSelected(false); aiBase.setSelectedItem("(none)"); } raidCelebrationSound.setEnabled(isRaider); for (JSpinner spinner : raidSpawnsCount) spinner.setEnabled(isRaider); ... }3. 生成模板层:写入 Raid.RaiderType 枚举扩展
真正生效的关键在代码生成阶段。NeoForge 生成器的实体模板会为 Raider 类型实体生成一个Raid.RaiderType的枚举代理(plugins/generator-1.21.1/neoforge-1.21.1/templates/livingentity/livingentity.java.ftl,26.3.x 版本同款模板):
<#if data.mobBehaviourType == "Raider"> public static final EnumProxy<Raid.RaiderType> RAIDER_TYPE = new EnumProxy<>(Raid.RaiderType.class, ${JavaModName}Entities.${REGISTRYNAME}, new int[] {0, ${data.raidSpawnsCount[0]}, ${data.raidSpawnsCount[1]}, ${data.raidSpawnsCount[2]}, ${data.raidSpawnsCount[3]}, ${data.raidSpawnsCount[4]}, ${data.raidSpawnsCount[5]}, ${data.raidSpawnsCount[6]}} ); </#if>从模板结构可以看出,最终写入原版Raid.RaiderType的整型数组共有8 个元素:索引 0 固定为0,索引 1~7 依次对应第 1~7 波的生成数量。这正是界面提供 7 个输入框的原因——它们分别填充数组的 7 个波次槽位。
4. 注册层:自定义 Raider 加入原版枚举
为了让游戏识别自定义 Raider 属于袭击者阵营,NeoForge 生成器还会通过enumextensions.json扩展原版Raid$RaiderType枚举,把每个 Raider 实体及其RAIDER_TYPE字段注册进去(plugins/generator-1.21.1/neoforge-1.21.1/templates/modbase/enumextensions.json.ftl):
<#assign raiders = w.getGElementsOfType("livingentity")?filter(e -> e.mobBehaviourType == "Raider")> ... "enum": "net/minecraft/world/entity/raid/Raid$RaiderType", "name": "${modid?upper_case}_${raider.getModElement().getRegistryNameUpper()}", "constructor": "(Ljava/util/function/Supplier;[I)V", "parameters": { "class": "${package?replace(".", "/")}/entity/${raider.getModElement().getName()}Entity", "field": "RAIDER_TYPE" }也就是说,自定义袭击者的完整生效链路为:实体编辑器 7 个输入框 →LivingEntity.raidSpawnsCount数据 → 生成模板产出RAIDER_TYPE枚举代理与波次数量数组 → 通过enumextensions.json注入原版Raid.RaiderType枚举 → 游戏在袭击波次中按数量数组生成自定义袭击者。
五、版本支持与注意事项
- 该功能由 NeoForge 生成器模板实现,仓库中neoforge-1.21.1与neoforge-26.3两个生成器版本均内置了相同的
livingentity.java.ftl与enumextensions.json.ftl模板,即两种目标游戏版本下配置方式完全一致。 - 只有当"行为类型"为 Raider 时,7 个数量输入框才会启用;若实体类型为 Mob 或 Creature,该配置不生效。
- 由于实际袭击波数由难度决定(简单 3 波、普通 5 波、困难 7 波),超过当前难度波数的后续输入框数值在该难度下不会被使用;而"不祥之兆"等级大于 1 时附加的额外波次,同样受此数组控制。
- 每个波次的取值上限为 1000,若需模拟高压力袭击,可将数值设大;若某波次不希望出现该实体,填 0 即可。
- 低代码
- 代码生成
- 桌面应用
- 游戏开发
【免费下载链接】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 物品攻击速度(Attack Cooldown)参数详解:从编辑器配置到代码生成
MCreator 物品攻击速度(Attack Cooldown)参数详解:从编辑器配置到代码生成 导读 在 MCreator 中创建自定义物品或工具时,编辑器属
低代码代码生成桌面应用游戏开发MCreator 实体「攻击击退(Attack Knockback)」参数完全指南:原理、设置与生成代码解析
MCreator 实体「攻击击退(Attack Knockback)」参数完全指南:原理、设置与生成代码解析 本指南围绕 MCreator 活体实体(Livin
低代码代码生成桌面应用游戏开发MCreator 实体行为(Behaviour)参数完全指南:Mob、Creature 与 Raider 的选用逻辑与底层生成原理
MCreator 实体行为(Behaviour)参数完全指南:Mob、Creature 与 Raider 的选用逻辑与底层生成原理 本篇指南聚焦 MCreato
低代码代码生成桌面应用游戏开发
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考