diff --git a/.luacheckrc b/.luacheckrc index f2a72e1..20970d5 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -662,6 +662,7 @@ stds.yl_spawnit = { "spawnit", "mob_core", "mobs_balrog", + "mobs_banshee", "nether", "petz", "water_life", diff --git a/mobs_banshee.lua b/mobs_banshee.lua index fa85199..f694cb6 100644 --- a/mobs_banshee.lua +++ b/mobs_banshee.lua @@ -1,12 +1,40 @@ +-- https://gitea.your-land.de/your-land/bugtracker/issues/5238#issuecomment-61128 +local function is_valid_bones(pos) + local meta = minetest.get_meta(pos) + if meta:get_string("owner") ~= "" then + -- prevent spawning on fresh bones + return false + end + + local inv = meta:get_inventory() + if inv:is_empty("main") then + -- prevent spawning on player-placed bones nodes + return false + end + + return true +end + spawnit.register({ entity_name = "mobs_banshee:banshee", groups = { monster = 1 }, chance = yl_spawnit.base_chance, near = { "bones:bones" }, max_in_area = 1, - max_in_area_radius = 8, + max_in_area_radius = 16, min_time_of_day = yl_spawnit.dusk, max_time_of_day = yl_spawnit.dawn, - min_player_distance = 12, + min_player_distance = (mobs_banshee.reach or 14) + 1, spawn_in_protected = false, + check_pos = function(pos) + local pos1 = vector.subtract(pos, 1) + local pos2 = vector.add(pos, 1) + local poss = minetest.find_nodes_in_area(pos1, pos2, "bones:bones") + for i = 1, #poss do + if is_valid_bones(poss[i]) then + return true + end + end + return false + end, }, yl_spawnit.settings.check_nodes)