summaryrefslogtreecommitdiff
path: root/spawner.lua
diff options
context:
space:
mode:
authorTenPlus1 <kinsellaja@yahoo.com>2017-02-10 12:04:57 +0000
committerTenPlus1 <kinsellaja@yahoo.com>2017-02-10 12:04:57 +0000
commitda5e8ef63541b3386e2e3c2ed29aec4411e3139c (patch)
treec36e6996329291f624dfbe84e308011489e8dc8a /spawner.lua
parentcce6eabd8144a117dedbd308975c680a43e4ad57 (diff)
add entity count check for spawners
Diffstat (limited to 'spawner.lua')
-rw-r--r--spawner.lua18
1 files 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