← Назад к ресурсам

CC: Relative Routing

Call peripherals using relative coordinates instead of ids

Modrinth game-mechanics technology utility

Описание

# CC: Relative Routing CC: Relative Routing adds two ComputerCraft peripherals that lets you interact with the world using **relative coordinates** instead of peripheral IDs, making your programs portable and reproducible. --- ## Blocks ### Redstone Router Send wireless redstone signals to relative coordinates and block faces. Connect a CC computer to the Redstone Router, then use the `redstone_router` peripheral: ```lua local router = peripheral.find("redstone_router") -- Power the north face of the block 3 east, 0 up, 2 north of the router router.setRedstone(3, 0, -2, "north", 15) -- Read redstone print(router.getRedstone(3, 0, -2, "north")) -- 15 -- Remove all active signals router.clearAll() ``` **API** | Method | Description | |--------|-------------| | `setRedstone(x, y, z, side, power)` | Sets a redstone signal (power 0–15) on the given face of the target block. Power 0 removes the signal. | | `getRedstone(x, y, z, side)` | Returns the currently stored power for that offset + face. | | `clearAll()` | Removes all active signals from this router. | `side` is one of: `north` `south` `east` `west` `up` `down` --- ### Peripheral Router Wrap any CC-compatible peripheral nearby using relative coordinates instead of a peripheral name or side. The peripheral can be used as if it was connected to the computer. ```lua local router = peripheral.find("peripheral_router") -- Wrap a monitor at offset (3, 0, 0) local mon = router.wrap(3, 0, 0) mon.setTextScale(1) mon.clear() mon.setCursorPos(1, 1) mon.write("Hello from relative routing!") -- Check what's at an offset before wrapping if router.isPresent(0, 2, 0) then print(router.getType(0, 2, 0)) -- e.g. "monitor" print(router.getMethods(0, 2, 0)) -- list all methods end -- Call a single method without wrapping router.call(3, 0, 0, "write", "Hello") -- You can even move fluids local input_fluid_tank = router.wrap(1,0,0) local output_fluid_tank = router.wrap(3,0,0) local moved = output_fluid_tank.pullFluid(input_fluid_tank, 1000, "minecraft:water") print(moved .. " mB moved") ``` **API** | Method | Description | |--------|-------------| | `wrap(x, y, z)` | Returns a proxy object with all the target peripheral's methods. Prefer this for interacting with peripherals. | | `isPresent(x, y, z)` | Returns `true` if a peripheral exists at the offset. | | `getType(x, y, z)` | Returns the peripheral type string, or `nil` if none. | | `getMethods(x, y, z)` | Returns a table of all method names on the peripheral. | | `call(x, y, z, method, ...)` | Calls a single named method. Note: may return `nil` for value-returning methods. Use `wrap()` when you need return values. | > Coordinates are relative to the Peripheral Router block itself. Works with any CC:Tweaked peripheral: monitors, speakers, disk drives, modems, and peripherals added by other mods. --- ## Target Wand The **Target Wand** is a helper item that prints the correct relative coordinates for any block relative to a router, so you never have to count blocks manually. **Usage:** 1. Right-click a **Redstone Router** or **Peripheral Router** to select it as the controller. 2. Right-click any other block to print the relative coordinates and a ready-to-use Lua snippet in chat. For Peripheral Router targets, it also detects what peripheral (if any) is at that position. --- ## Configuration The config file is at `config/ccrelativerouting-common.toml`. | Option | Default | Description | |--------|---------|-------------| | `maxRange` | `128` | Maximum distance for Redstone Router offsets | | `peripheralMaxRange` | `128` | Maximum distance for Peripheral Router offsets |