- 低代码
- 代码生成
- 桌面应用
- 游戏开发
【免费下载链接】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 方块能量存储功能中的max_receive参数,它定义了能量元件(方块、物品等)单次从其他能量元件接收能量的上限。通过阅读本文,你将理解该参数在 Block 编辑界面中的配置位置、与能量容量(capacity)、初始能量(initial energy)及最大提取(max extract)等兄弟参数的关系,并从数据模型、图形界面和 NeoForge 代码生成模板三个层面掌握其在 MCreator 中的完整落地方式。
参数定义:max_receive 是什么
MCreator 内置帮助文档对该参数的官方定义为:
该值是该能量元件(方块、物品……)可以从另一个能量元件接收的最大能量。(德语原文:Dieser Wert ist der maximale Wert der Energie, die das Energie-Element (Block, Gegenstand, ...) von einem anderen Energie-Element empfangen kann.)
该定义同时存在于各语言版本的帮助文档中,例如 德语版、英文默认版 与 简体中文版。
需要特别强调的是,max_receive限定的并非能量存储总量,而是每一次能量插入操作(insertion)能够进入该元件的最大能量值。这一点在界面标签中也有明确标注——texts.properties 中将该参数显示为Max energy receive:,并附带小字注释Per insertion。也就是说,这是一个"单次速率"限制,而不是"总量"限制。
在 Block 编辑界面中配置 max_receive
界面入口
max_receive位于方块(Block)元素的编辑界面中。打开任意方块的 Mod Element 编辑器,向下滚动到Energy Storage(能量存储)区域即可看到该输入框。该区域从上到下依次为:
| 参数 | 界面标签(英文) | 作用 |
|---|---|---|
| Enable energy storage | Enable energy storage: | 是否启用该方块的能量存储功能 |
| Initial energy | Initial energy: | 元件初始携带的能量值 |
| Maximal energy capacity | Maximal energy capacity: | 元件能存储的最大能量总量 |
| Max energy receive | Max energy receive: | 单次可接收的最大能量(本文主题) |
| Max energy extract | Max energy extract: | 单次可向外提取的最大能量 |
该布局在 BlockGUI.java 中按顺序构建,其中max_receive的输入框与帮助按钮绑定代码如下:
energyStorage.add(HelpUtils.wrapWithHelpButton(this.withEntry("energy/max_receive"), L10N.label("elementgui.block.energy_max_receive"))); energyStorage.add(energyMaxReceive);帮助按钮机制
输入框左侧的"?"帮助按钮正是本文所依托的帮助文档的入口。HelpUtils.wrapWithHelpButton会将energy/max_receive这个条目标识映射到对应语言包中的帮助文件——即plugins/mcreator-localization/help/<语言代码>/energy/max_receive.md,MCreator 会根据当前界面语言自动加载对应语言的说明(找不到时回退到default英文版)。这种"配置界面 + 上下文帮助文档"的设计让每个参数都有即查即用的本地化说明。
启用条件
需要注意的是,能量存储相关控件并非始终可用。从 BlockGUI.java 可以看出,energyMaxReceive等控件仅在hasInventorySelected(即该方块已启用 tile entity / 物品栏)时才被启用:
hasEnergyStorage.setEnabled(hasInventorySelected); energyInitial.setEnabled(hasInventorySelected); energyCapacity.setEnabled(hasInventorySelected); energyMaxReceive.setEnabled(hasInventorySelected); energyMaxExtract.setEnabled(hasInventorySelected);因此,要配置max_receive,需要先满足两个前提:该方块绑定了 tile entity(在方块的 Tile Entity 设置中开启),并在能量存储区域勾选Enable energy storage。
参数族:与 energyCapacity、energyInitial、maxExtract 的关系
max_receive并非孤立参数,它与同一面板中的其他三个能量参数共同决定元件的能量行为:
energyCapacity(最大容量):元件最多可储存的能量总量。接收能量后,元件内部存储量不会超过该值。即使外部持续注入,当存储量达到容量上限时,多余的注入会被拒绝。energyInitial(初始能量):元件刚被放置/生成到世界中时自带的基础能量。当容量与接收速率足够时,初始能量决定了元件"上电即用"的程度。energyMaxReceive(最大接收):每次插入操作最多进入的能量。它约束的是流入侧的速率上限。energyMaxExtract(最大提取):每次提取操作最多取出的能量。它约束的是流出侧的速率上限。
在数据模型中,这四个字段在 Block.java 中集中定义,且全部带有@NonNullIf("hasEnergyStorage")注解——即只有启用了能量存储,这些参数才是必填项:
public boolean hasEnergyStorage; @NonNullIf("hasEnergyStorage") @Numeric(init = 0, min = 0, max = Integer.MAX_VALUE, step = 1) public int energyInitial; @NonNullIf("hasEnergyStorage") @Numeric(init = 400000, min = 0, max = Integer.MAX_VALUE, step = 1) public int energyCapacity; @NonNullIf("hasEnergyStorage") @Numeric(init = 200, min = 0, max = Integer.MAX_VALUE, step = 1) public int energyMaxReceive; @NonNullIf("hasEnergyStorage") @Numeric(init = 200, min = 0, max = Integer.MAX_VALUE, step = 1) public int energyMaxExtract;默认值与取值范围
从@Numeric注解及构造函数 Block.java 可以确认各参数的默认值与约束:
| 参数 | 默认值 | 最小值 | 最大值 | 步长 |
|---|---|---|---|---|
energyInitial | 0 | 0 | Integer.MAX_VALUE | 1 |
energyCapacity | 400000 | 0 | Integer.MAX_VALUE | 1 |
energyMaxReceive | 200 | 0 | Integer.MAX_VALUE | 1 |
energyMaxExtract | 200 | 0 | Integer.MAX_VALUE | 1 |
可以看到energyMaxReceive与energyMaxExtract的默认值都是 200,即默认情况下元件每 tick 接收与提取的速率限制相同。而energyCapacity的默认值 400000 远大于单次插入上限,这也印证了"容量是总量、receive/extract 是单次速率"的设计思路。
源码实现:从字段到生成的 EnergyStorage
数据模型的存取
Block 元素的数据模型由 Block.java 定义。编辑界面在打开方块时会将模型中的值回显到输入框(BlockGUI.java):
energyInitial.setValue(block.energyInitial); energyCapacity.setValue(block.energyCapacity); energyMaxReceive.setValue(block.energyMaxReceive); energyMaxExtract.setValue(block.energyMaxExtract);用户点击保存后,界面值写回模型(BlockGUI.java):
block.hasEnergyStorage = hasEnergyStorage.isSelected(); block.energyInitial = (int) energyInitial.getValue(); block.energyCapacity = (int) energyCapacity.getValue(); block.energyMaxReceive = (int) energyMaxReceive.getValue(); block.energyMaxExtract = (int) energyMaxExtract.getValue();整个链路清晰:界面输入框 →Block模型字段 → 保存到工作区,为后续代码生成提供数据。
代码生成层面的落地
当生成 NeoForge 1.21.1 模组代码时,MCreator 使用 blockentity.java.ftl 模板,把上述四个参数直接填入 NeoForgeEnergyStorage的构造函数:
<#if data.hasEnergyStorage> private final EnergyStorage energyStorage = new EnergyStorage(${data.energyCapacity}, ${data.energyMaxReceive}, ${data.energyMaxExtract}, ${data.energyInitial}) { @Override public int receiveEnergy(int maxReceive, boolean simulate) { int retval = super.receiveEnergy(maxReceive, simulate); if(!simulate) { setChanged(); level.sendBlockUpdated(worldPosition, level.getBlockState(worldPosition), level.getBlockState(worldPosition), 2); } return retval; } @Override public int extractEnergy(int maxExtract, boolean simulate) { int retval = super.extractEnergy(maxExtract, simulate); if(!simulate) { setChanged(); level.sendBlockUpdated(worldPosition, level.getBlockState(worldPosition), level.getBlockState(worldPosition), 2); } return retval; } }; public EnergyStorage getEnergyStorage() { return energyStorage; } </#if>从模板代码可以看出,MCreator 直接采用 NeoForge 的EnergyStorageAPI,其构造参数依次为(capacity, maxReceive, maxExtract, energy),正好对应界面上的四个参数。以该 API 的语义而言,maxReceive就是receiveEnergy(int maxReceive, boolean simulate)方法中单次允许注入的能量上限;模板还覆写了receiveEnergy与extractEnergy,在非模拟(simulate=false)的真实能量变动时通知区块更新并标记方块数据变更,确保能量数值在客户端与存档中同步。该模板在同一 generator 插件的其他版本(如 NeoForge 26.3 的 blockentity.java.ftl)中保持了相同的实现方式。
实践建议与常见误区
基于上述定义、界面与源码实现,在配置max_receive时可以参考以下要点:
- 区分"单次速率"与"总量":
max_receive不是存储上限,存储上限由energyCapacity决定。若需快速充能,应提高max_receive而不仅是容量。 - 接收速率的实际含义:由于
max_receive直接映射到EnergyStorage的maxReceive构造参数,外部能量源每次调用receiveEnergy时,实际进入的能量不会超过该值与剩余容量的较小者。可以推断,将其设为 0 意味着该元件无法从外部接收能量(例如纯输出型发电方块),而较大的值则允许更快的充能节奏。 - 与
max_extract配合:能量流通的完整链路包含"接收"与"提取"两侧。一个储能方块既可以从上游接收(受max_receive限制),又可以向下游输出(受max_extract限制),配置时应对两侧做整体设计。 - 受 tile entity 前提约束:只有方块启用了 tile entity 并勾选
Enable energy storage,max_receive才会真正生效并在代码生成时写入EnergyStorage。否则即便在界面上看到该字段,它也是禁用状态。
总结
max_receive是 MCreator 方块能量存储系统的核心速率参数之一,它在 Block 编辑界面的 Energy Storage 面板中配置,由Block数据模型承载(默认值 200、取值范围 0 至Integer.MAX_VALUE),最终通过 NeoForge 代码生成模板以EnergyStorage构造参数的形式落入生成的模组代码。理解它的"单次插入速率限制"本质,并将其与energyCapacity、energyInitial、energyMaxExtract放在同一设计语境中考量,是正确设计 MCreator 能量方块(如发电机、电池、机器等)的关键一步。若需进一步了解能量存储的整体设计,可参阅同目录的 enable_storage.md、energy_capacity.md、initial_energy.md 与 max_extract.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.
相关推荐
MCreator 能量系统详解:Max energy extract(最大提取能量)参数的作用、配置与代码实现
MCreator 能量系统详解:Max energy extract(最大提取能量)参数的作用、配置与代码实现 导读 在 MCreator 的方块编辑器中,「能
低代码代码生成桌面应用游戏开发MCreator 维度参数详解:怪物生成最大方块亮度(monster_spawn_block_light_limit)配置与源码解析
MCreator 维度参数详解:怪物生成最大方块亮度(monster_spawn_block_light_limit)配置与源码解析 本文聚焦 MCreator
低代码代码生成桌面应用游戏开发MCreator 方块能量存储完全指南:启用能量存储、Tile Entity 前置条件与参数配置
MCreator 方块能量存储完全指南:启用能量存储、Tile Entity 前置条件与参数配置 导读 本文围绕 MCreator 官方帮助文档条目 energ
低代码代码生成桌面应用游戏开发
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考