Advertisement
Tatantyler

rs_lock

May 3rd, 2014
486
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.08 KB | None | 0 0
  1. -- rs_lock v1
  2.  
  3. local locks_enabled = false
  4. local pullEvent_snapshot = os.pullEventRaw
  5.  
  6. function enable(freeze_signal_side)
  7.  
  8.     locks_enabled = true
  9.     os.pullEventRaw = function(filter)
  10.         while true do
  11.             local e = { coroutine.yield() }
  12.             if e[1] == "redstone" then
  13.                 if redstone.getInput(freeze_signal_side) then -- freeze!
  14.                     term.clear()
  15.                     if fs.exists("startup") then
  16.                         if fs.exists(".rslock") then
  17.                             fs.delete(".rslock")
  18.                         end
  19.                         fs.makeDir(".rslock")
  20.                         fs.move("startup", ".rslock/startup")
  21.                         local f = fs.open("startup", "w")
  22.                         f.write([[
  23.     local freeze_signal_side = "]]..freeze_signal_side..[["
  24.     local oldPull = os.pullEvent
  25.     os.pullEvent = nil
  26.     while true do
  27.         local e = { coroutine.yield() }
  28.         if e[1] == "redstone" then
  29.             if not redstone.getInput(freeze_signal_side) then
  30.                 break
  31.             end
  32.         end
  33.     end
  34.     fs.delete("startup")
  35.     fs.move(".rslock/startup", "startup")
  36.     fs.delete(".rslock")
  37.     os.pullEvent = oldPull
  38.     local f = loadfile("startup")
  39.     f()
  40.     ]])
  41.                     f.close()
  42.                     end
  43.                     while true do
  44.                         local e2 = { coroutine.yield() }
  45.                         if e2[1] == "redstone" then
  46.                             if not redstone.getInput(freeze_signal_side) then
  47.                                 break
  48.                             end
  49.                         end
  50.                     end
  51.                     fs.delete("startup")
  52.                     fs.move(".rslock/startup", "startup")
  53.                     fs.delete(".rslock")
  54.                 end
  55.             end
  56.             if filter == nil or e[1] == filter then
  57.                 return unpack(e)
  58.             end
  59.         end
  60.     end
  61.  
  62. end
  63.  
  64. function disable()
  65.     locks_enabled = false
  66.     os.pullEventRaw = pullEvent_snapshot
  67. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement