创建:高级频率网络

创建:高级频率网络

创建:AFN 是一个Create附属模组,将双槽频率组织成分层频道(例如,factory.production.line_01)。它增加了认证、工单、访问控制和身份验证功能,非常适合工厂、站点、基地和冒险地图使用。

创建

Create: 高级频率网络(AFN)

视频教程(Bilibili,新视频即将推出!) · AFN WIKI

MC百科 · CurseForge

关于模组

Create: Advanced Frequency Network 通过更灵活的频率编辑、匹配和管理功能,扩展了机械动力的无线红石系统:

  1. 使用英文字母、数字和中文字符定义频段,并与机械动力及其附属模组中的无线红石设备兼容。
  2. 使用点号组织层级化的频段,并提供个人历史库。
  3. 使用通配符、字符集和局部排除规则来匹配信号。
  4. 引入完整的信号权限控制系统,以防止信号劫持。
  5. 将无线信息传输引入机械动力,除了传统的 0-15 离散整数无线信号强度值外,还可以传输文本、实数数组、布尔值以及可映射至 Synaxis 的结构化数据,具有巨大的开发潜力。
  6. 与 Synaxis、Aeronautics 和 CC:Tweaked 兼容,并适配 Aeronautics 的物理化设备。
  7. 在任何图形界面中,按空格键即可编辑频段,更加快速便捷。

频率网络

  • 使用层级化频率(如 factory.production.line_01)组织大型无线网络。支持英文字母、数字和中文字符;点号用于分隔层级。
  • 常规频率板可存储一个主频率和多达五个别名。别名可以使用“或”或“与”逻辑进行求值。
  • 支持的匹配语法包括 ?、单层 *、跨层 **、字符集(如 [A-C] / [0-9]),以及仅适用于紧邻前一层的局部排除符 !。
  • 历史库按层级存储字面地址。输入一个字符后,会从当前层级提示条目。
  • 经过认证的频率板提供所有者、读写访问控制列表(ACL)以及可选的安装锁。没有权限的玩家无法查看隐藏的主频率。
  • 穿戴机械动力工程师护目镜的玩家,可以看到他们在世界中允许读取的频率标签。

局部排除示例

1.2.[1-9].!1!2!3![4-8].[2-4].!2!3

每个 ! 仅排除紧邻其前一层的简写项目,因此上面的表达式最终只匹配 1.2.9.4。字符集区分大小写;[A-Za-z0-9] 组合了大写字母、小写字母和数字。

邮箱

邮箱是一种单信道无线设备,具有与无线红石终端相同的信号接收和发送能力。在携带信号的同时,它还可以在接收端保留一个附加的值。

邮箱可以读取或写入机械动力显示链接器支持的信号源和输出目标。

可选输出目标

输出目标 输出目标 输出目标 输出目标
发光显示 翻板显示 告示牌 讲台

可选输入源

输入源 输入源 输入源
座位 置物台 发光显示
堆料开关 智能观察器 安山岩隧道
黄铜隧道 列车观察器 列车站
布谷鸟钟 应力计 速度表
流体储罐 工厂仪表 传送带
附魔台 重生锚 命令方块
标靶 罐子 展示支架
地球仪 公告板

配置自动写入或自动输出后,邮箱可以从其附着的方块读取信息,或将其存储的信息写入该方块。这两个选项不能同时启用。在发送或发送/接收模式下,使用红石为邮箱供能会将其当前值发送到配置的频率上。

邮箱使用 AFN 频率匹配,并支持通配符、字符集、局部排除、别名和认证。

AFN 桥接器

桥接器是一种独立的多信道控制器。每个桥接器最多存储 64 个信道,并且可以组合玩家交互、红石输入、CC:Tweaked、Synaxis 和无线信号源。标准桥接器内置 CRT;2×1×2 的大桥接器将相同的功能作为触控操作的世界显示器呈现。

每个信道使用一个统一的结构:

信道名称 + 主频率 + 可选次频率 + 可选值 + 激活状态
  • 没有主频率时,信道仍然可以在本地存储、显示和编辑,但它不会加入无线网络。
  • 次频率有三种模式:无、手动频率 和 认证板。如果选择的认证板无效,则无线注册将安全失败(关闭)。
  • 信道值可以是文本、布尔值或包含 1-7 个有限实数的数组。文本限制为 1,024 个 Unicode 码点和 4,096 个 UTF-8 字节。
  • 无值和空字符串 "" 是不同的:清除值会移除负载;空字符串是一个真实的、存在的文本值,可以同步。
  • 写入值不会激活信道,激活也不需要存在值。

