mirror of
https://github.com/osmarks/random-stuff
synced 2024-12-28 02:50:33 +00:00
84 lines
2.8 KiB
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)
|