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
This commit is contained in:
Jay Arndt 2015-03-07 05:41:31 -06:00 committed by ShadowNinja
parent c6464d3ebe
commit c8cbd261ee
5 changed files with 25 additions and 10 deletions

View File

@ -102,7 +102,7 @@ minetest.register_node("technic:tool_workshop", {
}, },
technic_run = run, technic_run = run,
after_place_node = pipeworks.after_place, 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.register_machine("MV", "technic:tool_workshop", technic.receiver)

View File

@ -196,7 +196,7 @@ function technic.register_battery_box(data)
allow_metadata_inventory_move = technic.machine_inventory_move, allow_metadata_inventory_move = technic.machine_inventory_move,
technic_run = run, technic_run = run,
after_place_node = tube and pipeworks.after_place, 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 end

View File

@ -147,14 +147,29 @@ function technic.machine_can_dig(pos, player)
S("Machine cannot be removed because it is not empty")) S("Machine cannot be removed because it is not empty"))
end end
return false return false
else end
if not inv:is_empty("upgrade1") then
minetest.item_drop(inv:get_stack("upgrade1", 1), "", pos) 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 end
if not inv:is_empty("upgrade2") then if oldmetadata.inventory.upgrade2 and oldmetadata.inventory.upgrade2[1] then
minetest.item_drop(inv:get_stack("upgrade2", 1), "", pos) local stack = ItemStack(oldmetadata.inventory.upgrade2[1])
if not stack:is_empty() then
minetest.item_drop(stack, "", pos)
end
end end
return true end
if minetest.registered_nodes[oldnode.name].tube then
pipeworks.after_dig(pos, oldnode, oldmetadata, player)
end end
end end

View File

@ -110,7 +110,7 @@ function technic.register_generator(data)
allow_metadata_inventory_move = technic.machine_inventory_move, allow_metadata_inventory_move = technic.machine_inventory_move,
technic_run = run, technic_run = run,
after_place_node = tube and pipeworks.after_place, 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", { minetest.register_node("technic:"..ltier.."_generator_active", {

View File

@ -154,7 +154,7 @@ function technic.register_base_machine(data)
allow_metadata_inventory_move = technic.machine_inventory_move, allow_metadata_inventory_move = technic.machine_inventory_move,
technic_run = run, technic_run = run,
after_place_node = tube and pipeworks.after_place, 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",{ minetest.register_node("technic:"..ltier.."_"..machine_name.."_active",{