add entity count check for spawners

This commit is contained in:
TenPlus1 2017-02-10 12:04:57 +00:00
parent cce6eabd81
commit da5e8ef635
1 changed files with 16 additions and 2 deletions

View File

@ -71,6 +71,9 @@ minetest.register_node("mobs:spawner", {
end,
})
local max_per_block = tonumber(minetest.setting_get("max_objects_per_block") or 99)
-- spawner abm
minetest.register_abm({
label = "Mob spawner node",
@ -81,6 +84,11 @@ minetest.register_abm({
action = function(pos, node, active_object_count, active_object_count_wider)
-- return if too many entities already
if active_object_count_wider >= max_per_block then
return
end
-- get meta and command
local meta = minetest.get_meta(pos)
local comm = meta:get_string("command"):split(" ")
@ -98,17 +106,23 @@ minetest.register_abm({
return
end
-- are we spawning a registered mob?
if not mobs.spawning_mobs[mob] then
--print ("--- mob doesn't exist", mob)
return
end
-- check objects inside 9x9 area around spawner
local objs = minetest.get_objects_inside_radius(pos, 9)
local count = 0
local ent = nil
-- count mob objects of same type in area
for k, obj in pairs(objs) do
for k, obj in ipairs(objs) do
ent = obj:get_luaentity()
if ent and ent.name == mob then
if ent and ent.name and ent.name == mob then
count = count + 1
end
end