news 2026/10/16 6:22:58

MCreator 方块存储「输入槽(Input Slots)」配置详解:控制漏斗自动化取物行为

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MCreator 方块存储「输入槽(Input Slots)」配置详解:控制漏斗自动化取物行为
  • 低代码
  • 代码生成
  • 桌面应用
  • 游戏开发

【免费下载链接】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.

项目地址:https://gitcode.com/gh_mirrors/mc/MCreator
点击查看免费下载

在 MCreator 中为方块启用存储(Inventory)并绑定 GUI 后,「输入槽」与「输出槽」这一组参数决定了漏斗等自动化设备能从哪些槽位取走物品、向哪些槽位放入物品。本篇指南以block/input_slots帮助条目为核心,结合 MCreator 源码与 NeoForge 代码生成模板,讲透「输入槽」参数的含义、填写方式、GUI 槽位 ID 的来源,以及它最终在生成的方块实体代码中如何落地生效。读完本文,你将能精确设计方块的自动化输入/输出策略,避免机器物品被漏斗"抽干"或"塞爆"。

一、先厘清概念:方块存储中的「输入槽」与「输出槽」

MCreator 中,带存储的方块通过绑定一个 GUI 来呈现其物品栏(BlockGUI 中的guiBoundTo参数)。GUI 里的每个物品槽位都是一个GUIComponent,其中与自动化传输直接相关的是两类槽位组件:

  • InputSlot(输入槽):定义于 src/main/java/net/mcreator/element/parts/gui/InputSlot.java,是玩家向方块"放入"物品的槽位(典型如合成台的原料槽、熔炉的燃料槽),其内部名称为input_slot_<id>,并额外带有inputLimit(限定可放入的物品)与disablePlacement(禁止放置)两个可配置项。
  • OutputSlot(输出槽):玩家从中"取走"成品或结果的槽位。

从源码结构看,二者的自动化语义恰好相反:GUI 中输入槽对应方块属性里的input_slots参数(禁止自动化从中取物),输出槽对应output_slots参数(禁止自动化向其中放物)。这一组定义保存在 Block.java 的inventoryInSlotIDs/inventoryOutSlotIDs两个整数列表中。

二、input_slots参数的含义与界面位置

block/input_slots帮助条目的英文原文是:

Input slots will not be used as output/source for hopper item transmission.

即:输入槽不会作为漏斗物品传输的输出来源。界面上的字段标签(见 texts.properties)写得更直白:

Disable taking from the following slots — Enter comma separated list of slot IDs

翻译过来就是:禁用从以下槽位取物,请输入逗号分隔的槽位 ID 列表。德语版本(即所关联文档的语言)为:

Deaktiviere die Aufnahme der folgenden Slots: Geben Sie eine mit Komma getrennte Liste von Slot-IDs ein

也就是说,填在input_slots里的槽位,漏斗、投掷器等自动化设备不能从中把物品抽走——它们不再充当自动化传输的"源(source)",物品只能被玩家手动取出,或由其他自动化设备放入。

在方块编辑器中,该字段位于Inventory(存储)设置区:GUI 属性面板中「Disable taking from the following slots」文本框(inSlotIDs),其上方是output_slots(「Disable inserting into the following slots」)。两者均带问号帮助按钮,分别挂接block/input_slots与block/output_slots帮助条目(BlockGUI.java)。

三、槽位 ID 从哪来:GUI 编辑器中的槽位编号

input_slots字段填写的是槽位 ID(Slot ID),而不是笼统的"第几个格子"。这些 ID 来自所绑定 GUI 中每个槽位组件的id属性(Slot.java),在 GUI 编辑器(WYSIWYG)中会以两位数字形式(%02d,即00、01…)绘制在槽位图标右下角(Slot.java),因此你在设计 GUI 时可以直接看到每个槽的编号。

MCreator 还提供了一个省事的设计:当你在方块属性中绑定 GUI 后,编辑器会自动遍历该 GUI 的所有组件,把InputSlot组件的 id 依次填充进inSlotIDs、把OutputSlot组件的 id 填充进outSlotIDs(BlockGUI.java),无需手工记忆编号。之后你仍可在此基础上增删 ID。

填写时需要注意:

  • 使用英文逗号分隔多个 ID,例如0,1,2,不要带空格(连续输入0, 1也会被接受,因为解析时会逐项Integer.parseInt)。
  • 槽位编号从 0 开始,最大不超过 GUI 槽位数量。
  • 输入框带有实时校验器 CommaSeparatedNumbersValidator.java:只允许"逗号分隔的整数列表",留空视为合法(表示不做限制);出现非法字符时会显示validators.only_number_list错误提示并阻止保存。

四、底层原理:生成的方块实体代码如何执行这条规则

理解input_slots真正的效果,需要看它如何被翻译为模组代码。MCreator 的代码生成器会把inventoryInSlotIDs写入方块实体模板 blockentity.java.ftl(NeoForge 26.3 版本对应 neoforge-26.3 下的同名模板,两个生成器均支持该特性)。

该方块实体实现了WorldlyContainer接口,自动化(原版漏斗、投掷器、合成器,以及第三方物品自动化模组)正是通过以下两个方法判断能否与方块交互:

