legg0028

blood_altar

Aug 14th, 2025 (edited)
443
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.51 KB | None | 0 0
  1. -- Blood Altar Turtle (redstone-based crafting, ASCII UI)
  2. local TIMEOUT = 60  -- seconds to wait before giving up
  3.  
  4. ---------------------------------------------------
  5. -- Helpers
  6. ---------------------------------------------------
  7. local function header(title)
  8.     term.clear()
  9.     term.setCursorPos(1,1)
  10.     print("=== Blood Altar Turtle ===")
  11.     print("--------------------------")
  12.     print(title)
  13.     print("")
  14. end
  15.  
  16. local function getSlot1ItemId()
  17.     local data = turtle.getItemDetail(1)
  18.     if not data then return nil end
  19.     return data.name
  20. end
  21.  
  22. ---------------------------------------------------
  23. -- Crafting Logic
  24. ---------------------------------------------------
  25. local function processOne()
  26.     if turtle.getItemCount(1) == 0 then return false end
  27.  
  28.     local itemId = getSlot1ItemId()
  29.     if not itemId then return false end
  30.  
  31.     header("Preparing item: " .. itemId)
  32.  
  33.     -- Drop item into altar
  34.     turtle.select(1)
  35.     while not turtle.drop(1) do
  36.         header("Preparing item: " .. itemId)
  37.         print("[!] Altar occupied. Waiting...")
  38.         sleep(1)
  39.     end
  40.     turtle.suckUp(1)
  41.     turtle.select(16)
  42.  
  43.     -- Wait for redstone signal or timeout
  44.     local crafted = false
  45.     local timer = os.startTimer(TIMEOUT)
  46.     local waited = 0
  47.  
  48.     while true do
  49.         header("Processing item: " .. itemId)
  50.         print("[...] Waiting for altar signal")
  51.         print("     Time waited: " .. waited .. "s / " .. TIMEOUT .. "s")
  52.  
  53.         local event, arg = os.pullEvent() -- wait for any event
  54.         if event == "redstone" then
  55.             crafted = true
  56.             break
  57.         elseif event == "timer" and arg == timer then
  58.             header("Processing item: " .. itemId)
  59.             print("[!] Timeout reached (" .. TIMEOUT .. "s). Assuming stuck.")
  60.             break
  61.         end
  62.         waited = waited + 1
  63.     end
  64.  
  65.     -- Pull finished item
  66.     turtle.suck()
  67.  
  68.     -- Exit if slot 1 is empty
  69.     if turtle.getItemCount(1) == 0 then
  70.         header("Shutting down...")
  71.         print("No more items in slot 1. Exiting program.")
  72.         error("Slot 1 empty, exiting.")  -- stops the program
  73.     end
  74.  
  75.     return true
  76. end
  77.  
  78. ---------------------------------------------------
  79. -- Main Loop
  80. ---------------------------------------------------
  81. header("Ready")
  82. print("Put raw items in slot 1.")
  83. print("Turtle will wait for altar signal.")
  84. print("Timeout after " .. TIMEOUT .. " seconds.\n")
  85.  
  86. while true do
  87.     if not processOne() then
  88.         sleep(1)
  89.     end
  90. end
  91.  
Advertisement
Add Comment
Please, Sign In to add comment