Advertisement
MigukNamja

Minecraft Turtle Line Dig

Aug 18th, 2013
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.53 KB | None | 0 0
  1. ----------------------------------
  2. -- Warning ! WORK IN PROGRESS ! --
  3. -- Has not been fully tested !  --
  4. ----------------------------------
  5. --
  6. -- MigukNamja's 1st Line Dig Program
  7. -- Copyright 2013 MigukNamja
  8. -- miguknamja@gmail.com
  9. --
  10.  
  11. -- Move forward 'blocks' number of blocks, digging when necessary
  12. -- Hitting bedrock or something undiggable like an entity (creature) will
  13. --   prevent forward movement
  14. --
  15. -- Return actual blocks moved forward
  16. function moveForward(blocks)
  17.   if blocks < 0 then return moveBack(0-blocks) end
  18.   if blocks == 0 then return 0 end
  19.  
  20.   local moved = 0
  21.  
  22.   while moved < blocks do
  23.     if turtle.forward() then -- air, nothing to dig, but go down
  24.       moved = moved + 1
  25.     elseif turtle.dig() then -- had to dig to go forwards
  26.       if not turtle.forward() then
  27.         local attempts = 0
  28.         while turtle.dig() and attempts < 20 do
  29.           attempts = attempts + 1 -- take care water won't cause infinite digging
  30.           sleep(0.25) -- might have to chew through a stack of sand or gravel
  31.         end
  32.        
  33.         if turtle.forward() then
  34.           moved = moved + 1
  35.         end
  36.       else
  37.         moved = moved + 1
  38.       end
  39.     else -- undiggable, give up (for now)
  40.       return moved
  41.     end
  42.    
  43.     sleep(0.25) -- sleep to avoid yielding error
  44.   end
  45.  
  46.   return moved
  47. end
  48.  
  49. -- Move backwards, digging when necessary
  50. function moveBack(blocks)
  51.   if blocks < 0 then return moveForward(0-blocks) end
  52.   if blocks == 0 then return 0 end
  53.  
  54.   local moved = 0
  55.  
  56.   turtle.turnRight()
  57.   turtle.turnRight()
  58.   moved = moveForward(blocks)
  59.   turtle.turnRight()
  60.   turtle.turnRight()
  61.  
  62.   return moved
  63. end
  64.  
  65. function usage()
  66.   print( "Usage: lineDig <blocks_forward>" )
  67. end
  68.  
  69. function parseArgs(args)
  70.   local validSyntax = false
  71.   local bForward = 0
  72.  
  73.   if #args ~= 1 then
  74.     return false
  75.   elseif args[1] == "help" then
  76.     return false
  77.   elseif args[1] == nil then
  78.     return false
  79.   else
  80.     bForward = tonumber( args[1] )
  81.    
  82.     if bForward < 0 then
  83.       validSyntax = false
  84.     else
  85.       validSyntax = true
  86.     end
  87.   end
  88.  
  89.   return validSyntax, bForward
  90. end
  91.  
  92. local tArgs = { ... }
  93. validSyntax, bForward = parseArgs(tArgs)
  94. if not validSyntax then
  95.   usage()
  96.   return
  97. end
  98.  
  99. print( "Digging ", bForward, " blocks forward." )
  100.  
  101. -- Dig forward
  102. assert( moveForward( bForward ) == bForward )
  103.  
  104. -- Traverse in the reverse direction from the dig coordinates
  105. assert( moveBack( bForward ) == bForward )
  106.  
  107. print( "I have finished the assigned task, my master !" )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement