Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ACCEPTABLE_FUEL = {"minecraft:coal"}
- FUEL_COUNT = 0
- SERVER_ID = 0
- SKIP = {"computercraft:turtle_normal", "minecraft:chest"}
- TURTLE_INDEX = 2
- CHESTS_INDEX = 10
- MINER_COUNT = 5
- function arrHasValue(arr, val)
- for index, value in ipairs(arr) do
- if value == val then
- return true
- end
- end
- return false
- end
- function hasFuel()
- return FUEL_COUNT > 0
- end
- function shouldRefuel()
- return turtle.getFuelLevel() <= 0
- end
- function refuel()
- if shouldRefuel() == true then
- if hasFuel() ~= true then
- return false
- end
- turtle.select(1)
- turtle.refuel(1)
- FUEL_COUNT = FUEL_COUNT - 1
- end
- return true
- end
- function turnAround()
- turtle.turnLeft()
- turtle.turnLeft()
- end
- function getSlotCount(slot)
- turtle.select(slot)
- local slotData = turtle.getItemDetail()
- if slotData ~= nil then
- return slotData["count"]
- end
- return -1
- end
- function getFirstSlotWith(name)
- for i=2, 16 do
- turtle.select(i)
- local slotData = turtle.getItemDetail()
- if slotData ~= nil then
- if slotData["name"] == name then
- return i
- end
- end
- end
- return nil
- end
- function main()
- -- Prepare
- rednet.open("left")
- if rednet.isOpen("left") ~= true then
- print("Failed to start modem!")
- return
- end
- print("Connecting...")
- rednet.broadcast("deployer", "minenetfromdeployer")
- local id, turtleCount = rednet.receive("minenettodeployer")
- SERVER_ID = id
- print("Connected!")
- turtle.select(1)
- local slotData = turtle.getItemDetail()
- if slotData ~= nil then
- if arrHasValue(ACCEPTABLE_FUEL, slotData["name"]) == true then
- FUEL_COUNT = slotData["count"]
- end
- end
- if refuel() ~= true then
- print("No fuel!")
- return
- end
- -- Collect turtles and chests
- turtle.turnRight()
- for i=0, 8 do
- turtle.suck()
- end
- turtle.turnLeft()
- if refuel() ~= true then
- print("No fuel!")
- return
- end
- -- Leave 2 block gap
- turtle.forward()
- turtle.forward()
- turtle.forward()
- if refuel() ~= true then
- print("No fuel!")
- return
- end
- -- Place miners
- local minedSlot = nil
- for i=0, (turtleCount - 1) do
- turtle.turnRight()
- turtle.dig()
- turtle.select(TURTLE_INDEX)
- turtle.place()
- TURTLE_INDEX = TURTLE_INDEX + 1
- turtle.digDown()
- turtle.down()
- local inspect, data = turtle.inspect()
- if inspect == true then
- if data["name"] ~= "minecraft:chest" then
- turtle.dig()
- turtle.select(CHESTS_INDEX)
- turtle.place()
- end
- else
- turtle.select(CHESTS_INDEX)
- turtle.place()
- end
- turtle.up()
- turtle.turnLeft()
- turtle.forward()
- if minedSlot == nil then
- minedSlot = getFirstSlotWith("minecraft:cobblestone")
- else
- for i=2, 16 do repeat
- if i == minedSlot then
- do break end
- end
- turtle.select(i)
- local slotData = turtle.getItemDetail()
- if slotData ~= nil then
- if slotData["name"] == "minecraft:cobblestone" then
- turtle.transferTo(minedSlot)
- end
- end
- until true end
- end
- end
- if refuel() ~= true then
- print("No fuel!")
- return
- end
- -- Turn Around
- turtle.select(2)
- turnAround()
- if refuel() ~= true then
- print("No fuel!")
- return
- end
- -- Collect coal
- for i=0, (turtleCount - 1) do
- turtle.forward()
- end
- turtle.forward()
- turtle.forward()
- turtle.forward()
- for i=0, (turtleCount - 1) do
- turtle.suck()
- end
- turnAround()
- if refuel() ~= true then
- print("No fuel!")
- return
- end
- -- Place coal in miners
- turtle.forward()
- turtle.forward()
- turtle.forward()
- TURTLE_INDEX = 2
- for i=0, (turtleCount - 1) do
- turtle.turnRight()
- turtle.select(TURTLE_INDEX)
- turtle.drop(getSlotCount(TURTLE_INDEX))
- TURTLE_INDEX = TURTLE_INDEX + 1
- local miner = peripheral.wrap("front")
- miner.turnOn()
- turtle.turnLeft()
- turtle.forward()
- end
- if refuel() ~= true then
- print("No fuel!")
- return
- end
- -- Send message to server
- rednet.send(SERVER_ID, "deployed", "minenetfromdeployer")
- local id, message = rednet.receive("minenettodeployer", 10000)
- -- Remove coal from miners
- turnAround()
- turtle.forward()
- for i=0, (turtleCount - 1) do
- turtle.turnLeft()
- turtle.suck()
- turtle.turnRight()
- turtle.forward()
- end
- turtle.forward()
- turtle.forward()
- for i=2, 16 do
- turtle.select(i)
- local slotData = turtle.getItemDetail()
- if slotData ~= nil then
- if arrHasValue(ACCEPTABLE_FUEL, slotData["name"]) == true then
- turtle.drop()
- end
- end
- end
- turnAround()
- if refuel() ~= true then
- print("No fuel!")
- return
- end
- -- Break miners
- turtle.forward()
- turtle.forward()
- turtle.forward()
- TURTLE_INDEX = 2
- for i=0, (turtleCount - 1) do
- turtle.turnRight()
- turtle.dig()
- turtle.turnLeft()
- turtle.forward()
- end
- if refuel() ~= true then
- print("No fuel!")
- return
- end
- -- Return
- turnAround()
- turtle.forward()
- for i=0, (turtleCount - 1) do
- turtle.forward()
- end
- turtle.forward()
- turtle.forward()
- if refuel() ~= true then
- print("No fuel!")
- return
- end
- -- Drop off miners
- turtle.turnRight()
- for i=2, 16 do
- turtle.select(i)
- local slotData = turtle.getItemDetail()
- if slotData ~= nil then
- if arrHasValue(SKIP, slotData["name"]) == false then
- if arrHasValue(ACCEPTABLE_FUEL, slotData["name"]) == false then
- turtle.drop()
- end
- end
- end
- end
- turnAround()
- for i=2, 16 do
- turtle.select(i)
- local slotData = turtle.getItemDetail()
- if slotData ~= nil then
- if slotData["name"] == "computercraft:turtle_normal" then
- turtle.drop()
- end
- end
- end
- turtle.select(CHESTS_INDEX)
- turtle.drop()
- turtle.turnLeft()
- rednet.close("left")
- end
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement