CC:我的外设扩展器

CC:我的外设扩展器

便捷计算机工艺:为NeoForge上的“创造:航空学”调整外设

技术

CCPE — CC 外设扩展器

便捷的 ComputerCraft: Tweaked 外设,专为 NeoForge 上的机械动力:航空学模组打造

包含内容

  • 微型外设扩展器 — 对任何方块进行无线 NBT 读取;无线红石信号控制;远程外设访问
  • 红石收发器 — 无线读取和传输机械动力红石信号
  • 电子传动装置 — 专为 CC:T 控制设计的转速控制器

功能特性

📡 无线方块读取

1

CC:Tweaked 要求计算机必须与目标方块直接相邻才能访问外设。虽然许多模组为其方块添加了外设支持,但并非所有方块都具备此功能。

CCPE 添加了外设扩展器。将传感器附着到任意方块上,设置一个频道号,即可从 Lua 中无线读取该方块的数据——无需线缆,无距离限制。

  • 通过 pe.get(channel, path) 或 pe.getAll(channel) 读取 NBT
  • 路径语法:"Items[0].Count"、"ForgeData.CustomName" 等

数据每服务器刻(50毫秒)刷新一次,Lua 读取每次调用约需 0.02 毫秒——非常适合高频监控。

local pe = require("ccpe.pe")
local data = pe.getAll(1)              -- 读取频道1上方块的完整 NBT
local cnt  = pe.get(1, "Items[0].Count")  -- 按路径读取特定字段

🔌 外设代理

  • pe.getPeripheral(ch) — 无线访问附着方块的 CC:T 外设方法

🧭 导航台集成(需要 simulated:navigation_table)

方法 返回值 描述
pe.getNavTargetPos(ch) {x, y, z} 目标世界坐标
pe.getNavSelfPos(ch) {x, y, z} 自身世界坐标
pe.getNavDistance(ch) number 到目标的距离(米)
pe.getNavRelativeAngle(ch) number 方位角(度,0~360)

🚀 物理数据(需要 Sable/物理结构)

方法 返回值 描述
getPhysicsPos(ch) {x, y, z} 世界坐标(米)
getPhysicsOrientation(ch) {x, y, z, w} 旋转四元数
getPhysicsCenterOfMass(ch) {x, y, z} 质心(世界坐标)
getPhysicsMass(ch) number 质量(千克)
getPhysicsChainMass(ch) number 物理体链总质量(千克)
getPhysicsGravityForce(ch) number 重力(牛顿)
getPhysicsChainGravityForce(ch) number 物理体链总重力(牛顿)

速度方法需要传感器附着在 simulated:velocity_sensor 上

方法 返回值 描述
getPhysicsVelocity(ch) {x, y, z} 地面速度(米/秒)
getPhysicsAirVelocity(ch) {x, y, z} 空速,已扣除风速(米/秒)
getPhysicsAngularVelocity(ch) {x, y, z} 角速度(弧度/秒)

📶 无线红石

  • pe.setRedstoneOutput(ch, 0-15) — 传输红石信号(主线程执行)
  • pe.getRedstoneOutput(ch) — 读取已传输的信号
  • pe.getRedstoneInput(ch) — 读取接收到的信号

📻 红石收发器

2

允许计算机直接读取和传输机械动力红石信号——无需在计算机旁放置多个红石信号方块。

每个收发器使用旗帜配置多个频道,每个频道绑定一对红石频率物品。可通过 Lua 按频道号访问:

local r = peripheral.find("ccpe:redstone_transceiver")

-- 读取频道3上的机械动力红石网络信号
local signal = r.getRedstoneSignal(3)

-- 向频道7上的机械动力网络传输满信号
r.setRedstoneSignal(7, 15)
方法 描述
getRedstoneSignal(channel) 读取绑定到该频道的机械动力红石信号(0–15)
setRedstoneSignal(channel, 0-15) 向绑定到该频道的机械动力网络传输红石信号(主线程执行)

🎛️ 电子传动装置

3

