From a66c35a9ea1058aa4d82b2b46f3b60b7ecb2b920 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikita=20Wi=C5=9Bniewski?= Date: Mon, 24 Jun 2024 10:32:20 +0700 Subject: [PATCH] Fix double chests once more (hoppers this time) --- mods/ITEMS/mcl_chests/api.lua | 58 +++++++++++++++++++++---------- mods/ITEMS/mcl_chests/example.lua | 5 ++- 2 files changed, 43 insertions(+), 20 deletions(-) diff --git a/mods/ITEMS/mcl_chests/api.lua b/mods/ITEMS/mcl_chests/api.lua index 0018c2f74..0de631afe 100644 --- a/mods/ITEMS/mcl_chests/api.lua +++ b/mods/ITEMS/mcl_chests/api.lua @@ -393,36 +393,56 @@ end -- `side` is either "left" or "right". local function hopper_pull_double(side) return function(pos, hop_pos, hop_inv, hop_list) local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local pos_other = get_double_container_neighbor_pos(pos, node.param2, side) local meta_other = minetest.get_meta(pos_other) local inv_other = meta_other:get_inventory() - local stack_id = mcl_util.select_stack(inv_other, "main", hop_inv, hop_list) - if stack_id ~= nil then - return inv_other, "main", stack_id + local ret_inv1, ret_inv2 + if side == "left" then + ret_inv1 = inv + ret_inv2 = inv_other + else + ret_inv1 = inv_other + ret_inv2 = inv end - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - stack_id = mcl_util.select_stack(inv, "main", hop_inv, hop_list) - return inv, "main", stack_id + local stack_id = mcl_util.select_stack(ret_inv1, "main", hop_inv, hop_list) + if stack_id ~= nil then + return ret_inv1, "main", stack_id + end + + stack_id = mcl_util.select_stack(ret_inv2, "main", hop_inv, hop_list) + return ret_inv2, "main", stack_id end end local function hopper_push_double(side) return function(pos, hop_pos, hop_inv, hop_list) + local node = minetest.get_node(pos) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() - local stack_id = mcl_util.select_stack(hop_inv, hop_list, inv, "main", nil, 1) - if stack_id ~= nil then - return inv, "main", stack_id - end - - local node = minetest.get_node(pos) local pos_other = get_double_container_neighbor_pos(pos, node.param2, side) local meta_other = minetest.get_meta(pos_other) local inv_other = meta_other:get_inventory() - stack_id = mcl_util.select_stack(hop_inv, hop_list, inv_other, "main", nil, 1) - return inv_other, "main", stack_id + + local ret_inv1, ret_inv2 + if side == "left" then + ret_inv1 = inv + ret_inv2 = inv_other + else + ret_inv1 = inv_other + ret_inv2 = inv + end + + local stack_id = mcl_util.select_stack(hop_inv, hop_list, ret_inv1, "main", nil, 1) + if stack_id ~= nil then + return ret_inv1, "main", stack_id + end + + stack_id = mcl_util.select_stack(hop_inv, hop_list, ret_inv2, "main", nil, 1) + return ret_inv2, "main", stack_id end end local function construct_double_chest(side, names) return function(pos) @@ -436,7 +456,7 @@ local function construct_double_chest(side, names) return function(pos) end end end -local function destruct_double_chest(side, names, canonical_basename, small_textures) return function(pos) +local function destruct_double_chest(side, names, canonical_basename, small_textures, sound_prefix) return function(pos) local n = minetest.get_node(pos) if n.name == names.small.a then return @@ -452,7 +472,7 @@ local function destruct_double_chest(side, names, canonical_basename, small_text close_forms(canonical_basename, p) minetest.swap_node(p, { name = names.small.a, param2 = param2 }) - create_entity(p, names.small.a, small_textures, param2, false, "default_chest", "mcl_chests_chest", "chest") + create_entity(p, names.small.a, small_textures, param2, false, sound_prefix, "mcl_chests_chest", "chest") end end -- Small chests use `protection_check_take` for both put and take actions. @@ -774,7 +794,7 @@ function mcl_chests.register_chest(basename, d) after_place_node = function(pos, placer, itemstack, pointed_thing) minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) end, - on_destruct = destruct_double_chest("left", names, d.canonical_basename, small_textures), + on_destruct = destruct_double_chest("left", names, d.canonical_basename, small_textures, d.sounds[2]), after_dig_node = drop_items_chest, on_blast = on_chest_blast, allow_metadata_inventory_move = protection_check_move, @@ -869,7 +889,7 @@ function mcl_chests.register_chest(basename, d) after_place_node = function(pos, placer, itemstack, pointed_thing) minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) end, - on_destruct = destruct_double_chest("right", names, d.canonical_basename, small_textures), + on_destruct = destruct_double_chest("right", names, d.canonical_basename, small_textures, d.sounds[2]), after_dig_node = drop_items_chest, on_blast = on_chest_blast, allow_metadata_inventory_move = protection_check_move, diff --git a/mods/ITEMS/mcl_chests/example.lua b/mods/ITEMS/mcl_chests/example.lua index eb9e15849..2fc1e377e 100644 --- a/mods/ITEMS/mcl_chests/example.lua +++ b/mods/ITEMS/mcl_chests/example.lua @@ -29,7 +29,10 @@ mcl_chests.register_chest("stone_chest", { stone = 1, material_stone = 1, }, - sounds = { mcl_sounds.node_sound_stone_defaults() }, + sounds = { + mcl_sounds.node_sound_stone_defaults(), + "mcl_chests_enderchest" + }, hardness = 4.0, hidden = false, -- It bites!