From da5e8ef63541b3386e2e3c2ed29aec4411e3139c Mon Sep 17 00:00:00 2001 From: TenPlus1 Date: Fri, 10 Feb 2017 12:04:57 +0000 Subject: [PATCH] add entity count check for spawners --- spawner.lua | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/spawner.lua b/spawner.lua index 9be2bf8..11ddfee 100644 --- a/spawner.lua +++ b/spawner.lua @@ -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