Add flush command
This commit is contained in:
parent
957466f2e1
commit
38946d6d84
@ -68,6 +68,21 @@ local function count_index(invlist)
|
|||||||
return index
|
return index
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function flush_input_inventory(pos)
|
||||||
|
local inv = M(pos):get_inventory()
|
||||||
|
if not inv:is_empty("src") then
|
||||||
|
for idx = 1, 16 do
|
||||||
|
local stack = inv:get_stack("src", idx)
|
||||||
|
if not inv:room_for_item("dst", stack) then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
inv:add_item("dst", stack)
|
||||||
|
inv:set_stack("src", idx, nil)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
-- caches some recipe data
|
-- caches some recipe data
|
||||||
local autocrafterCache = {}
|
local autocrafterCache = {}
|
||||||
|
|
||||||
@ -224,13 +239,18 @@ local function on_output_change(pos, inventory, stack)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function determine_recipe_items(pos, input)
|
local function determine_recipe_items(pos, input)
|
||||||
if input and type(input) == "string" then
|
local num, idx
|
||||||
-- Test if "<node-number>.<recipe-number>" input
|
|
||||||
local num, idx = unpack(string.split(input, ".", false, 1))
|
|
||||||
if num and idx then
|
|
||||||
input = get_input_from_recipeblock(pos, num, idx)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
if input and type(input) == "string" then -- Lua controller
|
||||||
|
-- Test if "<node-number>.<recipe-number>" input
|
||||||
|
num, idx = unpack(string.split(input, ".", false, 1))
|
||||||
|
elseif input and type(input) == "table" then -- Beduino
|
||||||
|
num = tostring(input[1] * 65536 + input[2])
|
||||||
|
idx = tostring(input[3])
|
||||||
|
end
|
||||||
|
|
||||||
|
if num and idx then
|
||||||
|
input = get_input_from_recipeblock(pos, num, idx)
|
||||||
if input then
|
if input then
|
||||||
-- "<item>,<item>,..." input
|
-- "<item>,<item>,..." input
|
||||||
local items = string.split(input, ",", true, 8)
|
local items = string.split(input, ",", true, 8)
|
||||||
@ -443,13 +463,14 @@ local tubing = {
|
|||||||
on_recv_message = function(pos, src, topic, payload)
|
on_recv_message = function(pos, src, topic, payload)
|
||||||
if topic == "recipe" and CRD(pos).stage == 4 then
|
if topic == "recipe" and CRD(pos).stage == 4 then
|
||||||
if payload and payload ~= "" then
|
if payload and payload ~= "" then
|
||||||
local inv = M(pos):get_inventory()
|
|
||||||
on_new_recipe(pos, payload)
|
on_new_recipe(pos, payload)
|
||||||
return true
|
return true
|
||||||
else
|
else
|
||||||
local inv = M(pos):get_inventory()
|
local inv = M(pos):get_inventory()
|
||||||
return inv:get_stack("output", 1):get_name()
|
return inv:get_stack("output", 1):get_name()
|
||||||
end
|
end
|
||||||
|
elseif topic == "flush" and CRD(pos).stage == 4 then
|
||||||
|
return flush_input_inventory(pos)
|
||||||
elseif topic == "info" and CRD(pos).stage == 4 then
|
elseif topic == "info" and CRD(pos).stage == 4 then
|
||||||
return INFO
|
return INFO
|
||||||
else
|
else
|
||||||
@ -457,6 +478,16 @@ local tubing = {
|
|||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
on_beduino_receive_cmnd = function(pos, src, topic, payload)
|
||||||
|
if topic == 10 and CRD(pos).stage == 4 then
|
||||||
|
on_new_recipe(pos, payload)
|
||||||
|
return 1, ""
|
||||||
|
elseif topic == 11 and CRD(pos).stage == 4 then
|
||||||
|
if flush_input_inventory(pos) then
|
||||||
|
return 1, ""
|
||||||
|
else
|
||||||
|
return 0, ""
|
||||||
|
end
|
||||||
|
end
|
||||||
return CRD(pos).State:on_beduino_receive_cmnd(pos, topic, payload)
|
return CRD(pos).State:on_beduino_receive_cmnd(pos, topic, payload)
|
||||||
end,
|
end,
|
||||||
on_beduino_request_data = function(pos, src, topic, payload)
|
on_beduino_request_data = function(pos, src, topic, payload)
|
||||||
|
Loading…
Reference in New Issue
Block a user