Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --Robust Turtle API+ by SpeedR Modified by MrHG
- --Digging with gravel/sand detection
- function dig()
- local tries = 0
- while turtle.detect() do
- turtle.dig()
- sleep(0.4)
- tries = tries + 1
- if tries>500 then
- print("Error: dug for too long.")
- return false
- end
- end
- return true
- end
- function digUp()
- local tries = 0
- while turtle.detectUp() do
- turtle.digUp()
- sleep(0.4)
- tries = tries + 1
- if tries>500 then
- print("Error: dug up for too long.")
- return false
- end
- end
- return true
- end
- function digDown()
- local tries = 0
- while turtle.detectDown() do
- turtle.digDown()
- sleep(0.4)
- tries = tries + 1
- if tries>500 then
- print("Error: dug down for too long.")
- return false
- end
- end
- return true
- end
- --Traveling: Goes in the direction no matter what (almost)
- --Will not be stopped by blocks or mobs
- function forward(l)
- l=l or 1
- for i=1,l do
- local tries = 0
- while turtle.forward() ~= true do
- turtle.dig()
- turtle.attack()
- sleep(0.2)
- tries = tries + 1
- if tries>500 then
- print("Error: can't move forward.")
- return false
- end
- end
- end
- return true
- end
- function up(l)
- l=l or 1
- for i=1,l do
- local tries = 0
- while turtle.up() ~= true do
- turtle.digUp()
- turtle.attackUp()
- sleep(0.2)
- tries = tries + 1
- if tries>500 then
- print("Error: can't move up.")
- return false
- end
- end
- end
- return true
- end
- function down(l)
- l=l or 1
- for i=1,l do
- local tries = 0
- while turtle.down() ~= true do
- turtle.digDown()
- turtle.attackDown()
- sleep(0.2)
- tries = tries + 1
- if tries>500 then
- print("Error: can't move down.")
- return false
- end
- end
- end
- return true
- end
- function back(l)
- l=l or 1
- for i=1,l do
- if turtle.back() ~= true then
- turnAround()
- forward()
- turnAround()
- end
- end
- end
- --Place blocks
- --Does not place when there's already the right block.
- function place(block)
- turtle.select(block)
- if turtle.compare()==false then
- if turtle.getItemCount(block)==0 then
- outOfResource(block)
- end
- dig()
- turtle.place()
- end
- end
- function placeUp(block)
- turtle.select(block)
- if turtle.compareUp()==false then
- if turtle.getItemCount(block)==0 then
- outOfResource(block)
- end
- digUp()
- turtle.placeUp()
- end
- end
- function placeDown(block)
- turtle.select(block)
- if turtle.compareDown()==false then
- if turtle.getItemCount(block)==0 then
- outOfResource(block)
- end
- digDown()
- turtle.placeDown()
- end
- end
- local function outOfResource()
- print("Ran out of a resource. Block: ",block , ".")
- print("Refill, then say something to proceed.")
- read()
- end
- function placeRight(block)
- turtle.turnRight()
- place(block)
- turtle.turnLeft()
- end
- function placeLeft(block)
- turtle.turnLeft()
- place(block)
- turtle.turnRight()
- end
- function placeBack(block)
- turnAround()
- place(block)
- turnAround()
- end
- --place row e.g. placeRow(up, marble, forward, 15)
- function placeRow(placeDir, block, travelDir, l)
- l=l or 1
- for i=1,l do
- if placeDir == "forward" then
- place(block)
- elseif placeDir == "up" then
- placeUp(block)
- elseif placeDir == "down" then
- placeDown(block)
- elseif placeDir == "right" then
- placeRight(block)
- elseif placeDir == "left" then
- placeLeft(block)
- elseif placeDir == "back" then
- placeBack(block)
- else
- print('"', placeDir, '" is not a valid direction!')
- return false
- end
- if travelDir == "forward" then
- forward()
- elseif travelDir == "up" then
- up()
- elseif travelDir == "down" then
- down()
- elseif travelDir == "right" then
- strafeRight()
- elseif travelDir == "left" then
- strafeLeft()
- elseif travelDir == "back" then
- back()
- else
- print('"', travelDir, '" is not a valid direction!')
- return false
- end
- end
- return true
- end
- --Turning
- function turnAround()
- turtle.turnRight()
- turtle.turnRight()
- end
- function right()
- turtle.turnRight()
- end
- function left()
- turtle.turnLeft()
- end
- function goRight(l)
- l=l or 1
- turtle.turnRight()
- forward(l)
- end
- function goLeft(l)
- l=l or 1
- turtle.turnLeft()
- forward(l)
- end
- function strafeRight(l)
- l=l or 1
- goRight(l)
- turtle.turnLeft()
- end
- function strafeLeft(l)
- l=l or 1
- goLeft(l)
- turtle.turnRight()
- end
- function restock(slotToRefill,startInventory,nameRequired)
- itemDetail = turtle.getItemDetail(slotToRefill)
- if nameRequired and not itemDetail then
- return false
- end
- for i=startInventory,16 do
- correctItem = true
- if i == slotToRefill then
- -- not wasn't working?
- else
- turtle.select(i)
- if (turtle.getItemCount() == 0) then
- -- again not isn't working :(
- else
- if nameRequired then
- if turtle.getItemDetail().name == itemDetail.name then
- -- :(
- else
- correctItem = false
- end
- end
- if correctItem then
- -- Found item to refill slot.
- turtle.transferTo(slotToRefill)
- turtle.select(slotToRefill)
- return true
- end
- end
- end
- end
- -- No suitable items found.
- turtle.select(slotToRefill)
- return false
- end
- function refuel(amountOfRequiredFuel,startInventory)
- turtle.select(1)
- if (turtle.getFuelLevel() == "unlimited") then
- -- Unlimited fuel, no need to refuel.
- return true
- end
- if (turtle.getFuelLevel() < amountOfRequiredFuel) then
- if turtle.getItemSpace() > 0 then
- t.restock(1,2,true)
- end
- while (true) do
- if turtle.refuel(1) then
- if (turtle.getFuelLevel() > amountOfRequiredFuel) then
- break
- else
- -- Could not refuel.
- return false
- end
- end
- end
- -- Refueled
- turtle.select(startInventory)
- return true
- end
- end
- function veinMine(oreBlock)
- -- Turn around and repeat this function for every block.
- for i=1,4 do
- local success, data = turtle.inspect()
- if success then
- if data.name == oreBlock then
- dig()
- forward(1)
- veinMine(oreBlock)
- back(1)
- end
- end
- turtle.turnRight()
- end
- local success, data = turtle.inspectUp()
- if success then
- if data.name == oreBlock then
- digUp()
- up(1)
- veinMine(oreBlock)
- down(1)
- end
- end
- local success, data = turtle.inspectDown()
- if success then
- if data.name == oreBlock then
- digDown()
- down(1)
- veinMine(oreBlock)
- up(1)
- end
- end
- end
Add Comment
Please, Sign In to add comment