Skip to content

Attachment Modules

mc_Edwin edited this page Jul 30, 2026 · 1 revision

附属模块系统

附属模块是在同一台 MMCE 机器上声明额外多方块结构的机制。主结构保留原生顶层 parts,其保留 ID 为 main;额外结构写入顶层 modules 数组。

最小示例

{
  "registryname": "distillation_tower",
  "localizedname": "蒸馏塔",
  "parts": [
    { "x": 0, "y": -1, "z": 0, "elements": ["minecraft:iron_block"] }
  ],
  "modules": [
    {
      "id": "cooling_compressor",
      "parts": [
        { "x": 3, "y": 0, "z": 0, "elements": ["minecraft:packed_ice"] }
      ]
    }
  ]
}

不要在 modules 中再声明一个 main。模块坐标与主结构完全共用同一个控制器原点和旋转规则。

字段

字段 类型 默认值 说明
id string 机器内唯一、区分大小写;不能是 main
parts array 与原生 MMCE parts 条目格式相同
depends-on string[] ["main"] 所有依赖都生效时,本模块才可能生效;[] 表示平行模块
conflicts-with string[] [] 任一冲突模块也匹配时,冲突双方均不生效
as-upgrade boolean true 生效时是否提供一个与模块 ID 同名的 MMCE 升级

加载时会拒绝空 ID、重复 ID、自依赖、自冲突、未知引用和循环依赖。建议让互斥双方都写明 conflicts-with,便于维护,尽管运行时按双向冲突处理。

检测时机与规则

每次 MMCE 对主结构执行结构检测时,本模组也在同一轮检测附属模块。只有主机器已识别且 main 成型后,附属模块才会参与当前机器。

检测顺序:

  1. 检查每个模块的有效 parts 是否匹配世界方块。
  2. 解析父模块链;直接和间接依赖必须全部生效。
  3. 处理冲突;相互冲突且都匹配的模块会同时关闭。
  4. 把最终生效模块中的仓室、总线等模块化组件加入机器,并同步可变色外观。
  5. 模块状态变化后重新触发配方搜索。

父子结构坐标重叠

父模块拥有重叠坐标的最终定义权。若子模块在同一坐标声明了不同方块,该子模块位置视作空气/无效定义,以父模块为准;该规则会递归应用到全部祖先,并同时用于结构匹配、组件收集和 JEI 预览。

完整关系示例

"modules": [
  {
    "id": "cooling",
    "parts": [
      { "x": 3, "y": 0, "z": 0, "elements": ["minecraft:packed_ice"] }
    ]
  },
  {
    "id": "spacetime_pipe",
    "depends-on": ["cooling"],
    "conflicts-with": ["low_pressure_pipe"],
    "parts": [
      { "x": 4, "y": 0, "z": 0, "elements": ["minecraft:diamond_block"] }
    ]
  },
  {
    "id": "low_pressure_pipe",
    "conflicts-with": ["spacetime_pipe"],
    "parts": [
      { "x": -3, "y": 0, "z": 0, "elements": ["minecraft:gold_block"] }
    ]
  },
  {
    "id": "alternate_shell",
    "depends-on": [],
    "as-upgrade": false,
    "parts": [
      { "x": 0, "y": -3, "z": 0, "elements": ["minecraft:glass"] }
    ]
  }
]

JEI/HEI 结构预览

拥有模块的机器会在原 MMCE 预览右下角增加:

  • 模块切换按钮:按 main、随后按 JSON 声明顺序循环模块页;tooltip 显示当前模块。
  • 与父模块合并展示按钮:当前页存在父模块时显示在切换按钮左侧,默认关闭。开启后展示当前模块及所有祖先,直到依赖链根部。

单模块页仅保留主控制器作为定位参照,其余主结构方块隐藏。预览反映定义和父子覆盖规则,不表示世界中的模块当前已经生效。

附属模块区域选择工具

工具继承 MMCE 原版选择工具,并与原版及其他兼容选择工具共享玩家选区。

  1. 创造模式并具有管理员权限。
  2. 右键方块选择/取消选择,观察与原版一致的高亮。
  3. 保证主机器已经形成;若要继续制作模块 2,先让已有模块 1 也实际生效。
  4. 选中待新增方块。选区可以包含部分已形成方块。
  5. 手持工具潜行右键控制器。

工具会从选区中扣除当前已形成结构的全部坐标,包括 main 和所有当前生效附属模块,只导出剩余方块。结果是一个可直接粘贴进 modules 数组的模块对象,同时复制到剪贴板并保存临时 JSON。

若控制器未识别机器,则回退为 MMCE 原工具行为,导出完整结构 JSON。若扣除后为空,会明确提示,而不会生成空模块。

导出的独立模块对象文件不能长期留在 MMCE machinery 加载目录中;粘贴进正式机器 JSON 后请移走或删除临时文件。

与配方联动

模块默认同时作为同 ID 升级;更精确的配方条件请使用 CraftTweaker API 中的 withModule/withoutModule

Clone this wiki locally