Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- em = { }
- -- better if this will be sleep while
- -- friable blocks falling
- function em:sleep() os.sleep(1) end
- -- digging forward while detecting blocks
- -- calling () makes sleep = false
- function em:tryDigForward(isSleepEnabled)
- isSleepEnabled = isSleepEnabled or false
- logger:trace("trying dig forward...")
- while turtle.dig() do
- if isSleepEnabled then em:sleep() end
- logger:debug("dig forward");
- end
- end
- -- digging up while detected blocks
- -- calling () makes sleep = false
- function em:tryDigUp(isSleepEnabled)
- isSleepEnabled = isSleepEnabled or false
- logger:debug("trying dig up...")
- while turtle.digUp() do
- if isSleepEnabled then em:sleep() end
- logger:debug("dig up");
- end
- end
- -- attacking while mob detected.
- function em:tryAttack()
- logger:trace("trying attack...")
- while turtle.attack() do
- logger:debug("attacking!")
- end
- end
- -- just dig gown if it isn't a chest
- function em:tryDigDown()
- logger:trace("trying dig down...")
- turtle.select(14)
- if not turtle.compareDown() then
- if turtle.digDown() then
- logger:debug("dig down")
- end
- end
- end
- -- placing torch in the left wall.
- -- returns false if torches is out.
- -- required slot 15.
- function em:tryPlaceTorch()
- logger:debug("trying place torch")
- if turtle.getItemCount(15) < 4 then
- logger:info("torches is out!")
- return false
- end
- turtle.turnRight()
- turtle.select(15)
- em:tryAttack()
- turtle.dig()
- if turtle.place() then
- logger:info("torch placed")
- end
- turtle.turnLeft()
- return true
- end
- -- trying refuel if fuel level < 200.
- -- returns false if fuel is out.
- -- required slot 16.
- function em:tryRefuel()
- while turtle.getFuelLevel() < 200 do
- if turtle.getItemCount(16) < 4 then
- logger:info("reserve fuel is out!")
- return false
- end
- turtle.select(16)
- turtle.refuel(2)
- end
- return true
- end
- -- checking free space, placing chest
- -- and transfering all items. returns
- -- false if chests is out. required slot 14.
- function em:tryGetFreeSpace()
- if turtle.getItemCount(12) > 0 then
- logger:info("need free space")
- if turtle.getItemCount(14) < 1 then
- logger:info("chests is out")
- return false
- end
- turtle.select(14)
- turtle.digDown()
- turtle.placeDown()
- for i = 1, 13 do
- turtle.select(i)
- turtle.dropDown(64)
- end
- logger:info("items transfered to chest")
- turtle.select(1)
- end
- return true
- end
- function em:stop()
- logger:error("Check chests, torches and fuel!")
- end
- -- turtle doing "count" step forward, dig
- -- all blocks by the way, attacks detected
- -- mobs, placing torch, refueling and
- -- dig friable blocks by top if "isDigFriable"
- function em:step(count, isDigFriable)
- count = count + 1
- count = count - 1
- logger:info("step("..count..") working...")
- local iter = 0
- for i = 1, count do
- logger:trace("step: "..i)
- if not em:tryRefuel() then break end
- em:tryDigUp(isDigFriable)
- em:tryDigDown()
- if not em:tryGetFreeSpace() then em:stop() break end
- while turtle.forward() == false do
- em:tryDigForward()
- em:tryAttack()
- end
- logger:debug("moved by 1 block")
- iter = i
- if i % 10 == 6 then
- if not em:tryPlaceTorch() then em:stop() break end
- end
- end
- logger:info("step("..iter..") of "..count.." done")
- if iter == count then return true
- else return false end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement