From 8e0b0f9421cd529de699dbbffcca5c5dd3315d5e Mon Sep 17 00:00:00 2001 From: Luke aka SwissalpS Date: Tue, 3 Sep 2024 10:44:01 +0200 Subject: [PATCH] use smallest area at given position Evaluate protection based on smallest area as that is what most users seem to expect to be happening. --- areas.lua | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/areas.lua b/areas.lua index 3e2b58a..d80bb70 100644 --- a/areas.lua +++ b/areas.lua @@ -9,19 +9,16 @@ end -- protection check local old_is_protected = minetest.is_protected function minetest.is_protected(pos, name) - local area_list = areas:getAreasAtPos(pos) - for id in pairs(area_list) do - local xp_area = xp_areas[id] - - if xp_area then - local xp = xp_redo.get_xp(name) - if xp_area.min and xp < xp_area.min then - return true - elseif xp_area.max and xp > xp_area.max then - return true - end - end - end + local _, id = areas:getSmallestAreaAtPos(pos) + local xp_area = id and xp_areas[id] + if xp_area then + local xp = xp_redo.get_xp(name) + if xp_area.min and xp < xp_area.min then + return true + elseif xp_area.max and xp > xp_area.max then + return true + end + end return old_is_protected(pos, name) end