CC Synaxis 连接器

CC Synaxis 连接器

一个用于连接 CC: Tweaked 电脑与 Synaxis Cimulink 工厂端口的模组。

技术

CC Synaxis Connector

CC Synaxis Connector 是一个用于连接 CC: Tweaked 电脑与 Synaxis Cimulink 工厂端口的 NeoForge 兼容模组。

它添加了桥接式电路板,让 Lua 程序、Synaxis 电路和 CSV 记录工作流能够交换数值,无需在每次连接的两端都编写自定义脚本。

亮点

  • 连接 CC: Tweaked 外设与 Synaxis Cimulink 端口。
  • 暴露命名单向实数/布尔桥接信号。
  • 使用超级中枢板包裹相邻的 CC 外设和 Synaxis 工厂数值。
  • 通过单个外设从 CC Lua 读取选定的 Synaxis 数值。
  • 将 CC 的 getter/setter 式外设方法写入 Synaxis 端口。
  • 使用游戏内表格编辑器将 Synaxis 信号记录到 CSV 文件。
  • 支持英文和简体中文界面文本。

需求

此模组并非独立模组。请同 CC: Tweaked、Synaxis 以及 Synaxis 所需的依赖项一起安装。

测试目标:

  • Minecraft 1.21.1
  • NeoForge 21.1.226+
  • CC: Tweaked 1.118.0+
  • Synaxis 1.3.4+
  • Sable 1.1.3+
  • Sable Schematic API 0.2.6+
  • LDLib2 2.2.17+
  • Create 6.0.10+
  • Flywheel 1.0.6+

生成的 jar 文件不包含 CC: Tweaked、Synaxis、Sable、Create 或其资源文件。您必须从其官方分发渠道获取这些模组。

方块

CC: Synaxis 桥接器

桥接器是一种小巧的 Cimulink 式电路板,用于手动创建单向信号通道。

每个桥接通道包含:

  • 一个唯一名称,例如 bridge_1
  • 一种类型:real 或 boolean
  • 一个方向:cc_to_synaxis 或 synaxis_to_cc
  • 一个可选的"保存最后数值"设置,用于缺失 Synaxis 输入时

使用方块界面创建和移除桥接通道。使用 Synaxis 布线工具连接生成的端口。CC 电脑可以将该方块作为名为 cc_synaxis_bridge 的外设访问。

CC: Synaxis 超级中枢

超级中枢是一种电路板,用于将附近的设备包裹成另一侧的桥接端口。

它包含两个界面页面:

  • 向 Synaxis 提供:选择被包裹的 CC 或 Synaxis 功能,并将其暴露为 Synaxis Cimulink 端口。
  • 向 CC 提供:选择被包裹的 CC 或 Synaxis 功能,并通过超级中枢 CC 外设将其暴露。

对于 CC 外设,类似 getter 的方法(例如 getSpeed()、isRunning() 或 hasFuel())被视为可读数值。类似 setter 的方法(例如 setSpeed(value))在可能的情况下成为可写输入。

对于 Synaxis,中枢通过 Synaxis 总线/工厂端口式访问读取可用的工厂数值,并将兼容的数值呈现给 CC 或 Synaxis 端口。

日志输出助手

日志输出助手是一个 Synaxis 输入板,用于将信号值写入 CSV。

它最多支持 10 列。每列创建一个 Synaxis 输入端口,并可配置为 real 或 boolean。空的、从未激活的输入会写入为 null,除非跳过了空行。

主要选项:

  • 日志名称 / 输出文件
  • 行 ID:游戏刻、行号或无
  • 写入模式:每游戏刻、数值变化时或每 N 游戏刻
  • 创建模式:立即、任一输入时或选定输入时
  • 跳过或写入完全空行
  • 从安全输出文件夹导入现有 CSV 文件

CSV 文件写入当前存档下的:

ccsconnector_outputs/

在服务器上,文件选择仅限于此输出文件夹。客户端导入流程也仅扫描客户端自身的 ccsconnector_outputs 文件夹,并将选定的 CSV 内容上传至服务器。

