Skip to content

Trait 与机器 UI ​

MBD2 21.1.1

Trait 是可配置的机器组件。请区分三套 IO:配方 handler IO、分侧方块 capability IO,以及自动世界 IO。

MBD2 Machine Traits 视图,列出物品、流体、能量与整合 Trait,以及 Add Trait 控件
Machine Traits 视图。可选整合条目只在对应模组加载时出现。

配置 Trait ​

设置用途
Trait nameKubeJS lookup 与生成 ui:<name> ID 使用的稳定名称
Recipe handler IO配方逻辑是否能从 Trait 消耗或向其中产出
Recipe logics机器的哪些配方逻辑可以使用该 Trait;为空表示全部
Distinctcapability 内容是否必须不跨 handler 合并处理
Slot names配方 slotName 引用的可选路由名
Capability IO相对机器正面,哪些世界侧允许插入/提取
GUI IO机器 UI 允许的操作
Auto IO定期与相邻方块 capability 传输
Filter/capacity/rateTrait 特有存储限制
Keep data on drop掉落的机器物品是否带上该 Trait 的数据,见下文

核心 Trait ​

Trait type运行时存储配方 handler世界 capability
item_slotItem stack transferitem、item_durability分侧物品 handler
fluid_tankFluid storage listfluid分侧流体 handler
forge_energy_storageCopiable energy storageforge_energyCapabilities.EnergyStorage.BLOCK
entity_handler实体交互配置entity面向行为,并非常规物品栏存储

可选 Trait 只在依赖存在时出现:chemical_tank、mek_heat_container、pneumatic_pressure_air_handler、pneumatic_heat_exchanger、aura_handler、ars_source_storage、ars_nearby_source、ae2_me_interface、ae2_me_pattern_provider、astral_lumen_storage、astral_starlight_receiver、astral_researcher。参见集成。

超过一组的物品槽 ​

Since after 21.1.2

item_slot Trait 的 Slot Limit(槽位限制)是一个槽位能放多少物品。21.1.2 及以前,一个槽位最多只能放到物品自身的堆叠上限,通常是 64。开启 Ignore item stack limit(忽略物品堆叠上限)后,它可以一直放到槽位限制,最多 2,147,483,647 个。

两个最多各放 4096 个的槽位;随后开启 Keep data on drop,拆掉机器再放回去。
  • 不可堆叠的物品(如工具)每个槽位仍只放一个。
  • 1000 及以上的数量会缩写显示,悬停提示里是完整数量。
  • 点击每次最多取出一组。漏斗、管道和自动 IO 照常搬运,配方也能消耗和产出任意数量。
  • 机器被破坏时,物品按正常堆叠掉落。关闭 Drop items(掉落物品)则直接消失;开启 Keep data on drop(掉落时保留数据)则保存在机器物品里。
  • slot_limit 和 ignore_item_stack_limit 都是 runtime value,单台机器可以各自修改。

掉落时保留数据 ​

Since after 21.1.2

每个 Trait 都有 Keep data on drop(掉落时保留数据)。开启后,破坏机器时会把这个 Trait 的数据——物品槽的内容、储罐的流体、能量存储的电量、Trait 的 runtime value——写进掉落的机器物品,放下这个物品时全部恢复。此时 Trait 自己不再掉落任何东西,除非机器根本不掉落物品。仍和新机器时一样的 Trait 不会往物品里写任何东西,所以空着拆下的机器照样可以堆叠。

这里的每一项设置都能按机器覆盖

Trait 的设置同时也是 runtime value:配方 handler IO、distinct、slot names、capability IO、auto IO、容量和过滤器,都可以由蓝图或脚本在单台放置的机器上覆盖,而不动定义。

生成并绑定 UI ​

MBD2 Machine UI 编辑器显示元素层级、画布、物品栏槽位、样式表和添加元素控件
Machine UI 画布;它的添加按钮从已配置的 Trait 生成控件。

实现 IUIProviderTrait 的 Trait 定义使用基于 ui:<trait-name> 的 ID 创建模板。SLOT 布局进入输入/输出列,BAR 布局位于其下方。UI 生成器还可添加配方进度、燃料进度、配方查看器查询和玩家物品栏;有多个配方逻辑的机器会为每个逻辑各提供一个进度条和燃料条。

Trait 名称和数量稳定后再生成 UI。重命名 Trait 时,检查所有生成组件 ID、配方 slotName/uiName 和脚本。

运行时 initTraitUI 将真实 Trait 绑定到匹配组件。存储由服务端控制;控件应发送操作或使用 data binding,不能直接信任客户端值。

跨部件 UI ​

多方块控制器的 UI 可以把一个控件绑定到它某个部件上的 Trait,部件的 UI 也可以绑定到控制器上的 Trait。在编辑器里给元素一个带前缀的 ID:

位于ID 形式绑定到
控制器的 UIpart:<traitName>@ui:<widgetId>任一已成型部件上的该 Trait
部件的 UIcontroller:<traitName>@ui:<widgetId>任一控制器上的该 Trait——需要打开部件设置

<widgetId> 是去掉 ui: 前缀的生成控件 ID,所以部件上名为 input_items 的 Trait、其第一个槽位 ui:input_items_0,写成 part:input_items@ui:input_items_0。

绑定时 MBD2 会找到该 Trait,把元素 ID 改回 ui:input_items_0,并执行该 Trait 的 initTraitUI。如果没有部件或控制器带这个名字的 Trait,或者该 Trait 不提供 UI,元素保持原样。

用蓝图添加 UI ​

蓝图可以挂在 Build UI 事件上,往编辑器创作的界面里追加内容。Auto IO 面板内置蓝图就是这么做的,也是「机器不改 UI 树就白拿一块界面」的范式。

Released under the MIT License.