From d8a201ae2dde1233a8c7683cc202ab6789a9b699 Mon Sep 17 00:00:00 2001
From: Wuzzy <almikes@aol.com>
Date: Wed, 24 May 2017 23:12:13 +0200
Subject: [PATCH] Update monster spawner code from Mobs Redo

---
 mods/ENTITIES/mobs/spawner.lua | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/mods/ENTITIES/mobs/spawner.lua b/mods/ENTITIES/mobs/spawner.lua
index 009ebbf6..ad047ae3 100644
--- a/mods/ENTITIES/mobs/spawner.lua
+++ b/mods/ENTITIES/mobs/spawner.lua
@@ -78,6 +78,9 @@ minetest.register_node("mobs:spawner", {
 	_mcl_hardness = 5,
 })
 
+
+local max_per_block = tonumber(minetest.setting_get("max_objects_per_block") or 99)
+
 -- spawner abm
 minetest.register_abm({
 	label = "Monster Spawner spawning a monster",
@@ -88,6 +91,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(" ")
@@ -105,17 +113,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