From 53820e20918682160417c99991208aea28986817 Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Sat, 15 Oct 2022 13:24:19 +0200 Subject: [PATCH] Revert "Allow controller to store item even when current drawers are full (#69)" (#73) This reverts commit 3e6ba27d49dec0bf76b7d59e8e82f756e97a1e28. Fixes #72 caused by #69. --- lua/controller.lua | 64 +++++++++++++--------------------------------- 1 file changed, 18 insertions(+), 46 deletions(-) diff --git a/lua/controller.lua b/lua/controller.lua index 894ef0d..24d0e81 100644 --- a/lua/controller.lua +++ b/lua/controller.lua @@ -255,14 +255,29 @@ local function controller_get_drawer_index(pos, itemstring) return drawer_net_index end -local function controller_try_new_drawer(pos,stack) +local function controller_insert_to_drawers(pos, stack) -- Inizialize metadata local meta = core.get_meta(pos) local inv = meta:get_inventory() local drawer_net_index = controller_get_drawer_index(pos, stack:get_name()) - if drawer_net_index["empty"] then + -- We check if there is a drawer with the item and it isn't full. We will + -- put the items we can into it. + if drawer_net_index[stack:get_name()] then + local drawer_pos = drawer_net_index[stack:get_name()]["drawer_pos"] + local visualid = drawer_net_index[stack:get_name()]["visualid"] + local content = drawers.drawer_get_content(drawer_pos, visualid) + + -- If the the item in the drawer is the same as the one we are trying to + -- store, the drawer is not full, and the drawer entity is loaded, we + -- will put the items in the drawer + if content.name == stack:get_name() and + content.count < content.maxCount and + drawers.drawer_visuals[core.hash_node_position(drawer_pos)] then + return drawers.drawer_insert_object(drawer_pos, stack, visualid) + end + elseif drawer_net_index["empty"] then local drawer_pos = drawer_net_index["empty"]["drawer_pos"] local visualid = drawer_net_index["empty"]["visualid"] local content = drawers.drawer_get_content(drawer_pos, visualid) @@ -283,44 +298,6 @@ local function controller_try_new_drawer(pos,stack) end end - -- If we do not have an empty drawer or the empty drawer is not actually empty, fail out - -- We cannot store this right now - return stack -end - -local function controller_insert_to_drawers(pos, stack) - -- Inizialize metadata - local meta = core.get_meta(pos) - local inv = meta:get_inventory() - - local drawer_net_index = controller_get_drawer_index(pos, stack:get_name()) - - -- We check if there is a drawer with the item and it isn't full. We will - -- put the items we can into it. - if drawer_net_index[stack:get_name()] then - local drawer_pos = drawer_net_index[stack:get_name()]["drawer_pos"] - local visualid = drawer_net_index[stack:get_name()]["visualid"] - local content = drawers.drawer_get_content(drawer_pos, visualid) - - -- If the the item in the drawer is the same as the one we are trying to - -- store, the drawer is not full, and the drawer entity is loaded, we - -- will put the items in the drawer - if content.name == stack:get_name() and - drawers.drawer_visuals[core.hash_node_position(drawer_pos)] then - if content.count < content.maxCount then - return drawers.drawer_insert_object(drawer_pos, stack, visualid) - else - -- No room in any existing drawers, try to make a new drawer for this - return controller_try_new_drawer(pos, stack) - end - end - else - -- No drawer currently contains this item, try to make a new drawer for this - return controller_try_new_drawer(pos, stack) - end - - -- If the contents do not actually match the index, fail out - -- We cannot store this right now return stack end @@ -357,12 +334,7 @@ local function controller_allow_metadata_inventory_put(pos, listname, index, sta local drawer = drawer_net_index[stack:get_name()] if drawers.drawer_get_content(drawer.drawer_pos, drawer.visualid).name == stack:get_name() then - local can_store = drawers.drawer_can_insert_stack(drawer.drawer_pos, stack, drawer["visualid"]) - -- If we have a drawer for this item, but can't put anything there, it's probably full - -- attempt to put in a new empty drawer - if can_store ~= 0 then - return can_store - end + return drawers.drawer_can_insert_stack(drawer.drawer_pos, stack, drawer["visualid"]) end end