diff options
author | TenPlus1 <kinsellaja@yahoo.com> | 2017-02-10 12:04:57 +0000 |
---|---|---|
committer | TenPlus1 <kinsellaja@yahoo.com> | 2017-02-10 12:04:57 +0000 |
commit | da5e8ef63541b3386e2e3c2ed29aec4411e3139c (patch) | |
tree | c36e6996329291f624dfbe84e308011489e8dc8a /spawner.lua | |
parent | cce6eabd8144a117dedbd308975c680a43e4ad57 (diff) |
add entity count check for spawners
Diffstat (limited to 'spawner.lua')
-rw-r--r-- | spawner.lua | 18 |
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 |