票据与访问控制

  • 票据机使用认证板批量签发或解绑票据;同一批次签发的票据最多堆叠 64 个。
  • 票据显示其标题和签发者。用于验证的主频率绝不会在物品提示中显示。
  • 票据验证器首先检查频率和 ACL,然后将票据存储在其 27 个槽位的保留票据库存中。如果库存已满,票据将不被消耗,访问也不会被授予。该库存可以与漏斗和机械动力溜槽交互。
  • 票据验证器、身份读卡器和身份柱可以输出 20 个游戏刻的红石脉冲,并且可以发送一个由常规频率和认证身份组成的无序双频信号。
  • 状态灯在空闲时保持熄灭,成功时亮绿色,失败时亮红色。

无线值边界

  • AFN 桥接器 → AFN 桥接器:激活强度和一个可选值通过同一条允许的无线连接传输。
  • AFN 桥接器 → 常规机械动力设备:常规设备仅处理 0-15 的强度并忽略值。
  • 常规机械动力发射器 → AFN 桥接器:可以激活匹配的信道,但不能覆盖其值。
  • 无线输入不会自动重发,以防止 A → B → A 的中继循环。无线发送仅由本地信号源(如红石、玩家、CC:Tweaked 或 Synaxis)驱动。
  • 当多个信号源激活时,强度最高者胜出。对于携带值的信号源,一个稳定的信号源标识符会根据强度和仲裁规则选择一个胜出者。

CRT 与世界显示器

默认、开关、柱状图、仪表和地图是五种解释视图,而非五种存储类型。如果某个值无法被所选视图解释,该视图会在视觉上回退:开关显示关闭,图表显示 0,地图仅显示设备位置。只有在玩家实际触碰控件后,才会写入归一化值。

屏幕可以使用系统激活列表或保存的自定义显示顺序。详细地图支持缩放、点选和收藏点。它以低频读取客户端加载的地形,并且绝不会为了绘制地图而生成或强制加载区块。整数交互仅影响玩家屏幕输入;它不会改变常规 GUI、CC:Tweaked、Synaxis 或无线写入的精度。

红石绑定使用相对于屏幕正面的前、后、左、右、上、下方位。也可以选择全方向选项,以及精确强度或全部强度选项。一个输入可以同时激活多个信道。

可选集成

CC:Tweaked 1.118+

相邻的计算机或有线网络可以连接到 afn_bridge 外设。大桥接器的四个物理方块映射到同一个外设实例。该模组提供:

local afn = require("afn")

-- 强度 15,持续时间 20 个游戏刻;当主频率有效时进行无线发送
local pulse = afn.pulse("door")
assert(pulse.success, pulse.error)

-- 简单的覆盖写入无需先读取修订号
local changed = afn.set_value("door", "OPEN")
assert(changed.success, changed.error)

-- 无值和空文本是不同的
assert(afn.set_value("door", "").success)  -- 存在空文本
assert(afn.clear_value("door").success)    -- 移除值

仅在执行“读取 → 计算 → 写入”序列并且不想覆盖并发更新时,才传递 revision:

local current = assert(afn.value("counter"))
local changed = afn.set_value("counter", current.value + 1, current.revision)
if not changed.success and changed.error == "revision_conflict" then
  printError("值已更改;请重新读取")
end

在没有认证板的情况下,每个非负的 ComputerID 都会被允许接入。安装认证板后,桥接器会检查认证板上的 ComputerID 白名单;空白的白名单会拒绝所有计算机接入。读取、激活和配置功能保持独立。策略更改会推送到已连接的会话;普通函数调用读取 O(1) 会话缓存,而不是每次都扫描世界、NBT、ACL 或白名单。

Lua 无法提交所有者、ACL、隐藏的认证频率或伪造的认证身份。认证次频率和临时认证传输仅使用桥接器自身的有效认证板。

afn 函数索引(43 个函数)

每个函数都接受可选的 CC 外设名称 bridge_name 作为其最后一个参数;当只连接一个桥接器时可省略。

