luanti_scripts/fabric_tree_farming.lua

145 lines
4.5 KiB
Lua

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