if event.type == "program" then mem.events = {} mem.treecount = 0 mem.inventory = {sapling = 0, fertiliser = 0} digiline_send("treedetector",{distance=0, command="get"}) digiline_send("extender1", {a = false, b = false, c = false, d = false}) digiline_send("extender2", {a = false, b = false, c = false, d = false}) mem.state = "idle" mem.isSaplingOrdered = false mem.isFertiliserOrederd = false end if event.type == "digiline" then if event.channel == "treesort" then local count = mem.inventory[event.msg.name] if count == nil then count = 0 end mem.inventory[event.msg.name]= count + event.msg.count end if event.channel == "treedetector" then mem.currentItem = event.msg interrupt(1) end if event.channel == "chainsawindetector" then digiline_send("extender1", {a = false, b = false, c = false, d = false}) mem.state = "prepare" interrupt(30) end if event.channel == "drawercontroller" and event.msg.status then if event.msg.name == "treefarmingsapplingorder" then mem.isSaplingOrdered = false if mem.isFertiliserOrederd == false then mem.state = "prepare" interrupt(30) end end if event.msg.name == "treefarmingfertilisedorder" then mem.isFertiliserOrederd = false if mem.isSaplingOrdered == false then mem.state = "prepare" interrupt(30) end end end end if event.type == "interrupt" then if mem.state == "idle" then interrupt(10) end if mem.state == "wait" then local item = mem.currentItem if item:find("sapling", 1, true) then digiline_send("extender2", {a = false, b = false, c = false, d = false}) mem.state = "fertilising" interrupt(1) elseif item:find("trunk", 1, true) or item:find("tree", 1, true) then digiline_send("extender2", {a = false, b = false, c = false, d = false}) digiline_send("extender1", {a = false, b = false, c = false, d = false}) mem.state = "cut" interrupt(1) elseif item == "air" then digiline_send("extender1", {a = false, b = false, c = false, d = true}) mem.state = "recharge" return else digiline_send("treedetector",{distance=0, command="get"}) interrupt(5) end end if mem.state == "prepare" then local item = mem.currentItem if item ~= "air" then mem.state = "wait" interrupt(1) return end if mem.inventory["sapling"] == 0 or mem.inventory["fertiliser"] == 0 then --order from drawer default:sapling and pandorabox_custom:super_fertiliser if mem.inventory["sapling"] == 0 then local order = { name="treefarmingsapplingorder", destination="Tacit:treefarming", item="default:sapling", stacksize=1, count=1 } digiline_send("drawercontroller", order) mem.isSaplingOrdered = true mem.state = "pause" digiline_send("treemon", "no sapling\nordering...") end if mem.inventory["fertiliser"] == 0 then local order = { name="treefarmingfertilisedorder", destination="Tacit:treefarming", item="pandorabox_custom:super_fertiliser", stacksize=99, count=1 } mem.isFertiliserOrederd = true digiline_send("drawercontroller", order) digiline_send("treemon", "no\nfertiliser\nordering...") mem.state = "pause" end else mem.state = "planting" digiline_send("extender2", {c=false}) interrupt(20) end end if mem.state == "planting" then digiline_send("extender2", {c=true}) mem.inventory["sapling"] = mem.inventory["sapling"] - 1 mem.state = "wait" mem.currentItem = "" interrupt(1) end if mem.state == "fertilising" then digiline_send("extender2", {b=true}) mem.inventory["fertiliser"] = mem.inventory["fertiliser"] - 1 mem.state = "wait" mem.currentItem = "" interrupt(1) end if mem.state == "cut" then digiline_send("extender1", {c = true}) mem.state = "wait" mem.currentItem = "" mem.treecount = mem.treecount + 1 local str = "Trees done:\n" .. tostring(mem.treecount) .. "\n" .. "saplings:\n" .. tostring(mem.inventory["sapling"]) .. "\n" .. "fertiliser\n" .. tostring(mem.inventory["fertiliser"]) digiline_send("treemon", str) interrupt(1) end end if event.type == "on" and event.pin.name == "A" then mem.state = "prepare" interrupt(1) end if event.type == "off" and event.pin.name == "A" then mem.state = "idle" interrupt(1) end