Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- args = {...}
- totalPath = 0
- -- put excluded block in 15 and 16 slots
- -- turtle will return after fill 14 slots
- -- exclude block in last slot(16)
- function excludeItemForward()
- turtle.select(16)
- return turtle.compare()
- end
- -- exclude block in last slot(16)
- function excludeItemTop()
- turtle.select(16)
- return turtle.compareUp()
- end
- function dropExcludeItem()
- turtle.select(15)
- turtle.drop(1)
- end
- function overflowForward()
- for i=1,14 do
- turtle.select(i)
- if turtle.getItemSpace(i) ~= 0 then
- if turtle.compare() or turtle.getItemCount(i) == 0 then
- return false
- end
- end
- end
- return true
- end
- function overflowTop()
- for i=1,14 do
- turtle.select(i)
- if turtle.getItemSpace(i) ~= 0 then
- if turtle.compareUp() or turtle.getItemCount(i) == 0 then
- return false
- end
- end
- end
- return true
- end
- function digForward()
- local isDropItem = excludeItemForward()
- if overflowForward() then
- return false
- end
- turtle.select(1)
- if turtle.detect() then
- if isDropItem then
- turtle.select(15)
- end
- turtle.dig()
- end
- if isDropItem then
- dropExcludeItem()
- end
- while turtle.forward() == false do
- if turtle.detect() then
- turtle.dig()
- end
- end
- return true
- end
- function digTop()
- local isDropItem = excludeItemTop()
- if overflowTop() then
- return false
- end
- turtle.select(1)
- if turtle.detectUp() then
- if isDropItem then
- turtle.select(15)
- end
- turtle.digUp()
- end
- if isDropItem then
- dropExcludeItem()
- end
- while turtle.up() == false do
- if turtle.detectUp() then
- turtle.digUp()
- end
- end
- return true
- end
- function turnAround()
- turtle.turnRight()
- turtle.turnRight()
- end
- function returnBackStart()
- turnAround()
- for i=1,totalPath do
- while turtle.forward() == false do
- end
- end
- for i=1,14 do
- turtle.select(i)
- turtle.drop()
- end
- turnAround()
- end
- function returnBackTop(currentHeight)
- for i=1,currentHeight - 1 do
- turtle.down()
- end
- returnBackStart()
- end
- function returnBack(widthFromCenter, currentHeight, side)
- turnAround()
- for i=1,widthFromCenter do
- while turtle.forward() == false do
- end
- end
- if side == "left" then
- turtle.turnRight()
- elseif side == "right" then
- turtle.turnLeft()
- end
- for i=1,currentHeight - 1 do
- while turtle.down() == false do
- end
- end
- for i=1,totalPath do
- while turtle.forward() == false do
- end
- end
- for i=1,14 do
- turtle.select(i)
- turtle.drop()
- end
- turnAround()
- end
- if #args ~= 2 then
- print("Must be 2 arguments")
- return
- end
- local width = tonumber(args[1])
- local height = tonumber(args[2])
- local isEnd = false
- width = math.floor(width / 2)
- while not isEnd do
- if digForward() then
- totalPath = totalPath + 1
- else
- returnBackStart()
- isEnd = true
- break
- -- return back
- end
- if isEnd then
- break
- end
- for i=1,height do
- turtle.turnRight()
- for j=1,width do
- if not digForward() then
- returnBack(j - 1, i, "right")
- isEnd = true
- break
- -- return back
- end
- end
- if isEnd then
- break
- end
- turnAround()
- for j=1,width do
- while turtle.forward() == false do
- digForward()
- turtle.attack()
- break
- end
- end
- for j=1,width do
- if not digForward() then
- returnBack(j - 1, i, "left")
- isEnd = true
- break
- -- return back
- end
- end
- if isEnd then
- break
- end
- turnAround()
- for j=1,width do
- while turtle.forward() == false do
- digForward()
- turtle.attack()
- break
- end
- end
- turtle.turnLeft()
- if i ~= height then
- if not digTop() then
- returnBackTop(i)
- isEnd = true
- break
- -- return back
- end
- else
- for j=1,height - 1 do
- while turtle.down() == false do
- end
- end
- end
- end
- end
Add Comment
Please, Sign In to add comment