Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --xKLNbmuK
- -- 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.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 makeFarmPlot(n)
- if countItem("AgriCraft:waterChannel") < (80 * (n or 1)) then
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;3;Not enough water channels (%d Missing);", turtle.getFuelLevel(), turtle.getFuelLimit(), (80 * (n or 1)) - countItem("AgriCraft:waterChannel"))..tostring(donePercent))
- return
- end
- if countItem("AgriCraft:waterTank") < (n or 1) then
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;3;Not enough water tanks (%d Missing);", turtle.getFuelLevel(), turtle.getFuelLimit(), (n or 1) - countItem("AgriCraft:waterTank"))..tostring(donePercent))
- return
- end
- if countItem("AgriCraft:sprinkler") < (80 * (n or 1)) then
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;3;Not enough sprinklers (%d Missing);", turtle.getFuelLevel(), turtle.getFuelLimit(), (80 * (n or 1)) - countItem("AgriCraft:sprinkler"))..tostring(donePercent))
- return
- end
- c = 0
- Turtle.up()
- Turtle.up()
- for i = 1, (n or 1) do
- if i == 1 then
- turtle.turnRight()
- end
- Turtle.repeatMethod("forward", 4)
- turtle.turnLeft()
- Turtle.forward()
- Turtle.placeUp("AgriCraft:waterChannel", true)
- for i = 1, 5 do
- for i = 1, 8 do
- Turtle.forward()
- if (c % 161) == 40 then
- Turtle.placeUp("AgriCraft:waterTank", true)
- else
- Turtle.placeUp("AgriCraft:waterChannel", true)
- end
- donePercent = c / (161 * (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
- Turtle.placeUp("AgriCraft:waterChannel", true)
- for i = 1, 8 do
- Turtle.forward()
- if (c % 161) == 40 then
- Turtle.placeUp("AgriCraft:waterTank", true)
- else
- Turtle.placeUp("AgriCraft:waterChannel", true)
- end
- donePercent = c / (161 * (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()
- Turtle.placeUp("AgriCraft:waterChannel", true)
- end
- end
- Turtle.repeatMethod("forward", 9)
- turtle.turnLeft()
- Turtle.repeatMethod("forward", 9)
- turtle.turnLeft()
- Turtle.down()
- Turtle.forward()
- Turtle.placeUp("AgriCraft:sprinkler", true)
- for i = 1, 5 do
- for i = 1, 8 do
- Turtle.forward()
- Turtle.placeUp("AgriCraft:sprinkler", true)
- donePercent = c / (161 * (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
- Turtle.placeUp("AgriCraft:sprinkler", true)
- for i = 1, 8 do
- Turtle.forward()
- Turtle.placeUp("AgriCraft:sprinkler", true)
- donePercent = c / (161 * (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()
- Turtle.placeUp("AgriCraft:sprinkler", true)
- 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
- function addSprinklers(n)
- if countItem("AgriCraft:sprinkler") < (80 * (n or 1)) then
- peripheral.call("right", "transmit", 3, 1, string.format("%d;%d;3;Not enough sprinklers (%d Missing);", turtle.getFuelLevel(), turtle.getFuelLimit(), (80 * (n or 1)) - countItem("AgriCraft:sprinkler"))..tostring(donePercent))
- return
- end
- c = 0
- for i = 1, n do
- if i == 1 then
- turtle.turnRight()
- end
- Turtle.repeatMethod("forward", 4)
- turtle.turnLeft()
- Turtle.down()
- Turtle.forward()
- Turtle.placeUp("AgriCraft:sprinkler", true)
- for i = 1, 5 do
- for i = 1, 8 do
- Turtle.forward()
- Turtle.placeUp("AgriCraft:sprinkler", true)
- donePercent = c / (80 * (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
- Turtle.placeUp("AgriCraft:sprinkler", true)
- for i = 1, 8 do
- Turtle.forward()
- Turtle.placeUp("AgriCraft:sprinkler", true)
- donePercent = c / (80 * (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()
- Turtle.placeUp("AgriCraft:sprinkler", true)
- 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
- addSprinklers(8)
Add Comment
Please, Sign In to add comment