prevent bones from deleting protected nodes (except air and liquids)

This commit is contained in:
Tim 2014-12-27 16:46:03 +01:00
parent a9ac480dcd
commit edced4d7ab

View file

@ -101,6 +101,25 @@ minetest.register_node("bones:bones", {
end, end,
}) })
local function may_replace(pos, player)
local nodename = minetest.get_node(pos).name
print(nodename)
-- allow replacing air and liquids
if nodename == "air" or minetest.registered_nodes[nodename].liquidtype ~= "none" then
return true
end
-- don't replace filled chests and other nodes that don't allow it
if minetest.registered_nodes[nodename].can_dig and
not minetest.registered_nodes[nodename].can_dig(pos, player) then
return false
end
-- only replace nodes that are not protected
return not minetest.is_protected(pos, player:get_player_name())
end
minetest.register_on_dieplayer(function(player) minetest.register_on_dieplayer(function(player)
if minetest.setting_getbool("creative_mode") then if minetest.setting_getbool("creative_mode") then
return return
@ -119,11 +138,8 @@ minetest.register_on_dieplayer(function(player)
local param2 = minetest.dir_to_facedir(player:get_look_dir()) local param2 = minetest.dir_to_facedir(player:get_look_dir())
local player_name = player:get_player_name() local player_name = player:get_player_name()
local player_inv = player:get_inventory() local player_inv = player:get_inventory()
local nn = minetest.get_node(pos).name
if minetest.registered_nodes[nn].can_dig and
not minetest.registered_nodes[nn].can_dig(pos, player) then
if (not may_replace(pos, player)) then
-- drop items instead of delete -- drop items instead of delete
for i=1,player_inv:get_size("main") do for i=1,player_inv:get_size("main") do
minetest.add_item(pos, player_inv:get_stack("main", i)) minetest.add_item(pos, player_inv:get_stack("main", i))
@ -137,8 +153,7 @@ minetest.register_on_dieplayer(function(player)
return return
end end
minetest.dig_node(pos) minetest.set_node(pos, {name="bones:bones", param2=param2})
minetest.add_node(pos, {name="bones:bones", param2=param2})
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local inv = meta:get_inventory() local inv = meta:get_inventory()