diff --git a/tubelib_addons3/chest.lua b/tubelib_addons3/chest.lua index 8d075fc..ed6910c 100644 --- a/tubelib_addons3/chest.lua +++ b/tubelib_addons3/chest.lua @@ -151,7 +151,14 @@ tubelib.register_node("tubelib_addons3:chest", {}, { end, on_push_item = function(pos, side, item) local meta = minetest.get_meta(pos) - return tubelib.put_item(meta, "main", item) + local res = tubelib.put_item(meta, "main", item) + if res == false then + local inv = meta:get_inventory() + local leftover = inv:add_item("main", item) + item:set_count(leftover:get_count()) + return false + end + return true end, on_unpull_item = function(pos, side, item) local meta = minetest.get_meta(pos) diff --git a/tubelib_addons3/pusher.lua b/tubelib_addons3/pusher.lua index bb6e9b1..cc4979a 100644 --- a/tubelib_addons3/pusher.lua +++ b/tubelib_addons3/pusher.lua @@ -42,11 +42,15 @@ local function pushing(pos, meta) local player_name = meta:get_string("player_name") local items = tubelib.pull_stack(pos, "L", player_name) if items ~= nil then + local count = items:get_count() if tubelib.push_items(pos, "R", items, player_name) == false then -- place item back tubelib.unpull_items(pos, "L", items, player_name) - State:blocked(pos, meta) - return + -- Complete stack rejected + if count == items:get_count() then + State:blocked(pos, meta) + return + end end if State.get_state(pos, meta) ~= tubelib.STOPPED then State:keep_running(pos, meta, COUNTDOWN_TICKS, 1)