Jay Arndt
2015-03-07 c8cbd261ee75b093d5ccb0d00e90e28dabe0914e
Drop upgrade items in the after_dig_node handler instead of can_dig

This fixes an item duplication bug triggered by using a screwdriver on an upgraded machine
5 files modified
35 ■■■■ changed files
technic/machines/MV/tool_workshop.lua 2 ●●● patch | view | raw | blame | history
technic/machines/register/battery_box.lua 2 ●●● patch | view | raw | blame | history
technic/machines/register/common.lua 27 ●●●● patch | view | raw | blame | history
technic/machines/register/generator.lua 2 ●●● patch | view | raw | blame | history
technic/machines/register/machine_base.lua 2 ●●● patch | view | raw | blame | history
technic/machines/MV/tool_workshop.lua
@@ -102,7 +102,7 @@
    },
    technic_run = run,
    after_place_node = pipeworks.after_place,
    after_dig_node = pipeworks.after_dig
    after_dig_node = technic.machine_after_dig_node
})
technic.register_machine("MV", "technic:tool_workshop", technic.receiver)
technic/machines/register/battery_box.lua
@@ -196,7 +196,7 @@
            allow_metadata_inventory_move = technic.machine_inventory_move,
            technic_run = run,
            after_place_node = tube and pipeworks.after_place,
            after_dig_node = tube and pipeworks.after_dig
            after_dig_node = technic.machine_after_dig_node
        })
    end
technic/machines/register/common.lua
@@ -147,14 +147,29 @@
                S("Machine cannot be removed because it is not empty"))
        end
        return false
    else
        if not inv:is_empty("upgrade1") then
            minetest.item_drop(inv:get_stack("upgrade1", 1), "", pos)
    end
    return true
end
function technic.machine_after_dig_node(pos, oldnode, oldmetadata, player)
    if oldmetadata.inventory then
        if oldmetadata.inventory.upgrade1 and oldmetadata.inventory.upgrade1[1] then
            local stack = ItemStack(oldmetadata.inventory.upgrade1[1])
            if not stack:is_empty() then
                minetest.item_drop(stack, "", pos)
            end
        end
        if not inv:is_empty("upgrade2") then
            minetest.item_drop(inv:get_stack("upgrade2", 1), "", pos)
        if oldmetadata.inventory.upgrade2 and oldmetadata.inventory.upgrade2[1] then
            local stack = ItemStack(oldmetadata.inventory.upgrade2[1])
            if not stack:is_empty() then
                minetest.item_drop(stack, "", pos)
            end
        end
        return true
    end
    if minetest.registered_nodes[oldnode.name].tube then
        pipeworks.after_dig(pos, oldnode, oldmetadata, player)
    end
end
technic/machines/register/generator.lua
@@ -110,7 +110,7 @@
        allow_metadata_inventory_move = technic.machine_inventory_move,
        technic_run = run,
        after_place_node = tube and pipeworks.after_place,
        after_dig_node = tube and pipeworks.after_dig
        after_dig_node = technic.machine_after_dig_node
    })
    minetest.register_node("technic:"..ltier.."_generator_active", {
technic/machines/register/machine_base.lua
@@ -154,7 +154,7 @@
        allow_metadata_inventory_move = technic.machine_inventory_move,
        technic_run = run,
        after_place_node = tube and pipeworks.after_place,
        after_dig_node = tube and pipeworks.after_dig
        after_dig_node = technic.machine_after_dig_node
    })
    minetest.register_node("technic:"..ltier.."_"..machine_name.."_active",{