@Override public boolean canTakeItemThroughFace(int index, ItemStack itemstack, Direction direction) { <#list data.inventoryInSlotIDs as id> if (index == ${id}) return false; </#list> <#if hasProcedure(data.inventoryAutomationTakeCondition)> return <@procedureCode data.inventoryAutomationTakeCondition, {...}, false/>; <#else> return true; </#if> }

逻辑一目了然:

  1. 若请求的槽位index命中了inventoryInSlotIDs列表中的任意 ID,直接返回false——自动化设备无法从这些输入槽取物;
  2. 未命中的槽位,若还配置了取物条件inventoryAutomationTakeCondition,则进一步执行该条件流程决定是否放行。

与之对称,canPlaceItemThroughFace(自动化放物入口)会先经过canPlaceItem,其中对inventoryOutSlotIDs中的槽位一律返回false,即输出槽不接受自动化放入的物品。

因此这套规则的本质是两条"硬开关":输入槽=自动化取物禁区,输出槽=自动化放物禁区;input_slots与output_slots共同把方块存储划分成"可进可出(普通槽)""只进不出(输入槽)""只出不进(输出槽)"三类区域。

与自动化条件的关系(重要)

方块属性里还有两个独立的条件项:inventoryAutomationTakeCondition(取物条件)与inventoryAutomationPlaceCondition(放物条件)。它们不是输入/输出槽列表的替代品,而是叠加约束。帮助文档 inventory_automation_take_condition.md 明确指出:该条件与"允许取物的槽位列表"一起检查,两个条件需同时满足。也就是说:

  • 输入槽列表内的槽位:无论条件如何,永远不能被自动化取走;
  • 输入槽列表外的槽位:能否被取走,取决于取物条件(若未配置则默认可取)。

模板代码也印证了这一点:canTakeItemThroughFace中inventoryInSlotIDs的检查发生在条件判断之前且直接短路返回。

五、实战示例:设计一个"合成类"机器方块

假设你要做一个自动合成方块,GUI 布局如下:

槽位 ID类型用途
0、1InputSlot原料输入
2OutputSlot成品输出
3普通槽备用/可自由进出

期望行为是:漏斗能放入原料到槽 0、1,能取走槽 2 的成品,但绝不能从槽 0、1 抽走原料。此时配置为:

  • Disable taking from the following slots(input_slots):0,1
  • Disable inserting into the following slots(output_slots):2

生成的代码中,canPlaceItemThroughFace对槽 0、1、3 放行(槽 2 因命中inventoryOutSlotIDs被拒),canTakeItemThroughFace对槽 2、3 放行(槽 0、1 因命中inventoryInSlotIDs被拒)。自动化流转即被严格限定为:漏斗 → 0/1(进)、2(出)→ 漏斗。

若两个字段都留空,则表示所有槽位都可被自动化取放(仅受可选的自动化条件流程约束)——这是没有特殊自动化策略时的默认行为。

六、常见误区与注意事项

  • 输入槽 ≠ 玩家不可取物。input_slots只影响漏斗等自动化设备(WorldlyContainer的面向接口方法),不影响玩家手动点击 GUI。若想限制玩家操作,应使用 GUI 槽位组件自身的disablePickup(禁止拾取)属性,二者是完全独立的机制。
  • ID 必须与 GUI 槽位真实编号一致。填错编号不会报错,但会静默地放行本应禁止的槽位,导致机器物品被意外抽走。绑定 GUI 后编辑器自动填充的值是最可靠的起点。
  • 编号从 0 开始,且不要超出 GUI 的槽位范围;逗号分隔列表须能通过整数解析校验,否则无法保存。
  • 条件流程不是豁免开关。输入槽的"禁止取物"是硬性限制,inventoryAutomationTakeCondition无法覆盖它;反之,输出槽的"禁止放物"也不受inventoryAutomationPlaceCondition影响。
  • 相关字段(Block.java)仅在hasInventory开启时生效,并且依赖 GUI 绑定(guiBoundTo),未绑定 GUI 的方块存储不适用此配置。

七、延伸阅读

围绕方块存储与自动化传输,仓库中还提供了下列相关帮助条目与源码,可作为组合配置的参考:

  • 输出槽对称说明:output_slots.md
  • 自动化取物/放物附加条件:inventory_automation_take_condition.md、inventory_automation_place_condition.md
  • 存储开关与 GUI 绑定:has_inventory.md、bind_gui.md
  • GUI 槽位组件的程序化定义:Slot.java、InputSlot.java、OutputSlot.java

掌握input_slots与output_slots这对"自动化方向闸门",再配合取物/放物条件流程,你就能在 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.

项目地址:https://gitcode.com/gh_mirrors/mc/MCreator
点击查看免费下载

相关推荐

上一篇:FoundationDB 提交路径深度解析:从读版本获取到事务落盘的完整链路
下一篇:Fleet REST API 实战指南:从认证、主机管理到策略与软件自动化

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 6:21:48

2021人工智能考研全流程指南:初试、复试与调剂策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/16 6:20:59

iTop PHPUnit 单元测试指南:从环境搭建到进程隔离的完整实践

后端企业应用 【免费下载链接】iTop A simple, web based CMDB & IT Service Management tool 项目地址&#xff1a; https://gitcode.com/gh_mirrors/it/iTop 点击查看 免费下载 本指南面向 iTop 开发者&#xff0c;系统讲解如何为 iTop 创建、维护 PHPUnit 单元测试与集…

作者头像 李华
网站建设 2026/10/16 6:20:06

WeChatMsg 微信聊天记录导出:免费完整备份并生成年度报告

WeChatMsg 微信聊天记录导出&#xff1a;免费完整备份并生成年度报告 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/We…

作者头像 李华
网站建设 2026/10/16 6:20:02

Folia 完全上手指南:把每首歌变成全屏歌词 PV,从安装到主题调优

Folia 完全上手指南&#xff1a;把每首歌变成全屏歌词 PV&#xff0c;从安装到主题调优 【免费下载链接】folia-major 专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器 项目地址: https://gitcode.com/GitHub_Trending/fo/folia-major Folia …

作者头像 李华
网站建设 2026/10/16 6:16:31

3D模型渲染从建出来到渲染对:计算机图形学原理与实操排查指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华