From 5b378b8f6cc7bf41a20127b50ea4f264eeb0459d Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sun, 6 Mar 2016 21:49:09 +0000 Subject: [PATCH] Option to disable bones mod There is a much needed option to disable bones mod so that mods like dropondie can work properly. --- mods/bones/init.lua | 145 ++++++++++++++++++++++---------------------- 1 file changed, 72 insertions(+), 73 deletions(-) diff --git a/mods/bones/init.lua b/mods/bones/init.lua index c86deccd..8484e69a 100644 --- a/mods/bones/init.lua +++ b/mods/bones/init.lua @@ -153,80 +153,79 @@ local function may_replace(pos, player) return node_definition.buildable_to and not minetest.is_protected(pos, player:get_player_name()) end -minetest.register_on_dieplayer(function(player) - if minetest.setting_getbool("creative_mode") then - return - end - - local player_inv = player:get_inventory() - if player_inv:is_empty("main") and - player_inv:is_empty("craft") then - return - end - - local pos = player:getpos() - pos.x = math.floor(pos.x+0.5) - pos.y = math.floor(pos.y+0.5) - pos.z = math.floor(pos.z+0.5) - local param2 = minetest.dir_to_facedir(player:get_look_dir()) - local player_name = player:get_player_name() - local player_inv = player:get_inventory() - - if (not may_replace(pos, player)) then - if (may_replace({x=pos.x, y=pos.y+1, z=pos.z}, player)) then - -- drop one node above if there's space - -- this should solve most cases of protection related deaths in which players dig straight down - -- yet keeps the bones reachable - pos.y = pos.y+1 - else - -- drop items instead of delete - for i=1,player_inv:get_size("main") do - minetest.add_item(pos, player_inv:get_stack("main", i)) - end - for i=1,player_inv:get_size("craft") do - minetest.add_item(pos, player_inv:get_stack("craft", i)) - end - -- empty lists main and craft - player_inv:set_list("main", {}) - player_inv:set_list("craft", {}) +if not minetest.setting_getbool("disable_bones") and not minetest.setting_getbool("creative_mode") then + minetest.register_on_dieplayer(function(player) + local player_inv = player:get_inventory() + if player_inv:is_empty("main") and + player_inv:is_empty("craft") then return end - end - - minetest.set_node(pos, {name="bones:bones", param2=param2}) - - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - inv:set_size("main", 8*4) - inv:set_list("main", player_inv:get_list("main")) - - for i=1,player_inv:get_size("craft") do - local stack = player_inv:get_stack("craft", i) - if inv:room_for_item("main", stack) then - inv:add_item("main", stack) - else - --drop if no space left - minetest.add_item(pos, stack) - end - end - - player_inv:set_list("main", {}) - player_inv:set_list("craft", {}) - - meta:set_string("formspec", bones.bones_formspec) - meta:set_string("owner", player_name) - - if share_bones_time ~= 0 then - meta:set_string("infotext", player_name.."'s fresh bones") - if share_bones_time_early == 0 or not minetest.is_protected(pos, player_name) then - meta:set_int("time", 0) - else - meta:set_int("time", (share_bones_time - share_bones_time_early)) - end + local pos = player:getpos() + pos.x = math.floor(pos.x+0.5) + pos.y = math.floor(pos.y+0.5) + pos.z = math.floor(pos.z+0.5) + local param2 = minetest.dir_to_facedir(player:get_look_dir()) + local player_name = player:get_player_name() + local player_inv = player:get_inventory() + + if (not may_replace(pos, player)) then + if (may_replace({x=pos.x, y=pos.y+1, z=pos.z}, player)) then + -- drop one node above if there's space + -- this should solve most cases of protection related deaths in which players dig straight down + -- yet keeps the bones reachable + pos.y = pos.y+1 + else + -- drop items instead of delete + for i=1,player_inv:get_size("main") do + minetest.add_item(pos, player_inv:get_stack("main", i)) + end + for i=1,player_inv:get_size("craft") do + minetest.add_item(pos, player_inv:get_stack("craft", i)) + end + -- empty lists main and craft + player_inv:set_list("main", {}) + player_inv:set_list("craft", {}) + return + end + end + + minetest.set_node(pos, {name="bones:bones", param2=param2}) + + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + inv:set_list("main", player_inv:get_list("main")) + + for i=1,player_inv:get_size("craft") do + local stack = player_inv:get_stack("craft", i) + if inv:room_for_item("main", stack) then + inv:add_item("main", stack) + else + --drop if no space left + minetest.add_item(pos, stack) + end + end + + player_inv:set_list("main", {}) + player_inv:set_list("craft", {}) + + meta:set_string("formspec", bones.bones_formspec) + meta:set_string("owner", player_name) + + if share_bones_time ~= 0 then + meta:set_string("infotext", player_name.."'s fresh bones") + + if share_bones_time_early == 0 or not minetest.is_protected(pos, player_name) then + meta:set_int("time", 0) + else + meta:set_int("time", (share_bones_time - share_bones_time_early)) + end + + minetest.get_node_timer(pos):start(10) + else + meta:set_string("infotext", player_name.."'s bones") + end + end) +end - minetest.get_node_timer(pos):start(10) - else - meta:set_string("infotext", player_name.."'s bones") - end -end)