它与转速控制器有何不同? 使用机械动力的转速控制器作为外设时(调用 setTargetSpeed()),会触发 RotationPropagator.handleRemoved(),导致整个下游子网络级联清除所有动力源。这会引起意外行为(例如 Aeroworks 的步进舵机在速度变化时失控)。 Simulated 的模拟传动缺乏 CC:T 接口,难以进行微调。

电子传动装置使用 detachKinetics() + attachKinetics() 温和地刷新网络,不会干扰下游设备。

电子传动装置(ccpe:transmission_peripheral)不接受红石信号——仅通过 Lua 控制。将其放置在动能网络中即可实时调节下游速度。

local t = peripheral.find("ccpe:transmission_peripheral")

-- 比率模式:下游 = 上游 × 比率
t.setRatio(0.5)   -- 降低至 50%
t.setRatio(3.0)   -- 提升至 3 倍(上限 256 RPM)

-- 目标速度模式:直接设置下游速度(0–256,保留2位小数)
t.setTargetSpeed(128.56)
print(t.getTargetSpeed())  -- 128.56

-- 查询当前状态
print(t.getRatio())
方法 描述
setRatio(ratio) 设置速度比率(≥0),进入比率模式(主线程执行)
getRatio() 获取当前比率
setTargetSpeed(speed) 直接设置下游速度 0–256.00,进入目标模式(主线程执行)
getTargetSpeed() 获取目标速度

调用 setRatio 切换到比率模式;调用 setTargetSpeed 切换到目标模式。两种模式下实际输出均以 256 RPM 为上限。


🏗️ 区块与物理体加载

传感器可以保持目标区域保持加载状态:

模式 描述 使用场景
关闭 不强制加载 短距离使用
加载区块 在传感器所在区块使用原版 setChunkForced 防止方块所在区块被卸载
加载物理体 注册 Sable 强制加载票据 + 跟随运动的 PORTAL 票据 防止飞行器/物理体被 Sable 的距离优化卸载

物理体模式会自动跟踪结构的移动,将 PORTAL 票据重新定位到物理体当前所在的区块。轴承连接链每 5 秒刷新一次。

配置(config/ccpe-common.toml):

  • sensorChunkLoadEnabled — 启用区块加载
  • sensorMaxForceLoad — 最大同时加载的传感器数量
  • sensorPortalTicketRadius — PORTAL 票据半径

快速上手

local pe = require("ccpe.pe")

-- 读取箱子库存
local items = pe.getAll(1)
for k, v in pairs(items) do print(k, v) end

-- 导航引导(传感器需附着在导航台上)
local target = pe.getNavTargetPos(2)
local dist   = pe.getNavDistance(2)
local angle  = pe.getNavRelativeAngle(2)
print(string.format("目标:距离 %.0f 米,方位 %.1f°", dist, angle))

-- 物理数据
local mass = pe.getPhysicsMass(3)
local com  = pe.getPhysicsCenterOfMass(3)
print(string.format("质量:%.1f 千克,质心:%.1f, %.1f, %.1f", mass, com.x, com.y, com.z))

-- 无线红石
pe.setRedstoneOutput(4, 15)  -- 向频道4上的传感器供电

-- 机械动力红石信号控制
local redstone = peripheral.find("ccpe:redstone_transceiver")
redstone.setRedstoneSignal(5, 15)  -- 向频道5上的机械动力网络传输信号
redstone.getRedstoneSignal(3)      -- 读取频道3上的机械动力网络信号

-- 电子传动装置控制
local trans = peripheral.find("ccpe:transmission_peripheral")
trans.setTargetSpeed(200)  -- 将下游速度设置为 200 RPM
trans.setRatio(0.75)       -- 切换到比率模式:输出 75%

前置要求

  • NeoForge 1.21.1
  • CC:Tweaked 1.118.0+
  • 机械动力 (Create) 6.0.10+
  • Simulated(机械动力:航空学)1.3.0+
  • Sable 2.0.3+

性能表现

读取操作约每次调用 0.02 毫秒,红石写入操作约每次调用 50 毫秒。