发现与读取

  1. afn.find([name])
  2. afn.channels([bridge_name])
  3. afn.active([bridge_name])
  4. afn.display_channels([bridge_name])
  5. afn.get(channel[, bridge_name])
  6. afn.state(channel[, bridge_name])
  7. afn.value(channel[, bridge_name])
  8. afn.channel_value(channel[, bridge_name]) (value 的别名)
  9. afn.information(channel[, bridge_name]) (旧版读取)
  10. afn.frequency(channel[, bridge_name])
  11. afn.last_error(channel[, bridge_name])

激活与数值

  1. afn.set(channel[, strength[, bridge_name]])
  2. afn.pulse(channel[, strength[, ticks[, bridge_name]]])
  3. afn.toggle(channel[, strength[, bridge_name]])
  4. afn.clear(channel[, bridge_name])
  5. afn.clear_all(channel[, bridge_name])
  6. afn.set_value(channel, value[, revision[, bridge_name]])
  7. afn.set_channel_value(...) (set_value 的别名)
  8. afn.set_information(...) (旧版别名)
  9. afn.clear_value(channel[, revision[, bridge_name]])
  10. afn.clear_channel_value(...) (clear_value 的别名)

主频率、次频率、显示与配置

  1. afn.set_primary_frequency(channel, frequency[, bridge_name])
  2. afn.set_secondary(channel, mode[, frequency[, bridge_name]])
  3. afn.get_display_channel([bridge_name])
  4. afn.set_display_channel(channel[, bridge_name])
  5. afn.next_display_channel([bridge_name])
  6. afn.previous_display_channel([bridge_name])
  7. afn.set_channel_displayed(channel, displayed[, bridge_name])
  8. afn.set_display_channels(channels[, bridge_name])
  9. afn.create_channel(definition[, bridge_name])
  10. afn.update_channel(channel, changes[, bridge_name])
  11. afn.remove_channel(channel[, bridge_name])
  12. afn.set_channel_type(...) (旧版投影)
  13. afn.set_information_subtype(...) (旧版投影)

Synaxis、红石与临时发送

  1. afn.set_synaxis_activation(channel, enabled[, format[, x, y[, bridge_name]]])
  2. afn.set_synaxis_receive(channel, enabled[, format[, x, y[, bridge_name]]])
  3. afn.set_synaxis_publish(channel, enabled[, format[, x, y[, bridge_name]]])
  4. afn.bind_redstone(channel, side, strength[, bridge_name])
  5. afn.unbind_redstone(channel, side[, bridge_name])
  6. afn.transmit_temporary(frequency[, strength[, attach_auth[, bridge_name]]])
  7. afn.pulse_temporary(frequency[, strength[, ticks[, attach_auth[, bridge_name]]]])
  8. afn.clear_temporary(handle[, bridge_name])
  9. afn.clear_temporary_all([bridge_name])

所有信道始终有效。receive_enabled=false 仅禁用无线输入;true 允许发送和接收。新信道默认设置为 receive_enabled=true 和 displayed=true。新程序应读取 schema_version、receive_enabled、primary_frequency、secondary_mode、secondary_frequency、value_present、value_kind、channel_value 和 value_revision。旧版的 type/subtype/value/attach_auth 快照字段和 information 函数在兼容期内保留,但无法完全表示同时具有主频率和值的信道。原始外设方法使用索引 0–38。

Synaxis

每个信道可以独立暴露三种稳定的端口类型:

  • 激活输入: 仅控制 0-15 的激活强度;支持实数 / 布尔值。
  • 值输入: 写入信道值;不激活信道。
  • 值输出: 发布信道值;不激活信道。如果转换不可能,则发布所选 Schema 的安全默认值。

值端口支持实数、布尔值、Vec3 和四元数。Synaxis 要求连接两端的 Schema 匹配,因此在布线前选择端口格式。短数组会覆盖现有数组的前部并保留其尾部;长数组会扩展该值。输出会截断多余的分量并填充缺失的分量;缺失的四元数 w 分量填充为 1。Pose / Twist 仅保持存档兼容性,无法创建;Bundle 尚不支持。

依赖项与兼容性

  • 所需环境:Minecraft 1.21.1、NeoForge 和机械动力 6.0+。
  • CC:Tweaked 和 Synaxis 是可选集成;没有它们,AFN 的核心功能仍然可用。
  • AFN 扩展了机械动力公开的双频无线链路。绕过该链路并实现独立通信系统的第三方设备不在自动兼容范围内。