local FUEL_SLOT = 16
local SAPLING_SLOT = 15
local BONEMEAL_SLOT = 14
local TOP_LIMIT = 15
local GRID_SIZE = 6
local function turn_around()
turtle.turnLeft()
turtle.turnLeft()
end
local function forward(times)
for i = 1, times do
turtle.forward()
end
end
function find_top()
local distance_up = 0
local success_up, block_data_up = turtle.inspectUp()
turtle.turnRight()
while not success_up and distance_up < TOP_LIMIT do
turtle.dig()
turtle.up()
distance_up = distance_up + 1
success_up, block_data_up = turtle.inspectUp()
end
success_up, block_data_up = turtle.inspectUp()
while success_up and block_data_up and distance_up < TOP_LIMIT do
turtle.digUp()
turtle.dig()
turtle.up()
distance_up = distance_up + 1
success_up, block_data_up = turtle.inspectUp()
end
turtle.dig()
return distance_up
end
function return_ground_fell(ground_distance)
turn_around()
for travel = 1, ground_distance do
turtle.dig()
turtle.down()
end
turn_around()
end
function return_ground(ground_distance)
for travel = 1, ground_distance do
turtle.down()
end
end
function wrap_around()
turtle.forward()
turtle.turnLeft()
turtle.forward()
turtle.forward()
turtle.turnLeft()
end
function remove_wood(top_distance)
turtle.dig()
turtle.forward()
for y = 1, top_distance do
turtle.digUp()
turtle.dig()
turtle.turnLeft()
turtle.dig()
turtle.turnRight()
turtle.up()
end
turtle.dig()
turtle.forward()
turtle.turnLeft()
turtle.dig()
turtle.forward()
for y = 1, top_distance do
turtle.digDown()
turtle.down()
end
turn_around()
turtle.forward()
turtle.forward()
end
function fell_tree()
for i = 1, 3 do
local top_distance = find_top()
return_ground_fell(top_distance)
wrap_around()
end
local top_distance = find_top()
return_ground_fell(top_distance)
turtle.turnLeft()
remove_wood(top_distance)
end
function grid_turn(isEvenRow)
if isEvenRow then
turtle.turnRight()
else
turtle.turnLeft()
end
end
function check_grid()
local isEvenRow = false
turtle.forward()
turtle.turnLeft()
forward(2)
turtle.turnLeft()
for y = 1, GRID_SIZE do
for x = 1, GRID_SIZE do
turtle.suck()
turtle.forward()
turtle.suck()
end
if y < 6 then
grid_turn(isEvenRow)
turtle.suck()
turtle.forward()
turtle.suck()
grid_turn(isEvenRow)
end
isEvenRow = not isEvenRow
end
turtle.turnLeft()
forward(3)
turtle.turnRight()
end
function operate_check()
local insp_true, block_data = turtle.inspect()
local foward_amount = 0
if insp_true and block_data and block_data.name == "minecraft:dark_oak_sapling" then
turn_around()
foward_amount = 12
else
fell_tree()
check_grid()
foward_amount = 11
end
return foward_amount
end
function check_trees()
local foward_amount = 0
forward(6)
turtle.turnLeft()
forward(6)
-- First tree row
foward_amount = operate_check()
forward(foward_amount)
foward_amount = operate_check()
forward(foward_amount)
turtle.turnRight()
forward(6)
turtle.turnLeft()
forward(6)
-- Second tree row
foward_amount = operate_check()
forward(foward_amount)
foward_amount = operate_check()
forward(foward_amount)
-- Return home
forward(12)
end
function main()
check_trees()
end
main()