基本使用

  1. 放置一个连接板。
  2. 空手右键单击该板以打开其界面。
  3. 配置所需的桥接器、中枢或日志列。
  4. 使用 Synaxis 布线工具连接可见的端口。
  5. 当需要 CC 访问时,在方块旁放置或连接一台 CC 电脑。
  6. 使用 Lua 外设调用读取或写入配置的数值。

CC Lua API

桥接器外设

外设类型:

cc_synaxis_bridge

方法:

list()
schema()
info(name)
addBridge([name], type, direction)
removeBridge(name)
get(name)
set(name, value)
lastWriteTick(name)
getSaveLastValue(name)
setSaveLastValue(name, enabled)
toggleSaveLastValue(name)

示例:

local bridge = peripheral.find("cc_synaxis_bridge")
assert(bridge, "Bridge not found")

bridge.addBridge("target_speed", "real", "cc_to_synaxis")

local value = 0
while true do
  bridge.set("target_speed", value)
  value = value + 1
  sleep(1)
end

超级中枢外设

外设类型:

cc_synaxis_super_hub

方法:

list()
schema()
get(name)
getAll()
refresh()
lastUpdateTick(name)

listSynaxis()
getSynaxis(name)
getAllSynaxis()
synaxisLastUpdateTick(name)

listCcCandidates()
listExposedCc()
getCc(name)
getAllCc()

expose(...)
toggleExpose(...)
set(name, value)
write(name, value)
listProvidedToSynaxis()

暴露配置在超级中枢界面中完成。Lua 可以读取配置的数值并写入可配置的可写项,但它不会创建界面暴露行。expose 和 toggleExpose 条目是保留的兼容性方法,会引导玩家在界面中配置暴露。

示例:

local hub = peripheral.find("cc_synaxis_super_hub")
assert(hub, "Super Hub not found")

hub.refresh()

for name, value in pairs(hub.getAll()) do
  print(name, value)
end

注意事项与限制

  • Synaxis 面向的端口当前支持 real 和 boolean 数值。
  • 文本/字符串数值不会暴露为 Synaxis 端口,除非 Synaxis 提供了兼容的信号类型。
  • 并非每个 CC 外设方法都能无参数安全调用。超级中枢专注于简单的 getter/setter 式方法。
  • CC 和 Synaxis 可能以不同速率更新。连接器方块会缓存数值,以便任一方按自身节奏读取。
  • 使用常规 Synaxis 工具配置 Synaxis 线缆。空手右键单击可打开连接器界面。

整合包许可

您可以将 CC Synaxis Connector 包含在整合包中,前提是所有必需的依赖项均按照其自身的许可和权限获取并分发。

许可

本仓库仅针对本项目原创的兼容层代码和资源文件采用 MIT 许可。详见 LICENSE。

CC: Tweaked、Synaxis、Sable、LDLib、Create、Flywheel、NeoForge、Minecraft 及相关名称、API、商标、源码、二进制文件、模型、纹理和文档均属于其各自所有者,并保留在其上游条款下。

CC Synaxis Connector 是一个独立创建的、AI 辅助的兼容模组。它与 CC: Tweaked、Synaxis、Sable、LDLib、Create、NeoForge、Minecraft 或 Mojang/Microsoft 的作者无关、未获其认可、也未受其赞助。

关于依赖项和权利持有者的说明,请参见 THIRD_PARTY_NOTICES.md。

开发说明

大多数依赖项由 Gradle 从 Maven 解析。本地的 libs/ 目录仅用于当前项目无法从公共 Maven 解析的依赖项:

  • synaxis-1.3.4.jar
  • sable-schematic-api-0.2.6.jar

libs/*.jar 被 Git 忽略,因此不应提交依赖项 jar。

针对 CC:T 通用外设的兼容性回退封装在 CcTweakedInternals 中,以便在上游 API 发生变化时,方便审查或移除非公开的 CC:T 访问。

Synaxis 工厂访问通过注册的 PlantEndpointProvider 端口和 PlantPortProviders.tryCreate 实现。