CC:相对路由

CC:相对路由

使用相对坐标而非id来调用外设

游戏机制

CC: 相对路由

CC: 相对路由添加了两个ComputerCraft外设,让你可以使用相对坐标而非外设ID与世界互动,从而让你的程序更加便携和可复用。


方块

红石路由器

向相对坐标和方块面发送无线红石信号。

将CC计算机连接至红石路由器,然后使用redstone_router外设:

local router = peripheral.find("redstone_router")

-- 给路由器以东3格、上0格、以北2格的方块北面供电
router.setRedstone(3, 0, -2, "north", 15)

-- 读取红石信号
print(router.getRedstone(3, 0, -2, "north"))  -- 15

-- 移除所有活动信号
router.clearAll()

API

方法 描述
setRedstone(x, y, z, side, power) 在目标方块的指定面上设置红石信号(信号强度0–15)。信号强度0移除该信号。
getRedstone(x, y, z, side) 返回该偏移位置+面的当前存储信号强度。
clearAll() 从该路由器移除所有活动信号。

side(面)可选值:north(北) south(南) east(东) west(西) up(上) down(下)


外设路由器

使用相对坐标(而非外设名称或侧面)来包裹附近任何与CC兼容的外设。该外设可以像直接连接到计算机一样使用。

local router = peripheral.find("peripheral_router")

-- 包裹偏移(3, 0, 0)处的显示器
local mon = router.wrap(3, 0, 0)
mon.setTextScale(1)
mon.clear()
mon.setCursorPos(1, 1)
mon.write("来自相对路由的问候!")

-- 包裹前检查偏移处有什么
if router.isPresent(0, 2, 0) then
    print(router.getType(0, 2, 0))        -- 例如 "monitor"
    print(router.getMethods(0, 2, 0))     -- 列出所有方法
end

-- 无需包裹即可调用单个方法
router.call(3, 0, 0, "write", "你好")

API

方法 描述
wrap(x, y, z) 返回一个包含目标外设所有方法的代理对象。与外设交互时推荐使用此方法。
isPresent(x, y, z) 如果偏移位置存在外设则返回true。
getType(x, y, z) 返回外设类型字符串,若无则返回nil。
getMethods(x, y, z) 返回外设上所有方法名称的表格。
call(x, y, z, method, ...) 调用单个指定名称的方法。注意:对于返回值的方法可能返回nil。当需要返回值时请使用wrap()。

坐标是相对于外设路由器方块本身。适用于任何CC:Tweaked外设:显示器、扬声器、磁盘驱动器、调制解调器以及由其他模组添加的外设。


目标魔杖

目标魔杖是一个辅助物品,可以打印任意方块相对于路由器的正确相对坐标,这样你就不再需要手动数方块。

用法:

  1. 右键点击红石路由器或外设路由器将其选为控制器。
  2. 右键点击任意其他方块,即可在聊天中打印相对坐标和立即可用的Lua代码片段。

对于外设路由器目标,它还会检测该位置是否存在外设(如果有)。


配置

配置文件位于config/ccrelativerouting-common.toml。

选项 默认值 描述
maxRange 128 红石路由器偏移的最大距离
peripheralMaxRange 128 外设路由器偏移的最大距离