Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Num's item retrieval turtle
- -- Inventory slot usage:
- -- 1: Outgoing ender chest
- -- 2: Returns ender chest
- -- 3: Emptied barrels
- -- 5-8: Grabbed stacks
- -- 9-12: To be delivered
- -- 13: To be returned
- ----------------------
- function forward()
- while (not turtle.forward()) do sleep(3) end
- end
- function back()
- while (not turtle.back()) do sleep(3) end
- end
- function left()
- turtle.turnLeft()
- end
- function right()
- turtle.turnRight()
- end
- function select(a)
- turtle.select(a)
- end
- function reset()
- turtle.select(1)
- for i = 1, 16 do turtle.back() end
- right()
- for i = 1, 16 do turtle.back() end
- left()
- if(turtle.detectUp()) then doError("Failed to reset!") end
- end
- function refuel()
- rednet.send(13, "2 Refueling...", true)
- goto(fuelBarrel)
- grabStack()
- if(turtle.getItemCount(5) < 64) then
- turtle.refuel(turtle.getItemCount())
- removeBarrel()
- doError("No more fuel!")
- end
- turtle.refuel(64)
- end
- function removeBarrel()
- rednet.send(13, "3 Removed a barrel!", true)
- turtle.select(3)
- turtle.digUp()
- turtle.suckUp()
- end
- function goto(target)
- startX = x
- startY = y
- targetX = target%16
- targetY = math.floor(target/16)
- while(x ~= targetX) do
- if(x < targetX) then
- forward()
- x = x + 1
- else
- back()
- x = x - 1
- end
- end
- if(y ~= targetY) then
- turtle.turnRight()
- while(y ~= targetY) do
- if(y < targetY) then
- forward()
- y = y + 1
- else
- back()
- y = y - 1
- end
- end
- turtle.turnLeft()
- end
- end
- function grabStack()
- select(5)
- turtle.suckUp()
- end
- function prepDelivery(amount)
- if(amount <= 0) then return end
- if(amount > 256) then amount = 256 end
- stacks = 1
- if(amount > 64) then stacks = stacks + 1 end
- if(amount > 128) then stacks = stacks + 1 end
- if(amount > 192) then stacks = stacks + 1 end
- fullStacks = stacks - 1
- lastStackSize = 64
- if(amount % 64 == 0) then fullStacks = stacks
- else lastStackSize = amount - (fullStacks * 64) end
- for i = 1, stacks do grabStack() end
- if(turtle.getItemCount(4 + stacks) < 64) then removeBarrel() end
- for i = 1, fullStacks do
- select(4 + i)
- turtle.transferTo(8 + i)
- end
- select(4 + stacks)
- turtle.transferTo(12, lastStackSize)
- turtle.transferTo(13)
- end
- function deliver(amount)
- prepDelivery(amount)
- select(1)
- while (not turtle.placeDown()) do sleep(3) end
- for i = 9, 12 do
- select(i)
- turtle.dropDown()
- end
- rednet.send(13, "1 Done!", true)
- select(1)
- turtle.digDown()
- end
- function dropExtra()
- select(2)
- while (not turtle.placeDown()) do sleep(3) end
- select(13)
- turtle.dropDown()
- select(2)
- turtle.digDown()
- end
- function check()
- if(turtle.getFuelLevel() < 100) then refuel() end
- end
- function doError(msg)
- turtle.select(1)
- rednet.send(13, "3 "..msg, true)
- error(msg)
- end
- ------------------------
- sleep(1)
- rednet.open("right")
- rednet.send(13, "2 Resetting...", true)
- reset()
- x = 0
- y = 0
- barrelNum = 0
- fuelBarrel = 15
- rednet.send(13, "1 Ready!", true)
- while true do
- turtle.select(1)
- id, msg = rednet.receive()
- words = {}
- wordCount = 0
- for word in string.gmatch(msg, "%S+") do
- words[wordCount] = word
- wordCount = wordCount + 1
- end
- barrelNum = 0
- -- row 1
- if(words[1] == "iron") then barrelNum = 1
- elseif(words[1] == "copper") then barrelNum = 2
- elseif(words[1] == "tin") then barrelNum = 3
- elseif(words[1] == "gold") then barrelNum = 4
- elseif(words[1] == "silver") then barrelNum = 5
- elseif(words[1] == "lead") then barrelNum = 6
- elseif(words[1] == "refinediron") then barrelNum = 7
- elseif(words[1] == "uranium") then barrelNum = 8
- elseif(words[1] == "dullshard") then barrelNum = 9
- elseif(words[1] == "fireshard") then barrelNum = 10
- elseif(words[1] == "airshard") then barrelNum = 11
- elseif(words[1] == "earthshard") then barrelNum = 12
- elseif(words[1] == "watershard") then barrelNum = 13
- elseif(words[1] == "visshard") then barrelNum = 14
- elseif(words[1] == "coalcoke") then barrelNum = 15
- -- row 2
- elseif(words[1] == "redstone") then barrelNum = 16
- elseif(words[1] == "lapis") then barrelNum = 17
- elseif(words[1] == "forcicium") then barrelNum = 18
- elseif(words[1] == "flint") then barrelNum = 19
- elseif(words[1] == "quartz") then barrelNum = 20
- elseif(words[1] == "quartzdust") then barrelNum = 21
- elseif(words[1] == "apatite") then barrelNum = 22
- elseif(words[1] == "amber") then barrelNum = 23
- elseif(words[1] == "quicksilver") then barrelNum = 24
- elseif(words[1] == "forcegem") then barrelNum = 25
- elseif(words[1] == "aluminum") then barrelNum = 26
- elseif(words[1] == "ferrousore") then barrelNum = 27
- --
- elseif(words[1] == "coal") then barrelNum = 31
- -- row 3
- elseif(words[1] == "dirt") then barrelNum = 32
- elseif(words[1] == "gravel") then barrelNum = 33
- elseif(words[1] == "obsidian") then barrelNum = 34
- elseif(words[1] == "netherrack") then barrelNum = 35
- elseif(words[1] == "quarriedblock") then barrelNum = 36
- elseif(words[1] == "ironscaffold") then barrelNum = 37
- elseif(words[1] == "redcobble") then barrelNum = 38
- -- row 4
- elseif(words[1] == "oakplank") then barrelNum = 48
- elseif(words[1] == "stick") then barrelNum = 49
- elseif(words[1] == "fence") then barrelNum = 50
- elseif(words[1] == "track") then barrelNum = 51
- elseif(words[1] == "sign") then barrelNum = 52
- elseif(words[1] == "bamboo") then barrelNum = 53
- -- row 5
- elseif(words[1] == "seeds") then barrelNum = 64
- elseif(words[1] == "bone") then barrelNum = 65
- elseif(words[1] == "string") then barrelNum = 66
- elseif(words[1] == "sugar") then barrelNum = 67
- elseif(words[1] == "gunpowder") then barrelNum = 68
- elseif(words[1] == "minium") then barrelNum = 69
- elseif(words[1] == "blueslime") then barrelNum = 70
- elseif(words[1] == "flesh") then barrelNum = 71
- --
- else rednet.send(13, "3 Invalid item!", true) end
- if(barrelNum ~= 0) then
- rednet.send(13, "2 Getting "..words[0].." "..words[1].."...", true)
- goto(barrelNum)
- deliver(tonumber(words[0]))
- dropExtra()
- check()
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment