Wassaa

packager args

Dec 7th, 2016 (edited)
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.17 KB | None | 0 0
  1. -------------------------------------------------------------------------------
  2. --  verbose-packer-safe.lua  <modemSide>
  3. --  • AE2 Interface ⇄ Turtle via wired modem
  4. --  • Crafts 9→1 blocks, sends them back
  5. --  • Guaranteed clean grid before every batch
  6. -------------------------------------------------------------------------------
  7.  
  8. local modemSide = ... or "front"
  9.  
  10. -- 1. Peripherals ------------------------------------------------------------
  11. local modem      = assert(peripheral.wrap(modemSide), "No modem on "..modemSide)
  12. local interface  = assert(peripheral.find("inventory"), "No inventory/interface")
  13. local turtleName = modem.getNameLocal()
  14. local intName    = peripheral.getName(interface)
  15. print(("Bound turtle [%s] <> interface [%s] via %s"):format(turtleName, intName, modemSide))
  16.  
  17. -- 2. Helpers ----------------------------------------------------------------
  18. local craftSlots = {1,2,3, 5,6,7, 9,10,11}          -- 3×3 inside 4×4 grid
  19.  
  20. local function ts() return textutils.formatTime(os.time(), true) end
  21. local function log(msg,col)
  22.   if term.isColour() and col then local o=term.getTextColor(); term.setTextColor(col) end
  23.   print((" [%s] %s"):format(ts(), msg))
  24.   if term.isColour() and col then term.setTextColor(colours.white) end
  25. end
  26.  
  27. -- Empty any leftovers from previous attempts --------------------------------
  28. local function clearCraftGrid()
  29.   for _,s in ipairs(craftSlots) do
  30.     local n = turtle.getItemCount(s)
  31.     if n > 0 then
  32.       local back = interface.pullItems(turtleName, s, n) or 0
  33.       sleep(0.1)
  34.       log((" cleared %d item(s) from turtle slot %d"):format(back, s), colours.orange)
  35.     end
  36.   end
  37. end
  38.  
  39. -- Emergency rollback --------------------------------------------------------
  40. local function rollback(reason)
  41.   log("! "..reason.." – rolling back", colours.red)
  42.   clearCraftGrid()
  43.   local n = turtle.getItemCount(16)
  44.   if n > 0 then interface.pullItems(turtleName, 16, n) end
  45.   sleep(0.1)
  46. end
  47.  
  48. -- 3. One craft batch --------------------------------------------------------
  49. local function craftFrom(slot, count)
  50.   clearCraftGrid()                                   -- make sure every slot is empty first
  51.  
  52.   local info  = interface.getItemDetail(slot)        -- full metadata :contentReference[oaicite:2]{index=2}
  53.   local limit = info and info.maxCount or 64         -- 64 for most, 16 for eggs, … :contentReference[oaicite:3]{index=3}
  54.   local sets  = math.min(math.floor(count/9), limit) -- safe chunk size
  55.   if sets == 0 then return end
  56.  
  57.   log(("Preparing %d craft(s) from interface slot %d (%d items)"):format(sets, slot, count),
  58.       colours.yellow)
  59.  
  60.   -- Push ingredients – one shot per craft-grid slot ------------------------
  61.   for _,dest in ipairs(craftSlots) do
  62.     local moved = interface.pushItems(turtleName, slot, sets, dest)  -- docs :contentReference[oaicite:4]{index=4}
  63.     sleep(0.1)
  64.     moved = moved or 0
  65.     log((" >> moved %d/%d -> turtle slot %d"):format(moved, sets, dest),
  66.         moved == sets and colours.green or colours.red)
  67.     if moved ~= sets then return rollback("couldn't fill slot "..dest) end
  68.   end
  69.  
  70.   -- Craft ------------------------------------------------------------------
  71.   turtle.select(16)                                   -- output goes here
  72.   local ok, err = turtle.craft()                      -- turtle.craft docs :contentReference[oaicite:5]{index=5}
  73.   if not ok then return rollback("craft failed: "..tostring(err)) end
  74.   local out = turtle.getItemCount(16)
  75.   log(("  * crafted %d item(s)"):format(out), colours.lime)
  76.  
  77.   -- Return finished block(s) ----------------------------------------------
  78.   local back = interface.pullItems(turtleName, 16, out) -- pullItems docs :contentReference[oaicite:6]{index=6}
  79.   sleep(0.1)
  80.   if back < out then return rollback("only pulled "..back.."/"..out) end
  81.   log(("  >> sent %d crafted item(s) back"):format(back), colours.green)
  82.   turtle.select(1)
  83. end
  84.  
  85. -- 4. Main loop --------------------------------------------------------------
  86. while true do
  87.   for slot, itm in pairs(interface.list()) do         -- list() docs :contentReference[oaicite:7]{index=7}
  88.     if itm.count >= 9 then craftFrom(slot, itm.count) end
  89.   end
  90.   sleep(0.1)
  91. end
  92.  
Advertisement
Add Comment
Please, Sign In to add comment