Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --2GvRRG3c
- -- Utilities
- function sleep(s)
- local ntime = os.time() + s
- repeat until os.time() > ntime
- end
- function countItem(id, damage)
- damage = damage or 0
- local count = 0
- for i = 1, 16 do
- local data = turtle.getItemDetail(i)
- if data then
- if data.name == id and data.damage == damage then
- count = count + data.count
- end
- end
- end
- return count
- end
- function findItem(id, damage)
- damage = damage or 0
- for i = 1, 16 do
- local data = turtle.getItemDetail(i)
- if data then
- if data.name == id and data.damage == damage then
- return i
- end
- end
- end
- return -1
- end
- local fuelSource = "minecraft:coal"
- local donePercent = 0
- local c = 0
- -- Turtle Wrapper
- local Turtle = {}
- function Turtle.refuel()
- local a = turtle.getFuelLevel()
- turtle.select(findItem(fuelSource))
- turtle.refuel(1)
- local b = turtle.getFuelLevel()
- local increase = b - a
- for i = 1, math.floor((100-increase)/increase) do
- if countItem(fuelSource) > 0 then
- turtle.refuel(1)
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;4; ;", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- end
- end
- end
- function Turtle.up()
- if turtle.getFuelLevel() >= 1 then
- local success = turtle.up()
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;1; ;", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- return success
- else
- local fuelCount = countItem(fuelSource)
- if fuelCount >= 1 then
- Turtle.refuel()
- return Turtle.up()
- else
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;3;Fuel Needed;", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- exit()
- return false
- end
- end
- end
- function Turtle.down()
- if turtle.getFuelLevel() >= 1 then
- local success = turtle.down()
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;1; ;", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- return success
- else
- local fuelCount = countItem(fuelSource)
- if fuelCount > 0 then
- Turtle.refuel()
- return Turtle.down()
- else
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;3;Fuel Needed;", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- exit()
- return false
- end
- end
- end
- function Turtle.forward()
- if turtle.getFuelLevel() >= 1 then
- local success = turtle.forward()
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;1; ;", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- return success
- else
- local fuelCount = countItem(fuelSource)
- if fuelCount > 0 then
- Turtle.refuel()
- return Turtle.forward()
- else
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;3;Fuel Needed;", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- exit()
- return false
- end
- end
- end
- function Turtle.back()
- if turtle.getFuelLevel() >= 1 then
- local success = turtle.back()
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;1; ;", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- return success
- else
- local fuelCount = countItem(fuelSource)
- if fuelCount > 0 then
- Turtle.refuel()
- return Turtle.back()
- else
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;3;Fuel Needed;", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- exit()
- return false
- end
- end
- end
- function Turtle.right()
- if turtle.getFuelLevel() >= 1 then
- local success = turtle.turnRight()
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;1; ;", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- if success and Turtle.forward() then
- turtle.turnLeft()
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;1; ;", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- return true
- elseif not success then
- return false
- else
- turtle.turnLeft()
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;1; ;", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- return false
- end
- else
- local fuelCount = countItem(fuelSource)
- if fuelCount > 0 then
- Turtle.refuel()
- return Turtle.right()
- else
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;3;Fuel Needed;", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- exit()
- return false
- end
- end
- end
- function Turtle.left()
- if turtle.getFuelLevel() >= 1 then
- local success = turtle.turnLeft()
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;1; ;", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- if success and Turtle.forward() then
- turtle.turnRight()
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;1; ;", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- return true
- elseif not success then
- return false
- else
- turtle.turnRight()
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;1; ;", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- return false
- end
- else
- local fuelCount = countItem(fuelSource)
- if fuelCount > 0 then
- Turtle.refuel()
- return Turtle.left()
- else
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;3;Fuel Needed;", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- exit()
- return false
- end
- end
- end
- function Turtle.placeUp(id, countUp, damage)
- if countItem(id, damage) > 0 then
- local slot = findItem(id, damage)
- turtle.select(slot)
- local success = turtle.placeUp()
- if success and countUp then
- c = c + 1
- end
- return success
- else
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;3;Not enough "..id.." ("..damage..");", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- exit()
- return false
- end
- end
- function Turtle.placeDown(id, countUp, damage)
- if countItem(id, damage) > 0 then
- local slot = findItem(id, damage)
- turtle.select(slot)
- local success = turtle.placeDown()
- if success and countUp then
- c = c + 1
- end
- return success
- else
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;3;Not enough "..id.." ("..damage..");", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- exit()
- return false
- end
- end
- function Turtle.repeatMethod(method, n)
- if turtle.getFuelLevel() >= 1 then
- for i = 1, n do
- local success = Turtle[method]()
- if not success then
- break
- end
- end
- else
- local fuelCount = countItem(fuelSource)
- if fuelCount > 0 then
- Turtle.refuel()
- return Turtle.repeatMethod(method, n)
- else
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;3;Fuel Needed;", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- exit()
- return false
- end
- end
- end
- -- Main thread
- function plantCropsticks(n)
- if countItem("AgriCraft:cropsItem") < (80 * (n or 1)) then
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;3;Not enough crop sticks (%d Missing);", turtle.getFuelLevel(), turtle.getFuelLimit(), (80 * (n or 1)) - countItem("AgriCraft:cropsItem"))..tostring(donePercent))
- return
- end
- local function proceed()
- turtle.digDown()
- Turtle.placeDown("AgriCraft:cropsItem", true)
- end
- c = 0
- for i = 1, (n or 1) do
- if i == 1 then
- turtle.turnRight()
- end
- Turtle.repeatMethod("forward", 4)
- turtle.turnLeft()
- Turtle.down()
- Turtle.forward()
- proceed()
- for i = 1, 5 do
- for i = 1, 8 do
- Turtle.forward()
- proceed()
- donePercent = c / (81 * (n or 1))
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;1; ;", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- end
- turtle.turnLeft()
- Turtle.forward()
- turtle.turnLeft()
- if i ~= 5 then
- proceed()
- for i = 1, 8 do
- Turtle.forward()
- proceed()
- donePercent = c / (81 * (n or 1))
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;1; ;", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- end
- turtle.turnRight()
- Turtle.forward()
- turtle.turnRight()
- proceed()
- end
- end
- Turtle.repeatMethod("forward", 9)
- turtle.turnLeft()
- Turtle.up()
- Turtle.repeatMethod("forward", 5)
- if i == (n or 1) then
- turtle.turnLeft()
- Turtle.repeatMethod("down", 2)
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;2; ;", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- else
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;5; ;", turtle.getFuelLevel(), turtle.getFuelLimit())..tostring(donePercent))
- Turtle.repeatMethod("forward", 12)
- end
- end
- end
- local modem = peripheral.wrap("right")
- if not modem.isOpen(5) then
- modem.open(5)
- end
- local msg
- repeat
- msg = select(5, os.pullEvent("modem_message"))
- until msg == "start"
- plantCropsticks(8)
RAW Paste Data