Advertisement
DanchiZZ

extmineapi 0.1

Dec 30th, 2012
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.43 KB | None | 0 0
  1. em = { }
  2.  
  3. -- better if this will be sleep while
  4. -- friable blocks falling
  5. function em:sleep() os.sleep(1) end
  6.  
  7. -- digging forward while detecting blocks
  8. -- calling () makes sleep = false
  9. function em:tryDigForward(isSleepEnabled)
  10.   isSleepEnabled = isSleepEnabled or false
  11.   logger:trace("trying dig forward...")
  12.   while turtle.dig() do
  13.     if isSleepEnabled then em:sleep() end
  14.     logger:debug("dig forward");
  15.   end
  16. end
  17.  
  18. -- digging up while detected blocks
  19. -- calling () makes sleep = false
  20. function em:tryDigUp(isSleepEnabled)
  21.   isSleepEnabled = isSleepEnabled or false
  22.   logger:debug("trying dig up...")
  23.   while turtle.digUp() do
  24.     if isSleepEnabled then em:sleep() end
  25.     logger:debug("dig up");
  26.   end
  27. end
  28.  
  29. -- attacking while mob detected.
  30. function em:tryAttack()
  31.   logger:trace("trying attack...")
  32.   while turtle.attack() do
  33.     logger:debug("attacking!")
  34.   end
  35. end
  36.  
  37. -- just dig gown if it isn't a chest
  38. function em:tryDigDown()
  39.   logger:trace("trying dig down...")
  40.   turtle.select(14)
  41.   if not turtle.compareDown() then
  42.     if turtle.digDown() then
  43.       logger:debug("dig down")
  44.     end
  45.   end
  46. end
  47.  
  48. -- placing torch in the left wall.
  49. -- returns false if torches is out.
  50. -- required slot 15.
  51. function em:tryPlaceTorch()
  52.   logger:debug("trying place torch")
  53.   if turtle.getItemCount(15) < 4 then
  54.     logger:info("torches is out!")
  55.     return false
  56.   end
  57.   turtle.turnRight()
  58.   turtle.select(15)
  59.   em:tryAttack()
  60.   turtle.dig()
  61.   if turtle.place() then
  62.     logger:info("torch placed")
  63.   end
  64.   turtle.turnLeft()
  65.   return true
  66. end
  67.  
  68. -- trying refuel if fuel level < 200.
  69. -- returns false if fuel is out.
  70. -- required slot 16.
  71. function em:tryRefuel()
  72.   while turtle.getFuelLevel() < 200 do
  73.     if turtle.getItemCount(16) < 4 then
  74.       logger:info("reserve fuel is out!")
  75.       return false
  76.     end
  77.     turtle.select(16)
  78.     turtle.refuel(2)
  79.   end
  80.   return true
  81. end
  82.  
  83. -- checking free space, placing chest
  84. -- and transfering all items. returns
  85. -- false if chests is out. required slot 14.
  86. function em:tryGetFreeSpace()
  87.   if turtle.getItemCount(12) > 0 then
  88.     logger:info("need free space")
  89.     if turtle.getItemCount(14) < 1 then
  90.       logger:info("chests is out")
  91.       return false
  92.     end
  93.     turtle.select(14)
  94.     turtle.digDown()
  95.     turtle.placeDown()
  96.     for i = 1, 13 do
  97.       turtle.select(i)
  98.       turtle.dropDown(64)
  99.     end
  100.     logger:info("items transfered to chest")
  101.     turtle.select(1)
  102.   end
  103.   return true
  104. end
  105.  
  106.  
  107. function em:stop()
  108.   logger:error("Check chests, torches and fuel!")
  109. end
  110.  
  111. -- turtle doing "count" step forward, dig
  112. -- all blocks by the way, attacks detected
  113. -- mobs, placing torch, refueling and
  114. -- dig friable blocks by top if "isDigFriable"
  115. function em:step(count, isDigFriable)
  116.   count = count + 1
  117.   count = count - 1
  118.   logger:info("step("..count..") working...")
  119.   local iter = 0
  120.   for i = 1, count do
  121.     logger:trace("step: "..i)
  122.     if not em:tryRefuel() then break end
  123.     em:tryDigUp(isDigFriable)
  124.     em:tryDigDown()
  125.     if not em:tryGetFreeSpace() then em:stop() break end
  126.     while turtle.forward() == false do
  127.       em:tryDigForward()
  128.       em:tryAttack()
  129.     end
  130.     logger:debug("moved by 1 block")
  131.     iter = i
  132.     if i % 10 == 6 then
  133.       if not em:tryPlaceTorch() then em:stop() break end
  134.     end
  135.   end
  136.   logger:info("step("..iter..") of "..count.." done")
  137.   if iter == count then return true
  138.   else return false end
  139. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement