Robust Turtle API
This is an unofficial API. This means that you have to install it manually.
This API extends on the original turtle API and makes it more robust. It also strives to make coding a turtle easier.
When traveling, for example, it will not get stopped by mobs, players, sand, or any other block.
Installation
Install globally on all Turtles:
- Create and install a new resource pack on the client (if playing singleplayer) or the server (if playing multiplayer).
- Download the API and save it in the 'assets/computercraft/lua/rom/apis/turtle' directory inside the resource pack.
- The name of the file will determine the name of the API (If you save it as 't' you'd call the 'forward()' function like so: t.forward()).
- The API will automatically be loaded for every Turtle.
Install only on one specific Turtle:
- Open the computer you want to download the API into and type: 'pastebin get 0TnEBf2P t' (without the quotes) to download and save the API as 't'.
- Before using the API you'll have to load it: os.loadAPI("t").
Usage
A lot of the functions do the same as the default turtle API, except with additional checks. There are also some functions that combine default functions for ease of use. E.g. turnAround() turns right twice.
Most of the function names are the same, but instead of writing "turtle." in front, you now write "t.".
Digging
These will dig as long as there is a block in the way. So if sand falls down, it will dig as long as necessary.
- t.dig()
- t.digUp()
- t.digDown()
Traveling
These will not be stopped by blocks or mobs.
[amount] is optional, you can leave it out. It is the amount of blocks to travel. If left out these will travel 1 block.
- t.forward([amount])
- t.up([amount])
- t.down([amount])
- t.back([amount])
Placing blocks
Here, 'block' is a number between 1 and 16. It combines selecting and placing.
I highly recommend adding e.g. "stoneBrick = 1" at the beginning of the code. This way you can later easily see which block must go in which slot. Example: "t.place(stoneBrick)".
If there is another block in the way, it will break it, unless it is the same type of block.
- t.place(block)
- t.placeUp(block)
- t.placeDown(block)
- t.placeRight(block)
- t.placeLeft(block)
- t.placeBack(block)
The following function places a row of blocks:
- t.placeRow(placeDir, block, travelDir, length)
- travelDir is the most logical one. It is the direction the turtle travels to. Possible directions: "forward","up","down","right","left","back".
- placeDir is a bit more difficult to understand. placeDir is the direction to place the block in. The turtle travels in one direction, but it cannot place a block in that direction (it can, but it will get dug up again). This means that the place direction must be another direction as the travel direction. The possible directions are the same as travelDir.
- length is the amount of blocks to travel.
- Example: t.placeRow(up, marble, forward, 15)
If any of these run out of their resource, the API will write a message and waits for any text input to continue.
This way you can refill and write something (anything) to continue the program.
Turning
This function simply turns right twice. If you really want, you can change it to turn left twice ;).
- t.turnAround()
These are simply a shorter way to write turtle.turnLeft() and turtle.turnRight().
- t.right()
- t.left()
These simply turn left or right, and move forward an amount.
[amount] is optional, and is the amount of blocks to travel forward. If left out these will travel 1 block.
- t.goRight([amount])
- t.goLeft([amount])
These are the same as the previous functions, except at the end they turn back again.
- t.strafeRight([amount])
- t.strafeLeft([amount])
Code
Download: Robust Turtle API
Save it as 't', without ".txt".
--Robust Turtle API by SpeedR
--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