random-stuff/computercraft/vazkii_spiter.lua

84 lines
2.8 KiB
Lua

local input = peripheral.wrap "ironchests:copper_chest_0"
local drum_ri = peripheral.wrap "redstone_integrator_0"
local amaranthus_ri = peripheral.wrap "redstone_integrator_1"
local output_hydroangeas_chest = peripheral.wrap "minecraft:chest_2"
local disposal = peripheral.wrap "botania:open_crate_0"
local own_name = "turtle_0"
local aux_chest = peripheral.wrap "minecraft:chest_1"
local reqs = {
"blue",
"cyan"
}
local function manage_input_chest()
local count = {}
local slots = {}
for slot, meta in pairs(input.list()) do
if count[meta.name] then
input.pushItems(peripheral.getName(disposal), slot)
else
count[meta.name] = meta.count
slots[meta.name] = slot
end
end
local ok = true
for _, req in ipairs(reqs) do
local name = ("botania:%s_mystical_flower"):format(req)
if count[name] == nil or count[name] < 16 then
ok = false
end
end
return ok, slots
end
local function main()
while true do
local can_produce_hydroangeas, slot_map = manage_input_chest()
local dest = output_hydroangeas_chest.list()[1]
local seed_src = aux_chest.list()[2]
amaranthus_ri.setOutput("east", can_produce_hydroangeas)
if can_produce_hydroangeas and not dest or (dest and dest.count < 16) and seed_src then
amaranthus_ri.setOutput("east", true)
print "manufacturing cycle."
aux_chest.pushItems(own_name, 1, 1)
turtle.placeUp()
turtle.dropDown()
turtle.suckDown()
aux_chest.pullItems(own_name, 1)
for _, req in ipairs(reqs) do
input.pushItems(own_name, slot_map[("botania:%s_mystical_flower"):format(req)], 1)
turtle.craft()
turtle.dropDown(2)
end
aux_chest.pushItems(own_name, 2, 1)
turtle.dropDown()
turtle.suckDown()
output_hydroangeas_chest.pullItems(own_name, 1)
sleep(3)
local can_produce_hydroangeas, slot_map = manage_input_chest()
if slot_map["botania:hydroangeas"] then
print "moving from external"
output_hydroangeas_chest.pullItems(peripheral.getName(input), slot_map["botania:hydroangeas"])
end
sleep(30)
else
print "enough hydroangeas or insufficient seeds or flowers"
sleep(30)
end
end
end
local function run_drum()
while true do
if not amaranthus_ri.getOutput "east" then
print "pulsing drum"
drum_ri.setOutput("down", true)
sleep(0.1)
drum_ri.setOutput("down", false)
end
sleep(10)
end
end
parallel.waitForAll(run_drum, main)