1ng0

CC - MobFarm by Direwolf20

Dec 10th, 2015
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. os.loadAPI("button")
  2. local m = peripheral.wrap("right")
  3. local rsOut = {}
  4. local c = peripheral.wrap("container_chest_0")
  5. local a = peripheral.wrap("tt_magnet_0")
  6. local s = peripheral.wrap("auto_spawner_0")
  7. m.clear()
  8. local mobArray = {}
  9. local buttonColors = {}
  10. local attractorStatus = ""
  11. local page = 1
  12. local pages = 0
  13. local currMob = ""
  14.    
  15. function fillMainTable()
  16.    getCurrMob()
  17.    checkExact()
  18.    getAttractorStatus()
  19.    m.clear()
  20.    button.clearTable()
  21.    button.setTable("Lights", lights, "", 4, 17, 2, 4)
  22.    button.setTable("Door", door, "", 20, 33, 2, 4)
  23.    button.setTable("Grinders", grinders, "", 4, 17, 6, 8)
  24.    button.setTable("DrawBridge", drawBridge, "", 20, 33, 6, 8)
  25.    button.setTable("Attractor", attractorToggle, "", 4, 17, 10, 12)
  26.    button.setTable(attractorStatus, togglePush, "", 20, 33, 10, 12)
  27.    button.setTable("Mob Selector", mobSelect, "", 20, 33, 14, 16)
  28.    button.setTable("Spawner", spawner, "", 4, 17, 14, 16)
  29.    --button.setTable("Refresh", refresh, "", 15, 35, 19, 19)
  30.    print("Filled")
  31.    button.screen()
  32.    for i,j in pairs(buttonColors) do
  33.       if not rsOut[j] then button.toggleButton(i) end
  34.    end
  35.    button.toggleButton("Attractor")
  36.    button.label(1, 19, "Current Mob: "..currMob)
  37.    button.label(30, 19, "Exact: "..currExact)
  38. end
  39.  
  40. function getAttractorStatus()
  41.    if a.isPulling() then
  42.       attractorStatus = "Pulling"
  43.    else
  44.       attractorStatus = "Pushing"
  45.    end
  46. end
  47.  
  48. function togglePush()
  49.    button.flash(attractorStatus)
  50.    a.setPulling(not a.isPulling())
  51.    fillMainTable()
  52. end
  53.  
  54. function fillTable()
  55.    checkMobs()
  56.    checkExact()
  57.    getCurrMob()
  58.    m.clear()
  59.    button.clearTable()
  60.    local totalrows = 0
  61.    local npp = 12 --names per page
  62.    local numNames = 0
  63.    local col = 2
  64.    local row = 12
  65.    local countRow = 1
  66.    local currName = 0
  67.    for i,j in pairs(mobArray) do
  68.       totalrows = totalrows+1
  69.    end
  70.    pages = math.ceil(totalrows/npp)
  71.    print(totalrows)
  72.    for name,slot in pairs(mobArray) do
  73.        currName = currName + 1
  74.        if currName > npp*(page-1) and currName < npp*page+1 then
  75.          row = 4+(countRow)
  76.          button.setTable(string.sub(name, 0, 17), insertMob, slot, col, col+17 , row, row)
  77.          if col == 21 then
  78.            col = 2
  79.            countRow = countRow + 2
  80.          else
  81.            col = col+19
  82.          end
  83.        end
  84.    end
  85.    button.setTable("Next Page", nextPage, "", 27, 38, 1, 1)
  86.    button.setTable("Prev Page", prevPage, "", 2, 13, 1, 1)
  87.    button.setTable("Main Menu", goMainMenu, "", 15, 25, 1, 1)
  88.    button.setTable("Exact: "..currExact, switchExact, "", 21, 38, 18, 19)
  89.    button.setTable("Remove Mob", removeMob, "", 2, 19, 18, 19)
  90.    button.screen()
  91.    button.label(15,3, "Page: "..tostring(page).." of "..tostring(pages))
  92.    button.label(12, 16, "Current Mob: "..currMob)
  93. end      
  94.  
  95. function getCurrMob()
  96.    data = s.getStackInSlot(1)
  97.    currMob = data.captured
  98. end
  99.  
  100. function goMainMenu()
  101.    fillMainTable()
  102. --   refresh()
  103. end
  104.  
  105. function checkExact()
  106.    if s.getSpawnExact() then
  107.       currExact = "Yes"
  108.    else
  109.       currExact = "No"
  110.    end
  111. end
  112.  
  113. function switchExact()
  114.    s.setSpawnExact(not s.getSpawnExact())
  115.    fillTable()
  116. end
  117.  
  118. function nextPage()
  119.    if page+1 <= pages then
  120.       page = page+1
  121.    end
  122.    fillTable()
  123.    sleep(0.25)
  124. end
  125.  
  126. function prevPage()
  127.    if page-1 >= 1 then page = page-1 end
  128.    fillTable()
  129.    sleep(0.25)
  130. end  
  131.                            
  132. function getMobs()
  133.    mobArray = {}
  134.    for i = 1,27  do
  135.       if c.getStackInSlot(i) then
  136.          data = c.getStackInSlot(i)
  137.          --print(i..":"..data.captured)
  138.          mobArray[data.captured] = i
  139.       end
  140.    end
  141. end
  142.  
  143. function findEmptySlot()
  144.    for i = 1,27 do
  145.       if not c.getStackInSlot(i) then
  146.          return(i)
  147.       end
  148.    end
  149. end
  150.  
  151. function removeMob()
  152.    local slot = findEmptySlot()
  153.    c.pullItem("down", 1, 1, slot)
  154. end
  155.  
  156. function insertMob(info)
  157.    removeMob()
  158.    c.pushItem("down", info, 1, 1)
  159.    fillTable()
  160. end
  161.  
  162. function checkMobs()
  163.    getMobs()
  164.    --fillTable()
  165. end
  166.  
  167. function initRS()
  168.    rsOut[colors.white] = false
  169.    rsOut[colors.orange] = true
  170.    rsOut[colors.magenta] = false
  171.    rsOut[colors.lightBlue] = true
  172.    rsOut[colors.yellow] = false
  173.    rsOut[colors.lime] = true
  174.    buttonColors["Lights"] = colors.white
  175.    buttonColors["Spawner"] = colors.orange
  176.    buttonColors["Grinders"] = colors.magenta
  177.    buttonColors["DrawBridge"] = colors.lightBlue
  178.    buttonColors["Attractor"] = colors.yellow
  179.    buttonColors["Door"] = colors.lime
  180. end
  181.  
  182. function setRS()
  183.    local colorOutput = 0
  184.    for i,j in pairs(rsOut) do
  185.       if j then colorOutput = colorOutput + i end
  186.     end
  187.     rs.setBundledOutput("left", colorOutput)
  188. end
  189.  
  190. function lights()
  191.    button.toggleButton("Lights")
  192.    rsOut[colors.white] = not rsOut[colors.white]
  193.    setRS()
  194. end
  195.  
  196. function door()
  197.    button.toggleButton("Door")
  198.    rsOut[colors.lime] = not rsOut[colors.lime]
  199.    setRS()
  200. end
  201.  
  202. function spawner()
  203.    button.toggleButton("Spawner")
  204.    rsOut[colors.orange] = not rsOut[colors.orange]
  205.    setRS()
  206. end
  207.  
  208. function grinders()
  209.    button.toggleButton("Grinders")
  210.    rsOut[colors.magenta] = not rsOut[colors.magenta]
  211.    setRS()
  212. end
  213.  
  214. function drawBridge()
  215.    button.toggleButton("DrawBridge")
  216.    rsOut[colors.lightBlue] = not rsOut[colors.lightBlue]
  217.    setRS()
  218. end
  219.  
  220. function attractorToggle()
  221.    button.toggleButton("Attractor")
  222.    rsOut[colors.yellow] = not rsOut[colors.yellow]
  223.    setRS()
  224. end
  225.  
  226. function mobSelect()
  227.    fillTable()
  228. --   refresh()
  229. --   getClick()
  230. end
  231.  
  232. function getClick()
  233.    local event,side,x,y = os.pullEvent()
  234.    if event=="monitor_touch" then
  235.      button.checkxy(x,y)
  236.    end
  237. end
  238.  
  239. function refresh()
  240.    m.clear()
  241.    print("Refreshed")
  242.    button.screen()
  243. end
  244.  
  245. initRS()
  246. setRS()
  247. fillMainTable()
  248. --refresh()
  249. while true do getClick() end
Add Comment
Please, Sign In to add comment