Fix pusher and chest bugs
This commit is contained in:
parent
e2f72ca57e
commit
0305ab20f4
@ -98,10 +98,24 @@ local function allow_metadata_inventory_take(pos, listname, index, stack, player
|
|||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function set_limit(pos, nvm, val)
|
||||||
|
val = tonumber(val) or 0
|
||||||
|
if val > 0 then
|
||||||
|
nvm.limit = val
|
||||||
|
nvm.num_items = 0
|
||||||
|
M(pos):set_int("limit", val)
|
||||||
|
else
|
||||||
|
nvm.limit = nil
|
||||||
|
nvm.num_items = nil
|
||||||
|
M(pos):set_string("limit", "")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- Function returns the number of pushed items
|
-- Function returns the number of pushed items
|
||||||
local function push(pos, crd, meta, nvm, pull_dir, push_dir, num)
|
local function push(pos, crd, meta, nvm, pull_dir, push_dir, num)
|
||||||
local items = techage.pull_items(pos, pull_dir, num, nvm.item_name)
|
local items = techage.pull_items(pos, pull_dir, num, nvm.item_name)
|
||||||
if items ~= nil then
|
if items ~= nil then
|
||||||
|
local taken = items:get_count()
|
||||||
local leftover = techage.push_items(pos, push_dir, items)
|
local leftover = techage.push_items(pos, push_dir, items)
|
||||||
if not leftover then
|
if not leftover then
|
||||||
-- place item back
|
-- place item back
|
||||||
@ -112,9 +126,9 @@ local function push(pos, crd, meta, nvm, pull_dir, push_dir, num)
|
|||||||
-- place item back
|
-- place item back
|
||||||
techage.unpull_items(pos, pull_dir, leftover)
|
techage.unpull_items(pos, pull_dir, leftover)
|
||||||
crd.State:blocked(pos, nvm)
|
crd.State:blocked(pos, nvm)
|
||||||
return items:get_count() - leftover:get_count()
|
return taken - leftover:get_count()
|
||||||
end
|
end
|
||||||
return items:get_count()
|
return taken
|
||||||
end
|
end
|
||||||
crd.State:idle(pos, nvm)
|
crd.State:idle(pos, nvm)
|
||||||
return 0
|
return 0
|
||||||
@ -218,17 +232,15 @@ local function can_start(pos, nvm, state)
|
|||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function ta_after_formspec(pos, fields, playername)
|
||||||
|
local nvm = techage.get_nvm(pos)
|
||||||
|
set_limit(pos, nvm, fields.limit)
|
||||||
|
end
|
||||||
|
|
||||||
local function on_state_change(pos, old_state, new_state)
|
local function on_state_change(pos, old_state, new_state)
|
||||||
if old_state == techage.STOPPED and new_state == techage.RUNNING then
|
if old_state == techage.STOPPED and new_state == techage.RUNNING then
|
||||||
local nvm = techage.get_nvm(pos)
|
local nvm = techage.get_nvm(pos)
|
||||||
local val = M(pos):get_int("limit")
|
set_limit(pos, nvm, M(pos):get_int("limit"))
|
||||||
if val and val > 0 then
|
|
||||||
nvm.limit = val
|
|
||||||
nvm.num_items = 0
|
|
||||||
else
|
|
||||||
nvm.limit = nil
|
|
||||||
nvm.num_items = nil
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -314,16 +326,7 @@ local tubing = {
|
|||||||
elseif topic == "limit" then -- Set push limit
|
elseif topic == "limit" then -- Set push limit
|
||||||
local nvm = techage.get_nvm(pos)
|
local nvm = techage.get_nvm(pos)
|
||||||
CRD(pos).State:stop(pos, nvm)
|
CRD(pos).State:stop(pos, nvm)
|
||||||
local val = tonumber(payload) or 0
|
set_limit(pos, nvm, payload)
|
||||||
if val and val > 0 then
|
|
||||||
nvm.limit = val
|
|
||||||
nvm.num_items = 0
|
|
||||||
M(pos):set_int("limit", val)
|
|
||||||
else
|
|
||||||
nvm.limit = nil
|
|
||||||
nvm.num_items = nil
|
|
||||||
M(pos):set_string("limit", "")
|
|
||||||
end
|
|
||||||
return true
|
return true
|
||||||
elseif topic == "count" then -- Get number of push items
|
elseif topic == "count" then -- Get number of push items
|
||||||
local nvm = techage.get_nvm(pos)
|
local nvm = techage.get_nvm(pos)
|
||||||
@ -341,15 +344,7 @@ local tubing = {
|
|||||||
elseif topic == 68 then -- Set push limit
|
elseif topic == 68 then -- Set push limit
|
||||||
local nvm = techage.get_nvm(pos)
|
local nvm = techage.get_nvm(pos)
|
||||||
CRD(pos).State:stop(pos, nvm)
|
CRD(pos).State:stop(pos, nvm)
|
||||||
if payload[1] > 0 then
|
set_limit(pos, nvm, payload[1])
|
||||||
nvm.limit = payload[1]
|
|
||||||
nvm.num_items = 0
|
|
||||||
M(pos):set_int("limit", payload[1])
|
|
||||||
else
|
|
||||||
nvm.limit = nil
|
|
||||||
nvm.num_items = nil
|
|
||||||
M(pos):set_string("limit", "")
|
|
||||||
end
|
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
local nvm = techage.get_nvm(pos)
|
local nvm = techage.get_nvm(pos)
|
||||||
@ -405,6 +400,7 @@ local node_name_ta2, node_name_ta3, node_name_ta4 =
|
|||||||
on_rotate = screwdriver.disallow,
|
on_rotate = screwdriver.disallow,
|
||||||
tubelib2_on_update2 = tubelib2_on_update2,
|
tubelib2_on_update2 = tubelib2_on_update2,
|
||||||
ta4_formspec = WRENCH_MENU,
|
ta4_formspec = WRENCH_MENU,
|
||||||
|
ta_after_formspec = ta_after_formspec,
|
||||||
|
|
||||||
groups = {choppy=2, cracky=2, crumbly=2},
|
groups = {choppy=2, cracky=2, crumbly=2},
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
|
@ -76,17 +76,22 @@ function inv_lib.allow_conf_inv_move(pos, from_list, from_index, to_list, to_ind
|
|||||||
end
|
end
|
||||||
|
|
||||||
function inv_lib.put_items(pos, inv, listname, item, stacks, idx)
|
function inv_lib.put_items(pos, inv, listname, item, stacks, idx)
|
||||||
|
local name = item:get_name()
|
||||||
|
local count = item:get_count()
|
||||||
for _, i in ipairs(stacks or {}) do
|
for _, i in ipairs(stacks or {}) do
|
||||||
if not idx or idx == i then
|
if not idx or idx == i then
|
||||||
local stack = inv:get_stack(listname, i)
|
local stack = inv:get_stack(listname, i)
|
||||||
local leftover = stack:add_item(item)
|
local leftover = stack:add_item({name = name, count = count})
|
||||||
|
count = leftover:get_count()
|
||||||
inv:set_stack(listname, i, stack)
|
inv:set_stack(listname, i, stack)
|
||||||
if leftover:get_count() == 0 then
|
if count == 0 then
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
return leftover
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
if count > 0 then
|
||||||
|
return ItemStack({name = name, count = count})
|
||||||
|
end
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user