From b24d1b3097e31195c21e0811f184b1d41c5c5483 Mon Sep 17 00:00:00 2001 From: LoneWolfHT Date: Tue, 21 Jul 2020 12:18:47 -0700 Subject: [PATCH] Fix swapping class items into other invs (#670) * Fix bug with team/loot chest swapping * Fix furnace swapping --- mods/ctf/ctf_classes/items.lua | 20 ++++++++++++++++++-- mods/ctf/ctf_map/ctf_map_core/chest.lua | 2 +- mods/other/tsm_chests/init.lua | 2 +- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/mods/ctf/ctf_classes/items.lua b/mods/ctf/ctf_classes/items.lua index 228b31a..520ae63 100644 --- a/mods/ctf/ctf_classes/items.lua +++ b/mods/ctf/ctf_classes/items.lua @@ -89,10 +89,11 @@ end) local function protect_metadata_inventory(nodename) - local def = assert(minetest.registered_nodes[nodename]) + local def = table.copy(assert(minetest.registered_nodes[nodename])) + local old local function wrap(defname) - local old = def[defname] + old = def[defname] def[defname] = function(pos, listname, index, stack, player, ...) if is_class_blacklisted(player, stack:get_name()) then minetest.chat_send_player(player:get_player_name(), @@ -104,6 +105,21 @@ local function protect_metadata_inventory(nodename) end end + old = def.on_metadata_inventory_take + function def.on_metadata_inventory_take(pos, listname, index, stack, player, ...) + local furnaceinv = minetest.get_inventory({type = "node", pos = pos}) + local swapped_item = furnaceinv:get_stack(listname, index) + + if is_class_blacklisted(player, swapped_item:get_name()) then + furnaceinv:remove_item(listname, swapped_item) + player:get_inventory():add_item("main", swapped_item) + end + + if type(old) == "function" then + return old(pos, listname, index, stack, player, ...) + end + end + wrap("allow_metadata_inventory_put") wrap("allow_metadata_inventory_take") diff --git a/mods/ctf/ctf_map/ctf_map_core/chest.lua b/mods/ctf/ctf_map/ctf_map_core/chest.lua index 109413f..6a58672 100644 --- a/mods/ctf/ctf_map/ctf_map_core/chest.lua +++ b/mods/ctf/ctf_map/ctf_map_core/chest.lua @@ -219,7 +219,7 @@ for _, chest_color in pairs(colors) do if not ctf_map.is_item_allowed_in_team_chest(listname, swapped_item, player) then chestinv:remove_item(listname, swapped_item) - player:get_inventory():add_item(listname, swapped_item) + player:get_inventory():add_item("main", swapped_item) end minetest.log("action", player:get_player_name() .. diff --git a/mods/other/tsm_chests/init.lua b/mods/other/tsm_chests/init.lua index c0832f7..83e3ec2 100755 --- a/mods/other/tsm_chests/init.lua +++ b/mods/other/tsm_chests/init.lua @@ -80,7 +80,7 @@ minetest.register_node("tsm_chests:chest", { if swapped_item:get_name() ~= "" then inv:remove_item(listname, swapped_item) - player:get_inventory():add_item(listname, swapped_item) + player:get_inventory():add_item("main", swapped_item) end minetest.log("action", player:get_player_name() ..