Koridev

induction port

Apr 5th, 2025 (edited)
26
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.55 KB | None | 0 0
  1. -- matrix_client.lua
  2. -- Läuft auf dem Computer, der direkt an der Mekanism Induction Port sitzt.
  3. -- Erkennt automatisch, welche Methoden existieren und ruft nur diese auf.
  4. -- Antwortet per rednet mit einem Daten-Objekt.
  5.  
  6. -----------------------------------------
  7. -- 1) KONFIG
  8. -----------------------------------------
  9. local matrixSide = "back" -- Seite, wo dein Induction-Port sitzt
  10. local modemSide = "top" -- Seite, wo dein (wireless/wired) Modem ist
  11.  
  12. -----------------------------------------
  13. -- 2) INIT
  14. -----------------------------------------
  15. local matrix = peripheral.wrap(matrixSide)
  16. if not matrix then
  17. error("Konnte Induction-Port an Seite '"..matrixSide.."' nicht finden!")
  18. end
  19.  
  20. local modem = peripheral.wrap(modemSide)
  21. if not modem then
  22. error("Modem an Seite '"..modemSide.."' nicht gefunden!")
  23. end
  24. rednet.open(modemSide)
  25.  
  26. print("Mekanism-Induction-Client gestartet. ID: "..os.getComputerID())
  27. print("Warte auf Abfragen via rednet...")
  28.  
  29. -- Alle verfügbaren Methoden ermitteln
  30. local methodList = peripheral.getMethods(matrixSide) or {}
  31. local methodSet = {}
  32. for _, m in ipairs(methodList) do
  33. methodSet[m] = true
  34. end
  35.  
  36. -- Kleine Hilfsfunktion: Ruft eine Methode sicher auf
  37. local function safeCall(methodName, ...)
  38. if methodSet[methodName] then
  39. -- Dann rufen wir "matrix[methodName](...)" per Lua-Reflection auf
  40. return matrix[methodName](...)
  41. end
  42. return nil
  43. end
  44.  
  45. -----------------------------------------
  46. -- 3) HAUPTSCHLEIFE
  47. -----------------------------------------
  48. while true do
  49. local sender, msg, proto = rednet.receive("mekanism_matrix")
  50. if type(msg) ~= "table" or not msg.cmd then
  51. rednet.send(sender, {error="Ungueltiges Kommando"}, "mekanism_matrix")
  52. else
  53. if msg.cmd == "GET_DATA" then
  54. -- Versuche diverse Felder zu holen:
  55. -- (Wir wissen nicht, welche existieren => safeCall)
  56. local stored = safeCall("getEnergy") or safeCall("getEnergyStored") or 0
  57. local capacity = safeCall("getMaxEnergy") or safeCall("getMaxEnergyStored") or 1
  58. local inputRate = safeCall("getInputRate") or safeCall("getLastInput") or 0
  59. local outputRate= safeCall("getOutputRate") or safeCall("getLastOutput") or 0
  60.  
  61. -- Baue Rueckgabe
  62. local data = {
  63. stored = stored,
  64. capacity = capacity,
  65. inputRate = inputRate,
  66. outputRate = outputRate
  67. }
  68. rednet.send(sender, data, "mekanism_matrix")
  69.  
  70. else
  71. rednet.send(sender, {error="Unbekanntes Kommando: "..tostring(msg.cmd)}, "mekanism_matrix")
  72. end
  73. end
  74. end
  75.  
Advertisement
Add Comment
Please, Sign In to add comment