Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- This is currently slightly broken: the loop runs correctly once,
- -- but doesn't return home correctly.
- local SAPLING = "minecraft:birch_sapling"
- local LOG = "minecraft:birch_log"
- local function findItem(item_name)
- for slot = 1,16,1 do
- local details = turtle.getItemDetail(slot)
- if details ~= nil then
- if details.name == item_name then
- return slot
- end
- end
- end
- return nil
- end
- local function ensureFueled(width, height)
- local current_fuel = turtle.getFuelLevel()
- local needed_fuel =
- 3 + -- moveToStart()
- 1 + -- fellTree()
- width * 3 + -- moveToNextTree()
- 1 + height * 3 + -- moveToNextColumn() 1
- height * 3 -- moveToNextColumn() 2
- local has_enough_fuel = current_fuel >= needed_fuel
- if has_enough_fuel then
- return true
- else
- local slot = findItem(LOG)
- turtle.select(slot)
- turtle.refuel()
- return ensureFueled(width, height)
- end
- end
- local function turnRight()
- turtle.suck()
- turtle.turnRight()
- turtle.suck()
- end
- local function turnLeft()
- turtle.suck()
- turtle.turnLeft()
- turtle.suck()
- end
- local function forward()
- turtle.suck()
- turtle.forward()
- turtle.suck()
- end
- local function returnToChest(width)
- turnRight()
- forward()
- turnLeft()
- for _ = 1,3 * width,1 do
- turtle.forward()
- end
- forward()
- forward()
- turnRight()
- turnRight()
- end
- local function depositItems()
- local sapling_slot = findItem(SAPLING)
- local log_slot = findItem(LOG)
- for slot = 1,16,1 do
- -- the log slot is for fuel
- -- this works, because findItem
- -- only ever returns the first slot
- -- where an item is found
- if slot ~= sapling_slot and slot ~= log_slot then
- turtle.select(slot)
- turtle.dropDown()
- end
- end
- end
- local function placeSapling()
- local slot = findItem(SAPLING)
- if slot ~= nil then
- turtle.select(slot)
- turtle.place()
- end
- end
- -- This assumes that the tree will be felled in one swoop
- local function fellTree()
- local blocked, data = turtle.inspect()
- if blocked and data.name == LOG then
- turtle.dig()
- os.sleep(1)
- turtle.suck()
- placeSapling()
- end
- turnLeft()
- end
- local function moveToStart()
- forward()
- forward()
- turnRight()
- forward()
- turnRight()
- end
- local function moveToNextColumn(height)
- turnLeft()
- turnLeft()
- for _ = 1,height * 2,1 do
- forward()
- end
- forward()
- turnRight()
- forward()
- moveToStart()
- end
- local function moveToNextTree()
- forward()
- forward()
- forward()
- turnRight()
- end
- local function farm(width, height)
- moveToStart()
- for col = 1,width,1 do
- for row = 1,height - 1,1 do
- fellTree()
- moveToNextTree()
- end
- fellTree()
- moveToNextColumn(height)
- end
- end
- local function sleep(seconds)
- while seconds > 0 do
- term.setCursorPos(1, 2)
- term.clearLine()
- term.write("Sleeping for " .. seconds .. " s")
- os.sleep(1)
- seconds = seconds - 1
- end
- end
- local function initialMessage()
- term.clear()
- term.setCursorPos(1, 1)
- term.write("farmTrees online!")
- end
- local function main(width, height)
- initialMessage()
- while true do
- assert(ensureFueled(width, height))
- farm(width, height)
- returnToChest(width)
- depositItems()
- sleep(60)
- end
- end
- main(3, 3)
Advertisement
Advertisement
Advertisement
RAW Paste Data
Copied
Advertisement