mdc_tjc icon

mc_quarry

mdc_tjc | PRO | 04/12/15 02:36:26 AM UTC | 0 ⭐ | 532 👁️ | Never ⏰ | []
Lua |

5.46 KB

|

None

|

0 👍

/

0 👎

-- The identifier of this program is vHc0EfGD
-- This program implements the flying quarry mining turtles
 
-- This is the variable declaration section of the program
 
quarryLength = 11 quarryWidth = quarryLength quarryDepth = 3
xStart = -696 zStart = -3484 yStart = 50 orientationStart = 4
chestX = -701 chestZ = -3484 chestY = 89 chestOrientation = 3
progressX =0 progressZ = 0 progressY = 0 progressOrientation = 0
xCoord = chestX  -- East and west coordinates
zCoord = chestZ  -- North and south coordinates
yCoord = chestY  -- Vertical coordinates
orientation = chestOrientation
directions = {"north", "east", "south", "west"} -- Directions indexed as 1 to 4
xDiff = {0, 1, 0, -1}
zDiff = {-1, 0, 1, 0}
 
-- This is the function declaration section of the program
 
local function tryDig() -- This function digs forward one block
    while turtle.detect() do
        if turtle.dig() then
            sleep(0.5)
        else
            return false
        end
    end
    return true
end
 
local function tryDigUp() -- This function digs up one block
    while turtle.detectUp() do
        if turtle.digUp() then
            sleep(0.5)
        else
            return false
        end
    end
    return true
end
 
local function tryDigDown() -- This function digs down one block
    while turtle.detectDown() do
        if turtle.digDown() then
            sleep(0.5)
        else
            return false
        end
    end
    return true
end
 
function tLeft() -- This function turns the turtle left and updates orientation
   orientation = orientation - 1
   orientation = (orientation - 1) % 4
   orientation = orientation + 1
   turtle.turnLeft()
end
 
function tRight()  -- This function turns the turtle right and updates orientation
   orientation = orientation - 1
   orientation = (orientation + 1) % 4
   orientation = orientation + 1
   turtle.turnRight()
end
   
function mForward()  -- This function moves the turtle forward and updates coordinates
   local moved = false
   while not(moved) do
      moved = turtle.forward()
      end
   xCoord = xCoord + xDiff[orientation]
   zCoord = zCoord + zDiff[orientation]
end
 
function mBack()  -- This function moves the turtle backward and updates coordinates
   local moved = false
   while not(moved) do
      moved = turtle.back()
      end
   xCoord = xCoord - xDiff[orientation]
   zCoord = zCoord - zDiff[orientation]
end
 
function mUp()  -- This function moves the turtle upward and updates coordinates
   local moved = false
   while not(moved) do
      moved = turtle.up()
      end
   yCoord = yCoord + 1
end
   
function mDown()  -- This function moves the turtle downward and updates coordinates
   local moved = false
   while not(moved) do
      moved = turtle.down()
      end
   yCoord = yCoord - 1
end
   
function look(direction)  -- This function turns the turtle to the desired direction
   while direction ~= directions[orientation] do
      tRight()
      end
end
 
function moveTo(xTarget, zTarget, yTarget)
   while yTarget < yCoord do
      mDown()
   end
   while yTarget > yCoord do
      mUp()
   end
 
   if xTarget < xCoord then
      look("west")
      while xTarget < xCoord do
         mForward()
      end
   end
   if xTarget > xCoord then
      look("east")
      while xTarget > xCoord do
         mForward()
      end
   end
      
   if zTarget < zCoord then
      look("north")
      while zTarget < zCoord do
         mForward()
      end
   end
   if zTarget > zCoord then
      look("south")
      while zTarget > zCoord do
         mForward()
      end
   end
end
 
function dumpBlocks(continue)
   progressX =xCoord progressZ = zCoord progressY = yCoord progressOrientation = orientation
   moveTo(chestX, chestZ, chestY) look(directions[chestOrientation])
   for i = 1, 16 do
      turtle.select( i )
      turtle.drop(64)
   end
   turtle.select( 1 )
   if continue == "y" then moveTo(progressX, progressZ, (progressY + 1)) look(directions[progressOrientation])
   mDown()
   else return "true" end
end
   
function cutSquare(size, depth)
   for a = 1, depth do -- Cut the number of squares specified by the depth variable
      for b = 1, size do -- Cut the number of rows specified by the size variable
         for c = 1, size do -- Cut a column of the square
            -- Check if this is the first block of a new square else cut column
            if (b == 1 and c == 1) then tryDigDown() mDown() elseif c > 1 then tryDig() mForward() end
            -- Check if slot #16 has items put into it then dump blocks in chest
            if (c == 5 and turtle.getItemCount(16) > 0) then dumpBlocks("y") end
         end
        if (b < size) then --Position to cut the next column of the square
            if (b % 2 == 1) then --Position to cut the next column of the square
               tRight()
               tryDig()
               mForward()
               tRight()
            else
               tLeft()
               tryDig()
               mForward()
               tLeft()
            end
        end
      end
      yStart = yStart - 1
      moveTo(xStart, zStart, yStart) look(directions[orientationStart])
--    if (a < depth) then
--       tryDigDown()
--       mDown()
--      end
   end
end
 
-- This is the main loop section of the program
 
moveTo(xStart, zStart, yStart) look(directions[orientationStart])
cutSquare(quarryLength, quarryDepth)
dumpBlocks("n")
moveTo(chestX, chestZ, chestY) look(directions[chestOrientation])
yStart = yStart - quarryDepth
print("Fuel level is "..turtle.getFuelLevel())

Comments