only check protection if node can be dug by quarry

This commit is contained in:
OgelGames 2020-06-12 20:51:27 +10:00
parent 309f12b5ac
commit 449c772f76

View File

@ -133,15 +133,15 @@ local function quarry_handle_purge(pos)
end end
end end
local function can_dig_node(pos, node, digger) local function can_dig_node(pos, node_name, owner, digger)
if node.name == "air" or node.name == "vacuum:vacuum" then if node_name == "air" or node_name == "vacuum:vacuum" then
return false return false
end end
local def = minetest.registered_nodes[node.name] local def = minetest.registered_nodes[node_name]
if not def or not def.diggable then if not def or not def.diggable or (def.can_dig and not def.can_dig(pos, digger)) then
return false return false
end end
if def.can_dig and not def.can_dig(pos, digger) then if minetest.is_protected(dig_pos, owner) then
return false return false
end end
return true return true
@ -203,28 +203,26 @@ local function execute_dig(pos, node, meta)
meta:set_int("purge_on", 1) meta:set_int("purge_on", 1)
break break
end end
if not minetest.is_protected(dig_pos, owner) then local dig_node = technic.get_or_load_node(dig_pos) or minetest.get_node(dig_pos)
local dig_node = technic.get_or_load_node(dig_pos) or minetest.get_node(dig_pos) if can_dig_node(dig_pos, dig_node.name, owner, digger) then
if can_dig_node(dig_pos, dig_node, digger) then -- found something to dig, dig it and stop searching
-- found something to dig, dig it and stop searching minetest.remove_node(dig_pos)
minetest.remove_node(dig_pos) local inv = meta:get_inventory()
local inv = meta:get_inventory() local drops = minetest.get_node_drops(dig_node.name, "")
local drops = minetest.get_node_drops(dig_node.name, "") for _, dropped_item in ipairs(drops) do
for _, dropped_item in ipairs(drops) do local left = inv:add_item("cache", dropped_item)
local left = inv:add_item("cache", dropped_item) while not left:is_empty() do
while not left:is_empty() do
meta:set_int("purge_on", 1)
quarry_handle_purge(pos)
left = inv:add_item("cache", left)
end
end
local dug_nodes = meta:get_int("dug") + 1
meta:set_int("dug", dug_nodes)
if dug_nodes % 100 == 0 then
meta:set_int("purge_on", 1) meta:set_int("purge_on", 1)
quarry_handle_purge(pos)
left = inv:add_item("cache", left)
end end
break
end end
local dug_nodes = meta:get_int("dug") + 1
meta:set_int("dug", dug_nodes)
if dug_nodes % 100 == 0 then
meta:set_int("purge_on", 1)
end
break
end end
us_used = minetest.get_us_time() - t0 us_used = minetest.get_us_time() - t0
end end