Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Auto-detect peripherals and cache wrappers
- -- Works in CC:Tweaked / CraftOS
- local function detectPeripherals()
- local names = peripheral.getNames()
- local byName = {} -- byName["left"] = { name="left", type="monitor", methods=..., p=wrapper }
- local byType = {} -- byType["monitor"] = { entry1, entry2, ... }
- for i = 1, #names do
- local name = names[i]
- local pType = peripheral.getType(name) or "unknown"
- local methods = peripheral.getMethods(name) or {}
- local entry = {
- name = name,
- type = pType,
- methods = methods,
- p = peripheral.wrap(name)
- }
- byName[name] = entry
- if not byType[pType] then
- byType[pType] = {}
- end
- byType[pType][#byType[pType] + 1] = entry
- end
- return {
- byName = byName,
- byType = byType
- }
- end
- local function pickOne(cache, pType, preferredName)
- if preferredName and cache.byName[preferredName] and cache.byName[preferredName].type == pType then
- return cache.byName[preferredName].p, cache.byName[preferredName]
- end
- local list = cache.byType[pType]
- if list and #list > 0 then
- return list[1].p, list[1]
- end
- return nil, nil
- end
- -- Example usage:
- local cache = detectPeripherals()
- local monitor, monInfo = pickOne(cache, "monitor", "top")
- if monitor then
- monitor.setTextScale(0.5)
- monitor.clear()
- monitor.setCursorPos(1, 1)
- monitor.write("Monitor: " .. monInfo.name)
- end
- local modem, modemInfo = pickOne(cache, "modem")
- if modem then
- -- example: open a channel if wireless modem etc.
- -- modem.open(123)
- end
Advertisement
Add Comment
Please, Sign In to add comment